Mercurial > hg
annotate tests/printenv.py @ 18986:2f7186400a07
ancestor: a new algorithm that is faster for nodes near tip
Instead of walking all the way to the root of the DAG, we generate
a set of candidate GCA revs, then figure out which ones will win
the race to the root (usually without needing to traverse all the
way to the root).
In the common case of nodes that are close to each other in both
revision number and topology, this is usually a big win: it makes
"hg --time debugancestors" up to 9 times faster than the more general
ancestor function when measured on heads of the linux-2.6 hg repo.
Victory is not assured, however. The older function can still win
by a large margin if one node is much closer to the root than the
other, or by a much smaller amount if one is an ancestor of the
other.
For now, we've also got a small paranoid harness function that calls
both ancestor functions on every input and ensures that they give
equivalent answers.
Even without the checker function, the old ancestor function needs
to stay alive for the time being, as its generality is used by
context.filectx.merge.
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Tue, 16 Apr 2013 10:08:18 -0700 |
parents | e7fdfc702d9f |
children | a372f7b4463b |
rev | line source |
---|---|
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
1 # simple script to be used in hooks |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
2 # |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
3 # 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
|
4 # |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
5 # [hooks] |
17018
e7fdfc702d9f
tests: consistently use printenv.py the same MSYS/Windows-compatible way
Mads Kiilerich <mads@kiilerich.com>
parents:
16982
diff
changeset
|
6 # 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
|
7 # |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
8 # - <hookname> is a mandatory argument (e.g. "changegroup") |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
9 # - [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
|
10 # - [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
|
11 # the file will be opened in append mode. |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
12 # |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
13 import os |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
14 import sys |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
15 |
7080
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
16 try: |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
17 import msvcrt |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
18 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
19 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
|
20 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
7080
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
21 except ImportError: |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
22 pass |
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
4659
diff
changeset
|
23 |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
24 exitcode = 0 |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
25 out = sys.stdout |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
26 |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
27 name = sys.argv[1] |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
28 if len(sys.argv) > 2: |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
29 exitcode = int(sys.argv[2]) |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
30 if len(sys.argv) > 3: |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
31 out = open(sys.argv[3], "ab") |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
32 |
4643
a39cec1d5cb8
printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents:
4285
diff
changeset
|
33 # 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
|
34 # them now for portability sake. |
16963
c19113e842d3
tests/printenv.py: replace \ with / in output
Adrian Buehlmann <adrian@cadifra.com>
parents:
13405
diff
changeset
|
35 env = [(k, v) for k, v in os.environ.iteritems() |
4643
a39cec1d5cb8
printenv: filter empty environment variables for portability.
Patrick Mezard <pmezard@gmail.com>
parents:
4285
diff
changeset
|
36 if k.startswith("HG_") and v] |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
37 env.sort() |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
38 |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
39 out.write("%s hook: " % name) |
16982
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
40 if os.name == 'nt': |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
41 filter = lambda x: x.replace('\\', '/') |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
42 else: |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
43 filter = lambda x: x |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
44 vars = ["%s=%s" % (k, filter(v)) for k, v in env] |
9c892c830a72
tests/printenv.py: eliminate trailing spaces on output
Adrian Buehlmann <adrian@cadifra.com>
parents:
16963
diff
changeset
|
45 out.write(" ".join(vars)) |
4285
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
46 out.write("\n") |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
47 out.close() |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
48 |
4fd6f7e60894
Add tests/printenv.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff
changeset
|
49 sys.exit(exitcode) |