test-arbitraryfilectx.t
101 lines
| 2.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-arbitraryfilectx.t
Phil Cohen
|
r34836 | Setup: | ||
$ cat > eval.py <<EOF | ||||
> from __future__ import absolute_import | ||||
> import filecmp | ||||
Pulkit Goyal
|
r37334 | > from mercurial import commands, context, pycompat, registrar | ||
Phil Cohen
|
r34836 | > cmdtable = {} | ||
> command = registrar.command(cmdtable) | ||||
Pulkit Goyal
|
r36400 | > @command(b'eval', [], b'hg eval CMD') | ||
Phil Cohen
|
r34836 | > def eval_(ui, repo, *cmds, **opts): | ||
Pulkit Goyal
|
r35965 | > cmd = b" ".join(cmds) | ||
Pulkit Goyal
|
r37334 | > res = pycompat.bytestr(eval(cmd, globals(), locals())) | ||
Pulkit Goyal
|
r35965 | > ui.warn(b"%s" % res) | ||
Phil Cohen
|
r34836 | > EOF | ||
$ echo "[extensions]" >> $HGRCPATH | ||||
$ echo "eval=`pwd`/eval.py" >> $HGRCPATH | ||||
Arbitraryfilectx.cmp does not follow symlinks: | ||||
$ mkdir case1 | ||||
$ cd case1 | ||||
$ hg init | ||||
Matt Harbison
|
r34937 | #if symlink | ||
Phil Cohen
|
r34836 | $ printf "A" > real_A | ||
$ printf "foo" > A | ||||
$ printf "foo" > B | ||||
$ ln -s A sym_A | ||||
$ hg add . | ||||
adding A | ||||
adding B | ||||
adding real_A | ||||
adding sym_A | ||||
$ hg commit -m "base" | ||||
Matt Harbison
|
r34937 | #else | ||
$ hg import -q --bypass - <<EOF | ||||
> # HG changeset patch | ||||
> # User test | ||||
> # Date 0 0 | ||||
> base | ||||
> | ||||
> diff --git a/A b/A | ||||
> new file mode 100644 | ||||
> --- /dev/null | ||||
> +++ b/A | ||||
> @@ -0,0 +1,1 @@ | ||||
> +foo | ||||
> \ No newline at end of file | ||||
> diff --git a/B b/B | ||||
> new file mode 100644 | ||||
> --- /dev/null | ||||
> +++ b/B | ||||
> @@ -0,0 +1,1 @@ | ||||
> +foo | ||||
> \ No newline at end of file | ||||
> diff --git a/real_A b/real_A | ||||
> new file mode 100644 | ||||
> --- /dev/null | ||||
> +++ b/real_A | ||||
> @@ -0,0 +1,1 @@ | ||||
> +A | ||||
> \ No newline at end of file | ||||
> diff --git a/sym_A b/sym_A | ||||
> new file mode 120000 | ||||
> --- /dev/null | ||||
> +++ b/sym_A | ||||
> @@ -0,0 +1,1 @@ | ||||
> +A | ||||
> \ No newline at end of file | ||||
> EOF | ||||
$ hg up -q | ||||
#endif | ||||
Phil Cohen
|
r34836 | |||
These files are different and should return True (different): | ||||
(Note that filecmp.cmp's return semantics are inverted from ours, so we invert | ||||
for simplicity): | ||||
Augie Fackler
|
r41365 | $ hg eval "context.arbitraryfilectx(b'A', repo).cmp(repo[None][b'real_A'])" | ||
Phil Cohen
|
r34836 | True (no-eol) | ||
Augie Fackler
|
r41365 | $ hg eval "not filecmp.cmp(b'A', b'real_A')" | ||
Phil Cohen
|
r34836 | True (no-eol) | ||
These files are identical and should return False (same): | ||||
Augie Fackler
|
r41365 | $ hg eval "context.arbitraryfilectx(b'A', repo).cmp(repo[None][b'A'])" | ||
Phil Cohen
|
r34836 | False (no-eol) | ||
Augie Fackler
|
r41365 | $ hg eval "context.arbitraryfilectx(b'A', repo).cmp(repo[None][b'B'])" | ||
Phil Cohen
|
r34836 | False (no-eol) | ||
Augie Fackler
|
r41365 | $ hg eval "not filecmp.cmp(b'A', b'B')" | ||
Phil Cohen
|
r34836 | False (no-eol) | ||
This comparison should also return False, since A and sym_A are substantially | ||||
the same in the eyes of ``filectx.cmp``, which looks at data only. | ||||
Augie Fackler
|
r41365 | $ hg eval "context.arbitraryfilectx(b'real_A', repo).cmp(repo[None][b'sym_A'])" | ||
Phil Cohen
|
r34836 | False (no-eol) | ||
A naive use of filecmp on those two would wrongly return True, since it follows | ||||
the symlink to "A", which has different contents. | ||||
Matt Harbison
|
r34937 | #if symlink | ||
Augie Fackler
|
r41365 | $ hg eval "not filecmp.cmp(b'real_A', b'sym_A')" | ||
Phil Cohen
|
r34836 | True (no-eol) | ||
Matt Harbison
|
r34937 | #else | ||
Augie Fackler
|
r41365 | $ hg eval "not filecmp.cmp(b'real_A', b'sym_A')" | ||
Matt Harbison
|
r34937 | False (no-eol) | ||
#endif | ||||