# HG changeset patch # User Mads Kiilerich # Date 1571004565 -7200 # Node ID a819b5777727a42f568c139b70a02fb74f17e127 # Parent 069cbbb53cdf4dc6cc46755a2fb7c505f23f5d08 eol: test-eol-update.t coverage around update --clean using filters ... badly This will reveal problems and track their fixes. diff -r 069cbbb53cdf -r a819b5777727 tests/test-eol-update.t --- a/tests/test-eol-update.t Thu Oct 10 17:18:46 2019 +0200 +++ b/tests/test-eol-update.t Mon Oct 14 00:09:25 2019 +0200 @@ -26,14 +26,17 @@ > EOF > > printf "first\nsecond\nthird\n" > a.txt + > printf "f\r\n" > f > hg commit --addremove -m 'LF commit' > > cat > .hgeol < [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 .. @@ -83,10 +86,11 @@ % hg init adding .hgeol adding a.txt + adding f $ dotest LF % hg clone repo repo-LF - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved % a.txt (before) first\r (esc) second\r (esc) @@ -104,7 +108,7 @@ third\r (esc) % hg update 0 merging a.txt - 1 files updated, 1 files merged, 0 files removed, 0 files unresolved + 2 files updated, 1 files merged, 0 files removed, 0 files unresolved % a.txt first third @@ -116,10 +120,16 @@ 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 - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved % a.txt (before) first\r (esc) second\r (esc) @@ -137,7 +147,7 @@ third\r (esc) % hg update 0 merging a.txt - 1 files updated, 1 files merged, 0 files removed, 0 files unresolved + 2 files updated, 1 files merged, 0 files removed, 0 files unresolved % a.txt first third @@ -149,4 +159,154 @@ 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 < [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