printenv.py
80 lines
| 1.9 KiB
| text/x-python
|
PythonLexer
/ tests / printenv.py
Matt Mackall
|
r25477 | #!/usr/bin/env python | ||
# | ||||
Alexis S. L. Carvalho
|
r4285 | # simple script to be used in hooks | ||
# | ||||
# put something like this in the repo .hg/hgrc: | ||||
# | ||||
# [hooks] | ||||
Mads Kiilerich
|
r17018 | # changegroup = python "$TESTDIR/printenv.py" <hookname> [exit] [output] | ||
Alexis S. L. Carvalho
|
r4285 | # | ||
# - <hookname> is a mandatory argument (e.g. "changegroup") | ||||
# - [exit] is the exit code of the hook (default: 0) | ||||
# - [output] is the name of the output file (default: use sys.stdout) | ||||
# the file will be opened in append mode. | ||||
# | ||||
Robert Stanca
|
r28944 | from __future__ import absolute_import | ||
Boris Feld
|
r41054 | import argparse | ||
Alexis S. L. Carvalho
|
r4285 | import os | ||
import sys | ||||
Patrick Mezard
|
r7080 | try: | ||
import msvcrt | ||||
Augie Fackler
|
r43346 | |||
Patrick Mezard
|
r7080 | msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) | ||
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
Dirkjan Ochtman
|
r7186 | msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) | ||
Patrick Mezard
|
r7080 | except ImportError: | ||
pass | ||||
Boris Feld
|
r41054 | parser = argparse.ArgumentParser() | ||
parser.add_argument("name", help="the hook name, used for display") | ||||
parser.add_argument( | ||||
"exitcode", | ||||
nargs="?", | ||||
default=0, | ||||
type=int, | ||||
help="the exit code for the hook", | ||||
) | ||||
parser.add_argument( | ||||
"out", nargs="?", default=None, help="where to write the output" | ||||
) | ||||
Boris Feld
|
r41065 | parser.add_argument( | ||
"--line", | ||||
action="store_true", | ||||
help="print environment variables one per line instead of on a single line", | ||||
) | ||||
Boris Feld
|
r41054 | args = parser.parse_args() | ||
Alexis S. L. Carvalho
|
r4285 | |||
Boris Feld
|
r41054 | if args.out is None: | ||
out = sys.stdout | ||||
out = getattr(out, "buffer", out) | ||||
else: | ||||
out = open(args.out, "ab") | ||||
Alexis S. L. Carvalho
|
r4285 | |||
Patrick Mezard
|
r4643 | # variables with empty values may not exist on all platforms, filter | ||
# them now for portability sake. | ||||
Augie Fackler
|
r43346 | env = [(k, v) for k, v in os.environ.items() if k.startswith("HG_") and v] | ||
Alexis S. L. Carvalho
|
r4285 | env.sort() | ||
Boris Feld
|
r41054 | out.write(b"%s hook: " % args.name.encode('ascii')) | ||
Adrian Buehlmann
|
r16982 | if os.name == 'nt': | ||
filter = lambda x: x.replace('\\', '/') | ||||
else: | ||||
filter = lambda x: x | ||||
Boris Feld
|
r41065 | |||
Augie Fackler
|
r43346 | vars = [ | ||
b"%s=%s" % (k.encode('ascii'), filter(v).encode('ascii')) for k, v in env | ||||
] | ||||
Boris Feld
|
r41065 | |||
# Print variables on out | ||||
if not args.line: | ||||
out.write(b" ".join(vars)) | ||||
else: | ||||
for var in vars: | ||||
out.write(var) | ||||
out.write(b"\n") | ||||
Pulkit Goyal
|
r38123 | out.write(b"\n") | ||
Alexis S. L. Carvalho
|
r4285 | out.close() | ||
Boris Feld
|
r41054 | sys.exit(args.exitcode) | ||