test-merge1.t
422 lines
| 10.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-merge1.t
|
r11975 | $ cat <<EOF > merge | ||
> import sys, os | ||||
> | ||||
> try: | ||||
> import msvcrt | ||||
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
> msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) | ||||
> except ImportError: | ||||
> pass | ||||
> | ||||
> print "merging for", os.path.basename(sys.argv[1]) | ||||
> EOF | ||||
$ HGMERGE="python ../merge"; export HGMERGE | ||||
|
r13956 | $ hg init t | ||
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
|
r12156 | $ hg commit -m "commit #0" | ||
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
|
r12156 | $ hg commit -m "commit #1" | ||
|
r11975 | |||
$ hg update 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r19482 | |||
Test interrupted updates by exploiting our non-handling of directory collisions | ||||
$ mkdir b | ||||
$ hg up | ||||
|
r19498 | abort: *: '$TESTTMP/t/b' (glob) | ||
|
r19482 | [255] | ||
$ hg ci | ||||
abort: last update was interrupted | ||||
(use 'hg update' to get a consistent checkout) | ||||
[255] | ||||
$ hg sum | ||||
parent: 0:538afb845929 | ||||
commit #0 | ||||
branch: default | ||||
commit: (interrupted update) | ||||
update: 1 new changesets (update) | ||||
|
r25382 | phases: 2 draft | ||
|
r19482 | $ rmdir b | ||
$ hg up | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg sum | ||||
parent: 1:b8bb4a988f25 tip | ||||
commit #1 | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
|
r25382 | phases: 2 draft | ||
|
r19482 | |||
Prepare a basic merge | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r11975 | $ echo This is file c1 > c | ||
$ hg add c | ||||
|
r12156 | $ hg commit -m "commit #2" | ||
|
r11975 | created new head | ||
$ echo This is file b1 > b | ||||
no merges expected | ||||
$ hg merge -P 1 | ||||
|
r12156 | changeset: 1:b8bb4a988f25 | ||
|
r11975 | user: test | ||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11975 | summary: commit #1 | ||
$ hg merge 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg diff --nodates | ||||
|
r12156 | diff -r 49035e18a8e6 b | ||
|
r11975 | --- /dev/null | ||
+++ b/b | ||||
@@ -0,0 +1,1 @@ | ||||
+This is file b1 | ||||
$ hg status | ||||
M b | ||||
$ cd ..; rm -r t | ||||
|
r13956 | $ hg init t | ||
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
|
r12156 | $ hg commit -m "commit #0" | ||
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
|
r12156 | $ hg commit -m "commit #1" | ||
|
r11975 | |||
$ hg update 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo This is file c1 > c | ||||
$ hg add c | ||||
|
r12156 | $ hg commit -m "commit #2" | ||
|
r11975 | created new head | ||
$ echo This is file b2 > b | ||||
merge should fail | ||||
$ hg merge 1 | ||||
|
r15894 | b: untracked file differs | ||
abort: untracked files in working directory differ from files in requested revision | ||||
|
r12316 | [255] | ||
|
r27571 | |||
#if symlink | ||||
symlinks to directories should be treated as regular files (issue5027) | ||||
$ rm b | ||||
$ ln -s 'This is file b2' b | ||||
$ hg merge 1 | ||||
b: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
symlinks shouldn't be followed | ||||
$ rm b | ||||
$ echo This is file b1 > .hg/b | ||||
$ ln -s .hg/b b | ||||
$ hg merge 1 | ||||
b: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
$ rm b | ||||
$ echo This is file b2 > b | ||||
#endif | ||||
|
r27657 | bad config | ||
$ hg merge 1 --config merge.checkunknown=x | ||||
abort: merge.checkunknown not valid ('x' is none of 'abort', 'ignore', 'warn') | ||||
[255] | ||||
this merge should fail | ||||
$ hg merge 1 --config merge.checkunknown=abort | ||||
b: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
this merge should warn | ||||
$ hg merge 1 --config merge.checkunknown=warn | ||||
b: replacing untracked file | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ cat b.orig | ||||
This is file b2 | ||||
$ hg up --clean 2 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ mv b.orig b | ||||
this merge should silently ignore | ||||
$ cat b | ||||
This is file b2 | ||||
$ hg merge 1 --config merge.checkunknown=ignore | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
|
r27742 | merge.checkignored | ||
$ hg up --clean 1 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ cat >> .hgignore << EOF | ||||
> remoteignored | ||||
> EOF | ||||
$ echo This is file localignored3 > localignored | ||||
$ echo This is file remoteignored3 > remoteignored | ||||
$ hg add .hgignore localignored remoteignored | ||||
$ hg commit -m "commit #3" | ||||
$ hg up 2 | ||||
1 files updated, 0 files merged, 4 files removed, 0 files unresolved | ||||
$ cat >> .hgignore << EOF | ||||
> localignored | ||||
> EOF | ||||
$ hg add .hgignore | ||||
$ hg commit -m "commit #4" | ||||
remote .hgignore shouldn't be used for determining whether a file is ignored | ||||
$ echo This is file remoteignored4 > remoteignored | ||||
$ hg merge 3 --config merge.checkignored=ignore --config merge.checkunknown=abort | ||||
remoteignored: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=ignore | ||||
merging .hgignore | ||||
merging for .hgignore | ||||
3 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ cat remoteignored | ||||
This is file remoteignored3 | ||||
$ cat remoteignored.orig | ||||
This is file remoteignored4 | ||||
$ rm remoteignored.orig | ||||
local .hgignore should be used for that | ||||
$ hg up --clean 4 | ||||
1 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ echo This is file localignored4 > localignored | ||||
also test other conflicting files to see we output the full set of warnings | ||||
$ echo This is file b2 > b | ||||
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=abort | ||||
b: untracked file differs | ||||
localignored: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=ignore | ||||
localignored: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
$ hg merge 3 --config merge.checkignored=warn --config merge.checkunknown=abort | ||||
b: untracked file differs | ||||
abort: untracked files in working directory differ from files in requested revision | ||||
[255] | ||||
$ hg merge 3 --config merge.checkignored=warn --config merge.checkunknown=warn | ||||
b: replacing untracked file | ||||
localignored: replacing untracked file | ||||
merging .hgignore | ||||
merging for .hgignore | ||||
3 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ cat localignored | ||||
This is file localignored3 | ||||
$ cat localignored.orig | ||||
This is file localignored4 | ||||
$ rm localignored.orig | ||||
|
r27657 | $ cat b.orig | ||
This is file b2 | ||||
$ hg up --clean 2 | ||||
|
r27742 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | ||
|
r27657 | $ mv b.orig b | ||
this merge of b should work | ||||
$ cat b | ||||
This is file b2 | ||||
|
r11975 | $ hg merge -f 1 | ||
|
r13439 | merging b | ||
|
r11975 | merging for b | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg diff --nodates | ||||
|
r12156 | diff -r 49035e18a8e6 b | ||
|
r11975 | --- /dev/null | ||
+++ b/b | ||||
@@ -0,0 +1,1 @@ | ||||
+This is file b2 | ||||
$ hg status | ||||
M b | ||||
$ cd ..; rm -r t | ||||
|
r13956 | $ hg init t | ||
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
|
r12156 | $ hg commit -m "commit #0" | ||
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
|
r12156 | $ hg commit -m "commit #1" | ||
|
r11975 | $ echo This is file b22 > b | ||
|
r12156 | $ hg commit -m "commit #2" | ||
|
r11975 | $ hg update 1 | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo This is file c1 > c | ||||
$ hg add c | ||||
|
r12156 | $ hg commit -m "commit #3" | ||
|
r11975 | created new head | ||
Contents of b should be "this is file b1" | ||||
$ cat b | ||||
This is file b1 | ||||
$ echo This is file b22 > b | ||||
merge fails | ||||
$ hg merge 2 | ||||
|
r19802 | abort: uncommitted changes | ||
|
r15619 | (use 'hg status' to list changes) | ||
|
r12316 | [255] | ||
|
r15243 | merge expected! | ||
|
r11975 | $ hg merge -f 2 | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg diff --nodates | ||||
|
r12156 | diff -r 85de557015a8 b | ||
|
r11975 | --- a/b | ||
+++ b/b | ||||
@@ -1,1 +1,1 @@ | ||||
-This is file b1 | ||||
+This is file b22 | ||||
$ hg status | ||||
M b | ||||
$ cd ..; rm -r t | ||||
|
r13956 | $ hg init t | ||
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
|
r12156 | $ hg commit -m "commit #0" | ||
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
|
r12156 | $ hg commit -m "commit #1" | ||
|
r11975 | $ echo This is file b22 > b | ||
|
r12156 | $ hg commit -m "commit #2" | ||
|
r11975 | $ hg update 1 | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo This is file c1 > c | ||||
$ hg add c | ||||
|
r12156 | $ hg commit -m "commit #3" | ||
|
r11975 | created new head | ||
$ echo This is file b33 > b | ||||
merge of b should fail | ||||
$ hg merge 2 | ||||
|
r19802 | abort: uncommitted changes | ||
|
r15619 | (use 'hg status' to list changes) | ||
|
r12316 | [255] | ||
|
r11975 | merge of b expected | ||
$ hg merge -f 2 | ||||
|
r13439 | merging b | ||
|
r11975 | merging for b | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg diff --nodates | ||||
|
r12156 | diff -r 85de557015a8 b | ||
|
r11975 | --- a/b | ||
+++ b/b | ||||
@@ -1,1 +1,1 @@ | ||||
-This is file b1 | ||||
+This is file b33 | ||||
$ hg status | ||||
M b | ||||
|
r12664 | |||
Test for issue2364 | ||||
$ hg up -qC . | ||||
$ hg rm b | ||||
$ hg ci -md | ||||
$ hg revert -r -2 b | ||||
$ hg up -q -- -2 | ||||
|
r16913 | |||
|
r25753 | Test that updated files are treated as "modified", when | ||
'merge.update()' is aborted before 'merge.recordupdates()' (= parents | ||||
aren't changed), even if none of mode, size and timestamp of them | ||||
isn't changed on the filesystem (see also issue4583). | ||||
$ cat > $TESTTMP/abort.py <<EOF | ||||
> # emulate aborting before "recordupdates()". in this case, files | ||||
> # are changed without updating dirstate | ||||
|
r26587 | > from mercurial import extensions, merge, error | ||
|
r25753 | > def applyupdates(orig, *args, **kwargs): | ||
> orig(*args, **kwargs) | ||||
|
r26587 | > raise error.Abort('intentional aborting') | ||
|
r25753 | > def extsetup(ui): | ||
> extensions.wrapfunction(merge, "applyupdates", applyupdates) | ||||
> EOF | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [fakedirstatewritetime] | ||||
> # emulate invoking dirstate.write() via repo.status() | ||||
> # at 2000-01-01 00:00 | ||||
> fakenow = 200001010000 | ||||
> EOF | ||||
(file gotten from other revision) | ||||
$ hg update -q -C 2 | ||||
$ echo 'THIS IS FILE B5' > b | ||||
$ hg commit -m 'commit #5' | ||||
$ hg update -q -C 3 | ||||
$ cat b | ||||
This is file b1 | ||||
$ touch -t 200001010000 b | ||||
$ hg debugrebuildstate | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> abort = $TESTTMP/abort.py | ||||
> EOF | ||||
$ hg merge 5 | ||||
abort: intentional aborting | ||||
[255] | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = ! | ||||
> abort = ! | ||||
> EOF | ||||
$ cat b | ||||
THIS IS FILE B5 | ||||
$ touch -t 200001010000 b | ||||
$ hg status -A b | ||||
M b | ||||
(file merged from other revision) | ||||
$ hg update -q -C 3 | ||||
$ echo 'this is file b6' > b | ||||
$ hg commit -m 'commit #6' | ||||
created new head | ||||
$ cat b | ||||
this is file b6 | ||||
$ touch -t 200001010000 b | ||||
$ hg debugrebuildstate | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> abort = $TESTTMP/abort.py | ||||
> EOF | ||||
$ hg merge --tool internal:other 5 | ||||
abort: intentional aborting | ||||
[255] | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = ! | ||||
> abort = ! | ||||
> EOF | ||||
$ cat b | ||||
THIS IS FILE B5 | ||||
$ touch -t 200001010000 b | ||||
$ hg status -A b | ||||
M b | ||||
|
r16913 | $ cd .. | ||