view tests/printenv.py @ 35651:15cfd343d3a9

tests: make hg frame optional When `hg` is a Rust binary, the `hg` frame doesn't exist because an `hg` Python script doesn't exist. This commit updates expected test output to make the `hg` frame optional. There /might/ be a way to do this more accurately with the "(feature !)" syntax in .t files. However, I poked at it for a few minutes and couldn't get it to work. Worst case with using (?) is we drop the frame from output for Python `hg`. The `hg` frame isn't terribly important. So the worst case doesn't feel that bad. If someone wants to enlighten me on how to use "(feature !)" for optional output based on hghave features, I'd be more than willing to update this. Differential Revision: https://phab.mercurial-scm.org/D1858
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 10 Jan 2018 20:02:35 -0800
parents 036787c10b16
children 84a6e39bc723
line wrap: on
line source

#!/usr/bin/env python
#
# simple script to be used in hooks
#
# put something like this in the repo .hg/hgrc:
#
#     [hooks]
#     changegroup = python "$TESTDIR/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.
#
from __future__ import absolute_import
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, v) for k, v in os.environ.iteritems()
       if k.startswith("HG_") and v]
env.sort()

out.write("%s hook: " % name)
if os.name == 'nt':
    filter = lambda x: x.replace('\\', '/')
else:
    filter = lambda x: x
vars = ["%s=%s" % (k, filter(v)) for k, v in env]
out.write(" ".join(vars))
out.write("\n")
out.close()

sys.exit(exitcode)