annotate tests/printenv.py @ 41028:3c5aaea9638f

tests: update printenv.py argument parsing We are about to introduce a new flag for printing the HG environment variables one per line and it's easier to do when using the argparse module for argument parsing. Differential Revision: https://phab.mercurial-scm.org/D5452
author Boris Feld <boris.feld@octobus.net>
date Wed, 19 Dec 2018 15:42:20 +0100
parents 42f3a277c8dc
children 73da729ccfef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25477
a372f7b4463b tests: make printenv executable
Matt Mackall <mpm@selenic.com>
parents: 17018
diff changeset
1 #!/usr/bin/env python
a372f7b4463b tests: make printenv executable
Matt Mackall <mpm@selenic.com>
parents: 17018
diff changeset
2 #
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
3 # simple script to be used in hooks
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
4 #
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
5 # put something like this in the repo .hg/hgrc:
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
6 #
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
7 # [hooks]
17018
e7fdfc702d9f tests: consistently use printenv.py the same MSYS/Windows-compatible way
Mads Kiilerich <mads@kiilerich.com>
parents: 16982
diff changeset
8 # changegroup = python "$TESTDIR/printenv.py" <hookname> [exit] [output]
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
9 #
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
10 # - <hookname> is a mandatory argument (e.g. "changegroup")
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
11 # - [exit] is the exit code of the hook (default: 0)
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
12 # - [output] is the name of the output file (default: use sys.stdout)
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
13 # the file will be opened in append mode.
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
14 #
28944
036787c10b16 py3: use absolute_import in printenv.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 25477
diff changeset
15 from __future__ import absolute_import
41028
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
16 import argparse
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
17 import os
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
18 import sys
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
19
7080
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
20 try:
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
21 import msvcrt
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
22 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
23 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
7186
f77c8d8331ca clean up trailing spaces, leading spaces in C
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7080
diff changeset
24 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
7080
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
25 except ImportError:
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
26 pass
a6477aa893b8 tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents: 4659
diff changeset
27
41028
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
28 parser = argparse.ArgumentParser()
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
29 parser.add_argument("name", help="the hook name, used for display")
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
30 parser.add_argument(
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
31 "exitcode",
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
32 nargs="?",
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
33 default=0,
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
34 type=int,
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
35 help="the exit code for the hook",
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
36 )
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
37 parser.add_argument(
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
38 "out", nargs="?", default=None, help="where to write the output"
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
39 )
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
40 args = parser.parse_args()
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
41
41028
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
42 if args.out is None:
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
43 out = sys.stdout
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
44 out = getattr(out, "buffer", out)
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
45 else:
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
46 out = open(args.out, "ab")
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
47
4643
a39cec1d5cb8 printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents: 4285
diff changeset
48 # variables with empty values may not exist on all platforms, filter
a39cec1d5cb8 printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents: 4285
diff changeset
49 # them now for portability sake.
36287
84a6e39bc723 printenv: port to python3
Augie Fackler <augie@google.com>
parents: 28944
diff changeset
50 env = [(k, v) for k, v in os.environ.items()
4643
a39cec1d5cb8 printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents: 4285
diff changeset
51 if k.startswith("HG_") and v]
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
52 env.sort()
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
53
41028
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
54 out.write(b"%s hook: " % args.name.encode('ascii'))
16982
9c892c830a72 tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents: 16963
diff changeset
55 if os.name == 'nt':
9c892c830a72 tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents: 16963
diff changeset
56 filter = lambda x: x.replace('\\', '/')
9c892c830a72 tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents: 16963
diff changeset
57 else:
9c892c830a72 tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents: 16963
diff changeset
58 filter = lambda x: x
38144
bacbe829c2bf py3: use bytes in tests/printenv.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36287
diff changeset
59 vars = [b"%s=%s" % (k.encode('ascii'), filter(v).encode('ascii'))
bacbe829c2bf py3: use bytes in tests/printenv.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36287
diff changeset
60 for k, v in env]
bacbe829c2bf py3: use bytes in tests/printenv.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36287
diff changeset
61 out.write(b" ".join(vars))
bacbe829c2bf py3: use bytes in tests/printenv.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36287
diff changeset
62 out.write(b"\n")
4285
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
63 out.close()
4fd6f7e60894 Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
64
41028
3c5aaea9638f tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents: 38307
diff changeset
65 sys.exit(args.exitcode)