Mercurial > hg-stable
annotate tests/printenv.py @ 47063:ec081d7f0009
tests: fix test-chg to ignore a warning about being unable to set locale
This is apparently coming from bash when bash is providing the sh that we're
using to execute the .sh file generated by run-tests for this test.
Bash on my machine:
```
$ sh --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ sh
sh-5.1$ LC_CTYPE=unsupported_value echo hi
sh: warning: setlocale: LC_CTYPE: cannot change locale (unsupported_value): No such file or directory
hi
```
Differential Revision: https://phab.mercurial-scm.org/D10468
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Fri, 16 Apr 2021 18:56:26 -0700 |
parents | c102b704edb5 |
children | 6000f5b25c9b |
rev | line source |
---|---|
45849
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
1 #!/usr/bin/env python3 |
25477
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 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41039
diff
changeset
|
22 |
7080
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
23 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
24 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
|
25 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
7080
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
26 except ImportError: |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
27 pass |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
28 |
41028
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
29 parser = argparse.ArgumentParser() |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
30 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
|
31 parser.add_argument( |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
32 "exitcode", |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
33 nargs="?", |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
34 default=0, |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
35 type=int, |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
36 help="the exit code for the hook", |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
37 ) |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
38 parser.add_argument( |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
39 "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
|
40 ) |
41039
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
41 parser.add_argument( |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
42 "--line", |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
43 action="store_true", |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
44 help="print environment variables one per line instead of on a single line", |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
45 ) |
41028
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
46 args = parser.parse_args() |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
47 |
41028
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
48 if args.out is None: |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
49 out = sys.stdout |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
50 out = getattr(out, "buffer", out) |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
51 else: |
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
52 out = open(args.out, "ab") |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
53 |
4643
a39cec1d5cb8
printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents:
4285
diff
changeset
|
54 # 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
|
55 # them now for portability sake. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41039
diff
changeset
|
56 env = [(k, v) for k, v in os.environ.items() if k.startswith("HG_") and v] |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
57 env.sort() |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
58 |
41028
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
59 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
|
60 if os.name == 'nt': |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
61 filter = lambda x: x.replace('\\', '/') |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
62 else: |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
63 filter = lambda x: x |
41039
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
64 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41039
diff
changeset
|
65 vars = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41039
diff
changeset
|
66 b"%s=%s" % (k.encode('ascii'), filter(v).encode('ascii')) for k, v in env |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41039
diff
changeset
|
67 ] |
41039
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
68 |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
69 # Print variables on out |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
70 if not args.line: |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
71 out.write(b" ".join(vars)) |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
72 else: |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
73 for var in vars: |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
74 out.write(var) |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
75 out.write(b"\n") |
73da729ccfef
test: introduce a new flag to display env variable line per line
Boris Feld <boris.feld@octobus.net>
parents:
41028
diff
changeset
|
76 |
38144
bacbe829c2bf
py3: use bytes in tests/printenv.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36287
diff
changeset
|
77 out.write(b"\n") |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
78 out.close() |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
79 |
41028
3c5aaea9638f
tests: update printenv.py argument parsing
Boris Feld <boris.feld@octobus.net>
parents:
38307
diff
changeset
|
80 sys.exit(args.exitcode) |