test-eol.t
528 lines
| 11.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-eol.t
Matt Mackall
|
r12419 | Test EOL extension | ||
Martin Geisler
|
r13519 | $ cat >> $HGRCPATH <<EOF | ||
Matt Mackall
|
r12419 | > [diff] | ||
> git = True | ||||
> EOF | ||||
Set up helpers | ||||
$ cat > switch-eol.py <<EOF | ||||
> import sys | ||||
> try: | ||||
> import os, msvcrt | ||||
> msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) | ||||
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
> except ImportError: | ||||
> pass | ||||
> (old, new) = sys.argv[1] == 'LF' and ('\n', '\r\n') or ('\r\n', '\n') | ||||
> print "%% switching encoding from %r to %r" % (old, new) | ||||
> for path in sys.argv[2:]: | ||||
> data = file(path, 'rb').read() | ||||
> data = data.replace(old, new) | ||||
> file(path, 'wb').write(data) | ||||
> EOF | ||||
$ seteol () { | ||||
> if [ $1 = "LF" ]; then | ||||
> EOL='\n' | ||||
> else | ||||
> EOL='\r\n' | ||||
> fi | ||||
> } | ||||
$ makerepo () { | ||||
> seteol $1 | ||||
> echo "% setup $1 repository" | ||||
> hg init repo | ||||
> cd repo | ||||
> cat > .hgeol <<EOF | ||||
> [repository] | ||||
> native = $1 | ||||
> [patterns] | ||||
> mixed.txt = BIN | ||||
> **.txt = native | ||||
> EOF | ||||
> printf "first${EOL}second${EOL}third${EOL}" > a.txt | ||||
> hg commit --addremove -m 'checkin' | ||||
> echo | ||||
> cd .. | ||||
> } | ||||
$ dotest () { | ||||
> seteol $1 | ||||
> echo "% hg clone repo repo-$1" | ||||
> hg clone --noupdate repo repo-$1 | ||||
> cd repo-$1 | ||||
> cat > .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> eol = | ||||
> [eol] | ||||
> native = $1 | ||||
> EOF | ||||
> hg update | ||||
Mads Kiilerich
|
r12943 | > echo '% a.txt' | ||
> cat a.txt | ||||
Matt Mackall
|
r12419 | > echo '% hg cat a.txt' | ||
Mads Kiilerich
|
r12943 | > hg cat a.txt | ||
Matt Mackall
|
r12419 | > printf "fourth${EOL}" >> a.txt | ||
Mads Kiilerich
|
r12943 | > echo '% a.txt' | ||
> cat a.txt | ||||
> hg diff | ||||
Matt Mackall
|
r12419 | > python ../switch-eol.py $1 a.txt | ||
> echo '% hg diff only reports a single changed line:' | ||||
Mads Kiilerich
|
r12943 | > hg diff | ||
Matt Mackall
|
r12419 | > echo "% reverting back to $1 format" | ||
> hg revert a.txt | ||||
Mads Kiilerich
|
r12943 | > cat a.txt | ||
Matt Mackall
|
r12419 | > printf "first\r\nsecond\n" > mixed.txt | ||
> hg add mixed.txt | ||||
> echo "% hg commit of inconsistent .txt file marked as binary (should work)" | ||||
> hg commit -m 'binary file' | ||||
> echo "% hg commit of inconsistent .txt file marked as native (should fail)" | ||||
> printf "first\nsecond\r\nthird\nfourth\r\n" > a.txt | ||||
> hg commit -m 'inconsistent file' | ||||
> echo "% hg commit --config eol.only-consistent=False (should work)" | ||||
> hg commit --config eol.only-consistent=False -m 'inconsistent file' | ||||
> echo "% hg commit of binary .txt file marked as native (binary files always okay)" | ||||
> printf "first${EOL}\0${EOL}third${EOL}" > a.txt | ||||
> hg commit -m 'binary file' | ||||
> cd .. | ||||
> rm -r repo-$1 | ||||
> } | ||||
$ makemixedrepo () { | ||||
> echo | ||||
> echo "# setup $1 repository" | ||||
> hg init mixed | ||||
> cd mixed | ||||
> printf "foo\r\nbar\r\nbaz\r\n" > win.txt | ||||
> printf "foo\nbar\nbaz\n" > unix.txt | ||||
> #printf "foo\r\nbar\nbaz\r\n" > mixed.txt | ||||
> hg commit --addremove -m 'created mixed files' | ||||
> echo "# setting repository-native EOLs to $1" | ||||
> cat > .hgeol <<EOF | ||||
> [repository] | ||||
> native = $1 | ||||
> [patterns] | ||||
> **.txt = native | ||||
> EOF | ||||
> hg commit --addremove -m 'added .hgeol' | ||||
> cd .. | ||||
> } | ||||
$ testmixed () { | ||||
> echo | ||||
> echo "% hg clone mixed mixed-$1" | ||||
> hg clone mixed mixed-$1 | ||||
> cd mixed-$1 | ||||
> echo '% hg status (eol extension not yet activated)' | ||||
> hg status | ||||
> cat > .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> eol = | ||||
> [eol] | ||||
> native = $1 | ||||
> EOF | ||||
> echo '% hg status (eol activated)' | ||||
> hg status | ||||
> echo '% hg commit' | ||||
> hg commit -m 'synchronized EOLs' | ||||
> echo '% hg status' | ||||
> hg status | ||||
> cd .. | ||||
> rm -r mixed-$1 | ||||
> } | ||||
Basic tests | ||||
$ makerepo LF | ||||
% setup LF repository | ||||
adding .hgeol | ||||
adding a.txt | ||||
$ dotest LF | ||||
% hg clone repo repo-LF | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
Matt Mackall
|
r12419 | first | ||
second | ||||
third | ||||
% hg cat a.txt | ||||
first | ||||
second | ||||
third | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
Matt Mackall
|
r12419 | first | ||
second | ||||
third | ||||
fourth | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
first | ||||
second | ||||
third | ||||
+fourth | ||||
% switching encoding from '\n' to '\r\n' | ||||
% hg diff only reports a single changed line: | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
first | ||||
second | ||||
third | ||||
+fourth | ||||
% reverting back to LF format | ||||
first | ||||
second | ||||
third | ||||
% hg commit of inconsistent .txt file marked as binary (should work) | ||||
% hg commit of inconsistent .txt file marked as native (should fail) | ||||
abort: inconsistent newline style in a.txt | ||||
% hg commit --config eol.only-consistent=False (should work) | ||||
% hg commit of binary .txt file marked as native (binary files always okay) | ||||
$ dotest CRLF | ||||
% hg clone repo repo-CRLF | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12419 | % hg cat a.txt | ||
first | ||||
second | ||||
third | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
fourth\r (esc) | ||||
Matt Mackall
|
r12419 | diff --git a/a.txt b/a.txt | ||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
first | ||||
second | ||||
third | ||||
+fourth | ||||
% switching encoding from '\r\n' to '\n' | ||||
% hg diff only reports a single changed line: | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
first | ||||
second | ||||
third | ||||
+fourth | ||||
% reverting back to CRLF format | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12419 | % hg commit of inconsistent .txt file marked as binary (should work) | ||
% hg commit of inconsistent .txt file marked as native (should fail) | ||||
abort: inconsistent newline style in a.txt | ||||
% hg commit --config eol.only-consistent=False (should work) | ||||
% hg commit of binary .txt file marked as native (binary files always okay) | ||||
$ rm -r repo | ||||
$ makerepo CRLF | ||||
% setup CRLF repository | ||||
adding .hgeol | ||||
adding a.txt | ||||
$ dotest LF | ||||
% hg clone repo repo-LF | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
Matt Mackall
|
r12419 | first | ||
second | ||||
third | ||||
% hg cat a.txt | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
% a.txt | ||||
Matt Mackall
|
r12419 | first | ||
second | ||||
third | ||||
fourth | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
+fourth\r (esc) | ||||
Matt Mackall
|
r12419 | % switching encoding from '\n' to '\r\n' | ||
% hg diff only reports a single changed line: | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
+fourth\r (esc) | ||||
Matt Mackall
|
r12419 | % reverting back to LF format | ||
first | ||||
second | ||||
third | ||||
% hg commit of inconsistent .txt file marked as binary (should work) | ||||
% hg commit of inconsistent .txt file marked as native (should fail) | ||||
abort: inconsistent newline style in a.txt | ||||
% hg commit --config eol.only-consistent=False (should work) | ||||
% hg commit of binary .txt file marked as native (binary files always okay) | ||||
$ dotest CRLF | ||||
% hg clone repo repo-CRLF | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Mads Kiilerich
|
r12943 | % a.txt | ||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12419 | % hg cat a.txt | ||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
% a.txt | ||||
first\r (esc) | ||||
second\r (esc) | ||||
third\r (esc) | ||||
fourth\r (esc) | ||||
Matt Mackall
|
r12419 | diff --git a/a.txt b/a.txt | ||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
+fourth\r (esc) | ||||
Matt Mackall
|
r12419 | % switching encoding from '\r\n' to '\n' | ||
% hg diff only reports a single changed line: | ||||
diff --git a/a.txt b/a.txt | ||||
--- a/a.txt | ||||
+++ b/a.txt | ||||
@@ -1,3 +1,4 @@ | ||||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
+fourth\r (esc) | ||||
Matt Mackall
|
r12419 | % reverting back to CRLF format | ||
Mads Kiilerich
|
r12943 | first\r (esc) | ||
second\r (esc) | ||||
third\r (esc) | ||||
Matt Mackall
|
r12419 | % hg commit of inconsistent .txt file marked as binary (should work) | ||
% hg commit of inconsistent .txt file marked as native (should fail) | ||||
abort: inconsistent newline style in a.txt | ||||
% hg commit --config eol.only-consistent=False (should work) | ||||
% hg commit of binary .txt file marked as native (binary files always okay) | ||||
$ rm -r repo | ||||
Mixed tests | ||||
$ makemixedrepo LF | ||||
# setup LF repository | ||||
adding unix.txt | ||||
adding win.txt | ||||
# setting repository-native EOLs to LF | ||||
adding .hgeol | ||||
$ testmixed LF | ||||
% hg clone mixed mixed-LF | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
% hg status (eol extension not yet activated) | ||||
% hg status (eol activated) | ||||
M win.txt | ||||
% hg commit | ||||
% hg status | ||||
$ testmixed CRLF | ||||
% hg clone mixed mixed-CRLF | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
% hg status (eol extension not yet activated) | ||||
% hg status (eol activated) | ||||
M win.txt | ||||
% hg commit | ||||
% hg status | ||||
$ rm -r mixed | ||||
$ makemixedrepo CRLF | ||||
# setup CRLF repository | ||||
adding unix.txt | ||||
adding win.txt | ||||
# setting repository-native EOLs to CRLF | ||||
adding .hgeol | ||||
$ testmixed LF | ||||
% hg clone mixed mixed-LF | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
% hg status (eol extension not yet activated) | ||||
% hg status (eol activated) | ||||
M unix.txt | ||||
% hg commit | ||||
% hg status | ||||
$ testmixed CRLF | ||||
% hg clone mixed mixed-CRLF | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
% hg status (eol extension not yet activated) | ||||
% hg status (eol activated) | ||||
M unix.txt | ||||
% hg commit | ||||
% hg status | ||||
$ rm -r mixed | ||||
Martin Geisler
|
r13475 | |||
Mads Kiilerich
|
r16986 | $ echo '[extensions]' >> $HGRCPATH | ||
$ echo 'eol =' >> $HGRCPATH | ||||
#if unix-permissions | ||||
Martin Geisler
|
r13475 | Test issue2569 -- eol extension takes write lock on reading: | ||
$ hg init repo | ||||
$ cd repo | ||||
$ touch .hgeol | ||||
$ hg status | ||||
? .hgeol | ||||
$ chmod -R -w .hg | ||||
$ sleep 1 | ||||
$ touch .hgeol | ||||
$ hg status --traceback | ||||
? .hgeol | ||||
Benoit Boissinot
|
r13621 | $ chmod -R u+w .hg | ||
Martin Geisler
|
r13503 | $ cd .. | ||
Mads Kiilerich
|
r16986 | #endif | ||
Martin Geisler
|
r13503 | Test cleverencode: and cleverdecode: aliases for win32text extension | ||
$ echo '[encode]' >> $HGRCPATH | ||||
Martin Geisler
|
r13504 | $ echo '**.txt = cleverencode:' >> $HGRCPATH | ||
Martin Geisler
|
r13503 | $ echo '[decode]' >> $HGRCPATH | ||
Martin Geisler
|
r13504 | $ echo '**.txt = cleverdecode:' >> $HGRCPATH | ||
Martin Geisler
|
r13503 | |||
$ hg init win32compat | ||||
$ cd win32compat | ||||
$ printf "foo\r\nbar\r\nbaz\r\n" > win.txt | ||||
$ printf "foo\nbar\nbaz\n" > unix.txt | ||||
$ hg add | ||||
adding unix.txt | ||||
adding win.txt | ||||
$ hg commit -m checkin | ||||
Check that both files have LF line-endings in the repository: | ||||
$ hg cat win.txt | ||||
foo | ||||
bar | ||||
baz | ||||
$ hg cat unix.txt | ||||
foo | ||||
bar | ||||
baz | ||||
Martin Geisler
|
r13505 | |||
Test handling of a broken .hgeol file: | ||||
$ touch .hgeol | ||||
$ hg add .hgeol | ||||
$ hg commit -m 'clean version' | ||||
$ echo "bad" > .hgeol | ||||
$ hg status | ||||
warning: ignoring .hgeol file due to parse error at .hgeol:1: bad | ||||
M .hgeol | ||||
$ hg revert .hgeol | ||||
warning: ignoring .hgeol file due to parse error at .hgeol:1: bad | ||||
$ hg status | ||||
? .hgeol.orig | ||||
Stepan Koltsov
|
r14854 | |||
Test eol.only-consistent can be specified in .hgeol | ||||
$ cd $TESTTMP | ||||
$ hg init only-consistent | ||||
$ cd only-consistent | ||||
$ printf "first\nsecond\r\n" > a.txt | ||||
$ hg add a.txt | ||||
$ cat > .hgeol << EOF | ||||
> [eol] | ||||
> only-consistent = True | ||||
> EOF | ||||
$ hg commit -m 'inconsistent' | ||||
abort: inconsistent newline style in a.txt | ||||
[255] | ||||
$ cat > .hgeol << EOF | ||||
> [eol] | ||||
> only-consistent = False | ||||
> EOF | ||||
$ hg commit -m 'consistent' | ||||
Stepan Koltsov
|
r14855 | |||
Test trailing newline | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> eol= | ||||
> EOF | ||||
setup repository | ||||
$ cd $TESTTMP | ||||
$ hg init trailing | ||||
$ cd trailing | ||||
$ cat > .hgeol <<EOF | ||||
> [patterns] | ||||
> **.txt = native | ||||
> [eol] | ||||
> fix-trailing-newline = False | ||||
> EOF | ||||
add text without trailing newline | ||||
$ printf "first\nsecond" > a.txt | ||||
$ hg commit --addremove -m 'checking in' | ||||
adding .hgeol | ||||
adding a.txt | ||||
$ rm a.txt | ||||
$ hg update -C -q | ||||
$ cat a.txt | ||||
first | ||||
second (no-eol) | ||||
$ cat > .hgeol <<EOF | ||||
> [patterns] | ||||
> **.txt = native | ||||
> [eol] | ||||
> fix-trailing-newline = True | ||||
> EOF | ||||
$ printf "third\nfourth" > a.txt | ||||
$ hg commit -m 'checking in with newline fix' | ||||
$ rm a.txt | ||||
$ hg update -C -q | ||||
$ cat a.txt | ||||
third | ||||
fourth | ||||
append a line without trailing newline | ||||
$ printf "fifth" >> a.txt | ||||
$ hg commit -m 'adding another line line' | ||||
$ rm a.txt | ||||
$ hg update -C -q | ||||
$ cat a.txt | ||||
third | ||||
fourth | ||||
fifth | ||||
Mads Kiilerich
|
r16913 | $ cd .. | ||