author | Yuya Nishihara <yuya@tcha.org> |
Tue, 16 Oct 2018 07:04:07 +0200 | |
changeset 40316 | 09540a5f0a15 |
parent 37318 | 9954d0e2ad00 |
child 41334 | 5361f9ed8a30 |
permissions | -rw-r--r-- |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
1 |
Setup: |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
2 |
$ cat > eval.py <<EOF |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
3 |
> from __future__ import absolute_import |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
4 |
> import filecmp |
37318
9954d0e2ad00
py3: use pycompat.bytestr() intsead of str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36382
diff
changeset
|
5 |
> from mercurial import commands, context, pycompat, registrar |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
6 |
> cmdtable = {} |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
7 |
> command = registrar.command(cmdtable) |
36382
b4d1c09b754b
py3: add missing b'' in test-arbitraryfilectx.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35947
diff
changeset
|
8 |
> @command(b'eval', [], b'hg eval CMD') |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
9 |
> def eval_(ui, repo, *cmds, **opts): |
35947
a36d3c8a0e41
py3: add b'' prefixes to string literals in test files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34936
diff
changeset
|
10 |
> cmd = b" ".join(cmds) |
37318
9954d0e2ad00
py3: use pycompat.bytestr() intsead of str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36382
diff
changeset
|
11 |
> res = pycompat.bytestr(eval(cmd, globals(), locals())) |
35947
a36d3c8a0e41
py3: add b'' prefixes to string literals in test files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34936
diff
changeset
|
12 |
> ui.warn(b"%s" % res) |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
13 |
> EOF |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
14 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
15 |
$ echo "[extensions]" >> $HGRCPATH |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
16 |
$ echo "eval=`pwd`/eval.py" >> $HGRCPATH |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
17 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
18 |
Arbitraryfilectx.cmp does not follow symlinks: |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
19 |
$ mkdir case1 |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
20 |
$ cd case1 |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
21 |
$ hg init |
34936
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
22 |
#if symlink |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
23 |
$ printf "A" > real_A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
24 |
$ printf "foo" > A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
25 |
$ printf "foo" > B |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
26 |
$ ln -s A sym_A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
27 |
$ hg add . |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
28 |
adding A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
29 |
adding B |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
30 |
adding real_A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
31 |
adding sym_A |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
32 |
$ hg commit -m "base" |
34936
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
33 |
#else |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
34 |
$ hg import -q --bypass - <<EOF |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
35 |
> # HG changeset patch |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
36 |
> # User test |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
37 |
> # Date 0 0 |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
38 |
> base |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
39 |
> |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
40 |
> diff --git a/A b/A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
41 |
> new file mode 100644 |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
42 |
> --- /dev/null |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
43 |
> +++ b/A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
44 |
> @@ -0,0 +1,1 @@ |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
45 |
> +foo |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
46 |
> \ No newline at end of file |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
47 |
> diff --git a/B b/B |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
48 |
> new file mode 100644 |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
49 |
> --- /dev/null |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
50 |
> +++ b/B |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
51 |
> @@ -0,0 +1,1 @@ |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
52 |
> +foo |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
53 |
> \ No newline at end of file |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
54 |
> diff --git a/real_A b/real_A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
55 |
> new file mode 100644 |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
56 |
> --- /dev/null |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
57 |
> +++ b/real_A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
58 |
> @@ -0,0 +1,1 @@ |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
59 |
> +A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
60 |
> \ No newline at end of file |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
61 |
> diff --git a/sym_A b/sym_A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
62 |
> new file mode 120000 |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
63 |
> --- /dev/null |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
64 |
> +++ b/sym_A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
65 |
> @@ -0,0 +1,1 @@ |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
66 |
> +A |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
67 |
> \ No newline at end of file |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
68 |
> EOF |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
69 |
$ hg up -q |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
70 |
#endif |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
71 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
72 |
These files are different and should return True (different): |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
73 |
(Note that filecmp.cmp's return semantics are inverted from ours, so we invert |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
74 |
for simplicity): |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
75 |
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['real_A'])" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
76 |
True (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
77 |
$ hg eval "not filecmp.cmp('A', 'real_A')" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
78 |
True (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
79 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
80 |
These files are identical and should return False (same): |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
81 |
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['A'])" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
82 |
False (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
83 |
$ hg eval "context.arbitraryfilectx('A', repo).cmp(repo[None]['B'])" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
84 |
False (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
85 |
$ hg eval "not filecmp.cmp('A', 'B')" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
86 |
False (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
87 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
88 |
This comparison should also return False, since A and sym_A are substantially |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
89 |
the same in the eyes of ``filectx.cmp``, which looks at data only. |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
90 |
$ hg eval "context.arbitraryfilectx('real_A', repo).cmp(repo[None]['sym_A'])" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
91 |
False (no-eol) |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
92 |
|
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
93 |
A naive use of filecmp on those two would wrongly return True, since it follows |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
94 |
the symlink to "A", which has different contents. |
34936
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
95 |
#if symlink |
34835
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
96 |
$ hg eval "not filecmp.cmp('real_A', 'sym_A')" |
14c87708f432
arbitraryfilecontext: skip the cmp fast path if any side is a symlink
Phil Cohen <phillco@fb.com>
parents:
diff
changeset
|
97 |
True (no-eol) |
34936
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
98 |
#else |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
99 |
$ hg eval "not filecmp.cmp('real_A', 'sym_A')" |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
100 |
False (no-eol) |
9645c2a2bc2a
test-arbitraryfilectx: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
34835
diff
changeset
|
101 |
#endif |