tests/printenv.py
author Ry4an Brase <ry4an-hg@ry4an.org>
Wed, 14 Apr 2010 00:24:47 -0500
branchstable
changeset 10904 26d1d23e5a2b
parent 10282 08a0f04b56bd
child 12642 bb35840e965c
permissions -rw-r--r--
Fix --blacklist when --jobs > 1 in run_tests.py. The options parsing logic replaces the options.blacklist initial value, a list of filenames, with a dict of test names to filenames. When runchildren rebuilds the command line to launch child processes the dict is flattened and provided as a malformed argument when a filename is expected. Fix is to remove the blacklist option from child invocations since the filtering is handled in the parent anyway.

# simple script to be used in hooks
# copy it to the current directory when the test starts:
#
#     cp "$TESTDIR"/printenv.py .
#
# put something like this in the repo .hg/hgrc:
#
#     [hooks]
#     changegroup = python ../printenv.py <hookname> [exit] [output]
#
#   - <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.
#
import os
import sys

try:
    import msvcrt
    msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
    msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
except ImportError:
    pass

exitcode = 0
out = sys.stdout

name = sys.argv[1]
if len(sys.argv) > 2:
    exitcode = int(sys.argv[2])
    if len(sys.argv) > 3:
        out = open(sys.argv[3], "ab")

# variables with empty values may not exist on all platforms, filter
# them now for portability sake.
env = [k for k, v in os.environ.iteritems()
       if k.startswith("HG_") and v]
env.sort()

# edit the variable part of the variable
url = os.environ.get("HG_URL", "")
if url.startswith("file:"):
    os.environ["HG_URL"] = "file:"
elif url.startswith("remote:http"):
    os.environ["HG_URL"] = "remote:http"

out.write("%s hook: " % name)
for v in env:
    out.write("%s=%s " %
              (v, os.environ[v].replace(os.environ["HGTMP"], '$HGTMP')))
out.write("\n")
out.close()

sys.exit(exitcode)