test-eol-update.t
312 lines
| 6.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-eol-update.t
Matt Mackall
|
r12424 | Test EOL update | ||
Martin Geisler
|
r13519 | $ cat >> $HGRCPATH <<EOF | ||
Matt Mackall
|
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
|
r43471 | > printf "f\r\n" > f | ||
Matt Mackall
|
r12424 | > hg commit --addremove -m 'LF commit' | ||
> | ||||
> cat > .hgeol <<EOF | ||||
> [patterns] | ||||
> **.txt = CRLF | ||||
Mads Kiilerich
|
r43471 | > f = LF | ||
Matt Mackall
|
r12424 | > EOF | ||
> | ||||
> printf "first\r\nsecond\r\nthird\r\n" > a.txt | ||||
Mads Kiilerich
|
r43471 | > printf "f\n" > f | ||
Matt Mackall
|
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
|
r12943 | > echo '% a.txt (before)' | ||
> cat a.txt | ||||
Matt Mackall
|
r12424 | > | ||
> printf "first${EOL}third${EOL}" > a.txt | ||||
> | ||||
Mads Kiilerich
|
r12943 | > echo '% a.txt (after)' | ||
> cat a.txt | ||||
Matt Mackall
|
r12424 | > echo '% hg diff' | ||
Mads Kiilerich
|
r12943 | > hg diff | ||
Matt Mackall
|
r12424 | > | ||
> echo '% hg update 0' | ||||
> hg update 0 | ||||
> | ||||
Mads Kiilerich
|
r12943 | > echo '% a.txt' | ||
> cat a.txt | ||||
Matt Mackall
|
r12424 | > echo '% hg diff' | ||
Mads Kiilerich
|
r12943 | > hg diff | ||
Matt Mackall
|
r12424 | > | ||
> | ||||
> cd .. | ||||
> rm -r repo-$1 | ||||
> } | ||||
$ makerepo | ||||
# ==== setup repository ==== | ||||
% hg init | ||||
adding .hgeol | ||||
adding a.txt | ||||
Mads Kiilerich
|
r43471 | adding f | ||
Matt Mackall
|
r12424 | $ dotest LF | ||
% hg clone repo repo-LF | ||||
Mads Kiilerich
|
r43471 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
Mads Kiilerich
|
r12943 | % a.txt (before) | ||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
% a.txt (after) | ||||
Matt Mackall
|
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
|
r12943 | first\r (esc) | ||
-second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12424 | % hg update 0 | ||
merging a.txt | ||||
Mads Kiilerich
|
r43471 | 2 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
Mads Kiilerich
|
r12943 | % a.txt | ||
Matt Mackall
|
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
|
r43471 | diff --git a/f b/f | ||
--- a/f | ||||
+++ b/f | ||||
@@ -1,1 +1,1 @@ | ||||
-f\r (esc) | ||||
+f | ||||
Matt Mackall
|
r12424 | $ dotest CRLF | ||
% hg clone repo repo-CRLF | ||||
Mads Kiilerich
|
r43471 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
Mads Kiilerich
|
r12943 | % a.txt (before) | ||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
% a.txt (after) | ||||
first\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12424 | % hg diff | ||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,2 @@ | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
-second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12424 | % hg update 0 | ||
merging a.txt | ||||
Mads Kiilerich
|
r43471 | 2 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
Mads Kiilerich
|
r12943 | % a.txt | ||
Matt Mackall
|
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
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43471 | a.txt: remote created -> g | ||
getting a.txt | ||||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
r43471 | f: remote created -> g | ||
getting f | ||||
Mads Kiilerich
|
r43472 | filtering f through tolf | ||
Mads Kiilerich
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43471 | a.txt: remote is newer -> g | ||
getting a.txt | ||||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
r43471 | f: remote is newer -> g | ||
getting f | ||||
Mads Kiilerich
|
r43472 | filtering f through tolf | ||
Mads Kiilerich
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
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
|
r43474 | filtering .hgeol through isbinary | ||
Mads Kiilerich
|
r43472 | filtering a.txt through tolf | ||
Mads Kiilerich
|
r43471 | |||
$ cd .. | ||||
Matt Mackall
|
r12424 | $ rm -r repo | ||