##// END OF EJS Templates
localrepo: fix variable binding in handling of old filters...
localrepo: fix variable binding in handling of old filters The lambda was referencing oldfn in outer scope without binding the current value. If oldfn function were reassigned before use, wrong filters could be used. Fixed by having oldfn as named parameter default value of the lambda.

File last commit:

r43472:6ceb3721 default
r43473:8864aa96 default
Show More
test-eol-update.t
312 lines | 6.6 KiB | text/troff | Tads3Lexer
/ tests / test-eol-update.t
Matt Mackall
tests: unify test-eol-update
r12424 Test EOL update
Martin Geisler
tests: don't overwrite HGRCPATH...
r13519 $ cat >> $HGRCPATH <<EOF
Matt Mackall
tests: unify test-eol-update
r12424 > [diff]
> git = 1
> EOF
$ seteol () {
> if [ $1 = "LF" ]; then
> EOL='\n'
> else
> EOL='\r\n'
> fi
> }
$ makerepo () {
> echo
> echo "# ==== setup repository ===="
> echo '% hg init'
> hg init repo
> cd repo
>
> cat > .hgeol <<EOF
> [patterns]
> **.txt = LF
> EOF
>
> printf "first\nsecond\nthird\n" > a.txt
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 > printf "f\r\n" > f
Matt Mackall
tests: unify test-eol-update
r12424 > hg commit --addremove -m 'LF commit'
>
> cat > .hgeol <<EOF
> [patterns]
> **.txt = CRLF
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 > f = LF
Matt Mackall
tests: unify test-eol-update
r12424 > EOF
>
> printf "first\r\nsecond\r\nthird\r\n" > a.txt
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 > printf "f\n" > f
Matt Mackall
tests: unify test-eol-update
r12424 > hg commit -m 'CRLF commit'
>
> cd ..
> }
$ dotest () {
> seteol $1
>
> echo
> echo "% hg clone repo repo-$1"
> hg clone --noupdate repo repo-$1
> cd repo-$1
>
> cat > .hg/hgrc <<EOF
> [extensions]
> eol =
> EOF
>
> hg update
>
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 > echo '% a.txt (before)'
> cat a.txt
Matt Mackall
tests: unify test-eol-update
r12424 >
> printf "first${EOL}third${EOL}" > a.txt
>
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 > echo '% a.txt (after)'
> cat a.txt
Matt Mackall
tests: unify test-eol-update
r12424 > echo '% hg diff'
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 > hg diff
Matt Mackall
tests: unify test-eol-update
r12424 >
> echo '% hg update 0'
> hg update 0
>
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 > echo '% a.txt'
> cat a.txt
Matt Mackall
tests: unify test-eol-update
r12424 > echo '% hg diff'
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 > hg diff
Matt Mackall
tests: unify test-eol-update
r12424 >
>
> cd ..
> rm -r repo-$1
> }
$ makerepo
# ==== setup repository ====
% hg init
adding .hgeol
adding a.txt
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 adding f
Matt Mackall
tests: unify test-eol-update
r12424 $ dotest LF
% hg clone repo repo-LF
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 % a.txt (before)
first\r (esc)
second\r (esc)
third\r (esc)
% a.txt (after)
Matt Mackall
tests: unify test-eol-update
r12424 first
third
% hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 first\r (esc)
-second\r (esc)
third\r (esc)
Matt Mackall
tests: unify test-eol-update
r12424 % hg update 0
merging a.txt
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 % a.txt
Matt Mackall
tests: unify test-eol-update
r12424 first
third
% hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
first
-second
third
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 diff --git a/f b/f
--- a/f
+++ b/f
@@ -1,1 +1,1 @@
-f\r (esc)
+f
Matt Mackall
tests: unify test-eol-update
r12424 $ dotest CRLF
% hg clone repo repo-CRLF
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 % a.txt (before)
first\r (esc)
second\r (esc)
third\r (esc)
% a.txt (after)
first\r (esc)
third\r (esc)
Matt Mackall
tests: unify test-eol-update
r12424 % hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 first\r (esc)
-second\r (esc)
third\r (esc)
Matt Mackall
tests: unify test-eol-update
r12424 % hg update 0
merging a.txt
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
tests: use (esc) instead of other kinds of string escaping
r12943 % a.txt
Matt Mackall
tests: unify test-eol-update
r12424 first
third
% hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
first
-second
third
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 diff --git a/f b/f
--- a/f
+++ b/f
@@ -1,1 +1,1 @@
-f\r (esc)
+f
Test in repo using eol extension, while keeping an eye on how filters are
applied:
$ cd repo
$ hg up -q -c -r null
$ cat > .hg/hgrc <<EOF
> [extensions]
> eol =
> EOF
Update to revision 0 which has no .hgeol . Unfortunately, it uses the filter
from tip ... which evidently is wrong:
$ hg up -c -r 0 -v --debug
resolving manifests
branchmerge: False, force: False, partial: False
ancestor: 000000000000, local: 000000000000+, remote: 15cbdf8ca3db
calling hook preupdate.eol: hgext.eol.preupdate
.hgeol: remote created -> g
getting .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 a.txt: remote created -> g
getting a.txt
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 f: remote created -> g
getting f
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering f through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg st
M f
$ touch .hgeol * # ensure consistent dirtyness checks ignoring dirstate
$ hg up -C -r 0 -v --debug
eol: detected change in .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 resolving manifests
branchmerge: False, force: True, partial: False
ancestor: 15cbdf8ca3db+, local: 15cbdf8ca3db+, remote: 15cbdf8ca3db
calling hook preupdate.eol: hgext.eol.preupdate
f: remote is newer -> g
getting f
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch b
marked working directory as branch b
(branches are permanent and global, did you want a bookmark?)
$ hg ci -m b
Merge changes that apply a filter to f:
$ hg merge 1
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg st
M .hgeol
M a.txt
M f
$ hg diff
diff --git a/.hgeol b/.hgeol
--- a/.hgeol
+++ b/.hgeol
@@ -1,2 +1,3 @@
[patterns]
-**.txt = LF
+**.txt = CRLF
+f = LF
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,3 @@
-first
-second
-third
+first\r (esc)
+second\r (esc)
+third\r (esc)
diff --git a/f b/f
--- a/f
+++ b/f
@@ -1,1 +1,1 @@
-f\r (esc)
+f
Abort the merge with up -C to revision 0 ... but notice how .hgeol changes are
not detected correctly: f is filtered with tolf even though there is no filter
for f in revision 0, and it thus ends up with working directory changes.
$ touch .hgeol * # ensure consistent dirtyness checks ignoring dirstate
$ hg up -C -r 0 -v --debug
eol: detected change in .hgeol
resolving manifests
branchmerge: False, force: True, partial: False
ancestor: 1db78bdd3bd6+, local: 1db78bdd3bd6+, remote: 15cbdf8ca3db
calling hook preupdate.eol: hgext.eol.preupdate
.hgeol: remote is newer -> g
getting .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 a.txt: remote is newer -> g
getting a.txt
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 f: remote is newer -> g
getting f
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering f through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ touch .hgeol *
$ hg st --debug
eol: detected change in .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 M f
$ hg diff
diff --git a/f b/f
--- a/f
+++ b/f
@@ -1,1 +1,1 @@
-f\r (esc)
+f
Workaround: Update again - this will read the right .hgeol:
$ touch .hgeol *
$ hg up -C -r 0 -v --debug
eol: detected change in .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471 resolving manifests
branchmerge: False, force: True, partial: False
ancestor: 15cbdf8ca3db+, local: 15cbdf8ca3db+, remote: 15cbdf8ca3db
calling hook preupdate.eol: hgext.eol.preupdate
f: remote is newer -> g
getting f
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ touch .hgeol *
$ hg st --debug
eol: detected change in .hgeol
Mads Kiilerich
localrepo: debug log of filter name when filtering through a function
r43472 filtering .hgeol through compat-isbinary
filtering a.txt through tolf
Mads Kiilerich
eol: test-eol-update.t coverage around update --clean using filters ... badly...
r43471
$ cd ..
Matt Mackall
tests: unify test-eol-update
r12424 $ rm -r repo