##// END OF EJS Templates
eol: test-eol-update.t coverage around update --clean using filters ... badly...
eol: test-eol-update.t coverage around update --clean using filters ... badly This will reveal problems and track their fixes.

File last commit:

r43471:a819b577 default
r43471:a819b577 default
Show More
test-eol-update.t
312 lines | 6.5 KiB | text/troff | Tads3Lexer
Test EOL update
$ cat >> $HGRCPATH <<EOF
> [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
> printf "f\r\n" > f
> hg commit --addremove -m 'LF commit'
>
> cat > .hgeol <<EOF
> [patterns]
> **.txt = CRLF
> f = LF
> EOF
>
> printf "first\r\nsecond\r\nthird\r\n" > a.txt
> printf "f\n" > f
> 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
>
> echo '% a.txt (before)'
> cat a.txt
>
> printf "first${EOL}third${EOL}" > a.txt
>
> echo '% a.txt (after)'
> cat a.txt
> echo '% hg diff'
> hg diff
>
> echo '% hg update 0'
> hg update 0
>
> echo '% a.txt'
> cat a.txt
> echo '% hg diff'
> hg diff
>
>
> cd ..
> rm -r repo-$1
> }
$ makerepo
# ==== setup repository ====
% hg init
adding .hgeol
adding a.txt
adding f
$ dotest LF
% hg clone repo repo-LF
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% a.txt (before)
first\r (esc)
second\r (esc)
third\r (esc)
% a.txt (after)
first
third
% hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
first\r (esc)
-second\r (esc)
third\r (esc)
% hg update 0
merging a.txt
2 files updated, 1 files merged, 0 files removed, 0 files unresolved
% a.txt
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
diff --git a/f b/f
--- a/f
+++ b/f
@@ -1,1 +1,1 @@
-f\r (esc)
+f
$ dotest CRLF
% hg clone repo repo-CRLF
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% a.txt (before)
first\r (esc)
second\r (esc)
third\r (esc)
% a.txt (after)
first\r (esc)
third\r (esc)
% hg diff
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
first\r (esc)
-second\r (esc)
third\r (esc)
% hg update 0
merging a.txt
2 files updated, 1 files merged, 0 files removed, 0 files unresolved
% a.txt
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
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
filtering .hgeol through
a.txt: remote created -> g
getting a.txt
filtering a.txt through
f: remote created -> g
getting f
filtering f through
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
filtering .hgeol through
filtering a.txt through
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
filtering .hgeol through
a.txt: remote is newer -> g
getting a.txt
filtering a.txt through
f: remote is newer -> g
getting f
filtering f through
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ touch .hgeol *
$ hg st --debug
eol: detected change in .hgeol
filtering .hgeol through
filtering a.txt through
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
filtering .hgeol through
filtering a.txt through
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
filtering .hgeol through
filtering a.txt through
$ cd ..
$ rm -r repo