##// END OF EJS Templates
eol: cache needs update, also if it has same timestamp as the source...
eol: cache needs update, also if it has same timestamp as the source Ignoring same timestamp could (in theory?) cause changes to not be detected. It might happen quite often that the cache is populated right after .hgeol has been updated and they thus have the same time stamp second. But we want correctness, and if it populates the cache so fast, then it can also not be a big problem to run it again next time when the timestamp has moved on.

File last commit:

r43474:d38f9117 default
r43475:fd8c3f59 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through isbinary
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 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through isbinary
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 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through isbinary
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 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
eol: update isbinary filter to work without compat wrapper
r43474 filtering .hgeol through isbinary
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
$ cd ..
Matt Mackall
tests: unify test-eol-update
r12424 $ rm -r repo