test-merge1.t
439 lines
| 11.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-merge1.t
Pradeepkumar Gayam
|
r11975 | $ cat <<EOF > merge | ||
Augie Fackler
|
r33687 | > from __future__ import print_function | ||
Pradeepkumar Gayam
|
r11975 | > 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 | ||||
> | ||||
Augie Fackler
|
r33687 | > print("merging for", os.path.basename(sys.argv[1])) | ||
Pradeepkumar Gayam
|
r11975 | > EOF | ||
Matt Harbison
|
r40907 | $ HGMERGE="\"$PYTHON\" ../merge"; export HGMERGE | ||
Pradeepkumar Gayam
|
r11975 | |||
Martin Geisler
|
r13956 | $ hg init t | ||
Pradeepkumar Gayam
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #0" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #1" | ||
Pradeepkumar Gayam
|
r11975 | |||
$ hg update 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
Matt Mackall
|
r19482 | |||
Kostia Balytskyi
|
r29480 | Test interrupted updates by having a non-empty dir with the same name as one | ||
of the files in a commit we're updating to | ||||
Matt Mackall
|
r19482 | |||
Kostia Balytskyi
|
r29480 | $ mkdir b && touch b/nonempty | ||
Matt Mackall
|
r19482 | $ hg up | ||
Matt Harbison
|
r39629 | abort: Unlinking directory not permitted: *$TESTTMP/t/b* (glob) (windows !) | ||
Augie Fackler
|
r39613 | abort: Directory not empty: '?\$TESTTMP/t/b'? (re) (no-windows !) | ||
Yuya Nishihara
|
r39232 | [255] | ||
Matt Mackall
|
r19482 | $ hg ci | ||
Yuya Nishihara
|
r39232 | abort: last update was interrupted | ||
(use 'hg update' to get a consistent checkout) | ||||
Martin von Zweigbergk
|
r46444 | [20] | ||
Matt Mackall
|
r19482 | $ hg sum | ||
Yuya Nishihara
|
r39232 | parent: 0:538afb845929 | ||
commit #0 | ||||
Matt Mackall
|
r19482 | branch: default | ||
Yuya Nishihara
|
r39232 | commit: 1 unknown (interrupted update) | ||
update: 1 new changesets (update) | ||||
Gilles Moris
|
r25382 | phases: 2 draft | ||
Taapas Agrawal
|
r42732 | Detect interrupted update by hg status --verbose | ||
$ hg status -v | ||||
? b/nonempty | ||||
# The repository is in an unfinished *update* state. | ||||
Martin von Zweigbergk
|
r43315 | # To continue: hg update . | ||
Taapas Agrawal
|
r42732 | |||
Siddharth Agarwal
|
r34943 | |||
Yuya Nishihara
|
r39232 | $ rm b/nonempty | ||
Siddharth Agarwal
|
r34943 | |||
Matt Mackall
|
r19482 | $ hg up | ||
Yuya Nishihara
|
r39232 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
Matt Mackall
|
r19482 | $ hg sum | ||
parent: 1:b8bb4a988f25 tip | ||||
commit #1 | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
Gilles Moris
|
r25382 | phases: 2 draft | ||
Matt Mackall
|
r19482 | |||
Prepare a basic merge | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
Pradeepkumar Gayam
|
r11975 | $ echo This is file c1 > c | ||
$ hg add c | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #2" | ||
Pradeepkumar Gayam
|
r11975 | created new head | ||
$ echo This is file b1 > b | ||||
no merges expected | ||||
$ hg merge -P 1 | ||||
Martin Geisler
|
r12156 | changeset: 1:b8bb4a988f25 | ||
Pradeepkumar Gayam
|
r11975 | user: test | ||
Martin Geisler
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | diff -r 49035e18a8e6 b | ||
Pradeepkumar Gayam
|
r11975 | --- /dev/null | ||
+++ b/b | ||||
@@ -0,0 +1,1 @@ | ||||
+This is file b1 | ||||
$ hg status | ||||
M b | ||||
$ cd ..; rm -r t | ||||
Martin Geisler
|
r13956 | $ hg init t | ||
Pradeepkumar Gayam
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #0" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #1" | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #2" | ||
Pradeepkumar Gayam
|
r11975 | created new head | ||
$ echo This is file b2 > b | ||||
merge should fail | ||||
$ hg merge 1 | ||||
Jordi Gutiérrez Hermoso
|
r15894 | b: untracked file differs | ||
abort: untracked files in working directory differ from files in requested revision | ||||
Matt Mackall
|
r12316 | [255] | ||
Siddharth Agarwal
|
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 | ||||
Siddharth Agarwal
|
r27657 | bad config | ||
$ hg merge 1 --config merge.checkunknown=x | ||||
Martin von Zweigbergk
|
r46506 | config error: merge.checkunknown not valid ('x' is none of 'abort', 'ignore', 'warn') | ||
Martin von Zweigbergk
|
r46445 | [30] | ||
Siddharth Agarwal
|
r27657 | 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) | ||||
Siddharth Agarwal
|
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 | ||||
Siddharth Agarwal
|
r27657 | $ cat b.orig | ||
This is file b2 | ||||
$ hg up --clean 2 | ||||
Siddharth Agarwal
|
r27742 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | ||
Siddharth Agarwal
|
r27657 | $ mv b.orig b | ||
this merge of b should work | ||||
$ cat b | ||||
This is file b2 | ||||
Pradeepkumar Gayam
|
r11975 | $ hg merge -f 1 | ||
Mads Kiilerich
|
r13439 | merging b | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | diff -r 49035e18a8e6 b | ||
Pradeepkumar Gayam
|
r11975 | --- /dev/null | ||
+++ b/b | ||||
@@ -0,0 +1,1 @@ | ||||
+This is file b2 | ||||
$ hg status | ||||
M b | ||||
$ cd ..; rm -r t | ||||
Martin Geisler
|
r13956 | $ hg init t | ||
Pradeepkumar Gayam
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #0" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #1" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b22 > b | ||
Martin Geisler
|
r12156 | $ hg commit -m "commit #2" | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #3" | ||
Pradeepkumar Gayam
|
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 | ||||
Siddharth Agarwal
|
r19802 | abort: uncommitted changes | ||
Kevin Bullock
|
r15619 | (use 'hg status' to list changes) | ||
Martin von Zweigbergk
|
r46529 | [20] | ||
Mads Kiilerich
|
r15243 | merge expected! | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | diff -r 85de557015a8 b | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r13956 | $ hg init t | ||
Pradeepkumar Gayam
|
r11975 | $ cd t | ||
$ echo This is file a1 > a | ||||
$ hg add a | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #0" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b1 > b | ||
$ hg add b | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #1" | ||
Pradeepkumar Gayam
|
r11975 | $ echo This is file b22 > b | ||
Martin Geisler
|
r12156 | $ hg commit -m "commit #2" | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | $ hg commit -m "commit #3" | ||
Pradeepkumar Gayam
|
r11975 | created new head | ||
$ echo This is file b33 > b | ||||
merge of b should fail | ||||
$ hg merge 2 | ||||
Siddharth Agarwal
|
r19802 | abort: uncommitted changes | ||
Kevin Bullock
|
r15619 | (use 'hg status' to list changes) | ||
Martin von Zweigbergk
|
r46529 | [20] | ||
Pradeepkumar Gayam
|
r11975 | merge of b expected | ||
$ hg merge -f 2 | ||||
Mads Kiilerich
|
r13439 | merging b | ||
Pradeepkumar Gayam
|
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 | ||||
Martin Geisler
|
r12156 | diff -r 85de557015a8 b | ||
Pradeepkumar Gayam
|
r11975 | --- a/b | ||
+++ b/b | ||||
@@ -1,1 +1,1 @@ | ||||
-This is file b1 | ||||
+This is file b33 | ||||
$ hg status | ||||
M b | ||||
Matt Mackall
|
r12664 | |||
Test for issue2364 | ||||
$ hg up -qC . | ||||
$ hg rm b | ||||
$ hg ci -md | ||||
$ hg revert -r -2 b | ||||
$ hg up -q -- -2 | ||||
Mads Kiilerich
|
r16913 | |||
FUJIWARA Katsunori
|
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 | ||||
Augie Fackler
|
r33970 | > from __future__ import absolute_import | ||
FUJIWARA Katsunori
|
r25753 | > # emulate aborting before "recordupdates()". in this case, files | ||
> # are changed without updating dirstate | ||||
Augie Fackler
|
r33970 | > from mercurial import ( | ||
> error, | ||||
> extensions, | ||||
> merge, | ||||
> ) | ||||
FUJIWARA Katsunori
|
r25753 | > def applyupdates(orig, *args, **kwargs): | ||
> orig(*args, **kwargs) | ||||
Martin von Zweigbergk
|
r46273 | > raise error.Abort(b'intentional aborting') | ||
FUJIWARA Katsunori
|
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 | ||||
Mads Kiilerich
|
r16913 | $ cd .. | ||