##// END OF EJS Templates
transplant: restore dirstate correctly at unexpected failure...
transplant: restore dirstate correctly at unexpected failure Before this patch, transplant can't restore dirstate as expected at failure other than one while patching. This causes: - unexpected file status - dirstate refers already rollback-ed parent (only at failure of transplanting the 2nd or later revision) To restore dirstate correctly also at unexpected failure, this patch encloses scope of store lock and transaction by 'dirstateguard'. This is temporary fixing for stable branch. See DirstateTransactionPlan wiki page for detail about the future plan to treat dirstate consistently around scope boundary of transaction. https://mercurial.selenic.com/wiki/DirstateTransactionPlan This patch also adds 'if lock' examination for safety 'lock.release()', because creating 'dirstateguard' object may fail unexpectedly (e.g. IOError for saving dirstate). BTW, in the test script, putting section header '[extensions]' into '.hg/hgrc' is needed to fix incomplete disabling 'abort' extension at 4d1382fd96ff.

File last commit:

r25753:fe03f522 default
r25879:99e88320 stable
Show More
test-merge1.t
296 lines | 6.5 KiB | text/troff | Tads3Lexer
Pradeepkumar Gayam
tests: unify test-merge1
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
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482
Test interrupted updates by exploiting our non-handling of directory collisions
$ mkdir b
$ hg up
Matt Mackall
tests: glob out exception type for directory collision...
r19498 abort: *: '$TESTTMP/t/b' (glob)
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
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)
Gilles Moris
summary: move the parents phase marker to commit line (issue4688)...
r25382 phases: 2 draft
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
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)
Gilles Moris
summary: move the parents phase marker to commit line (issue4688)...
r25382 phases: 2 draft
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482
Prepare a basic merge
$ hg up 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file c1 > c
$ hg add c
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b1 > b
no merges expected
$ hg merge -P 1
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:b8bb4a988f25
Pradeepkumar Gayam
tests: unify test-merge1
r11975 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 diff -r 49035e18a8e6 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+This is file b1
$ hg status
M b
$ cd ..; rm -r t
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b2 > b
merge should fail
$ hg merge 1
Jordi Gutiérrez Hermoso
merge: report all files in _checkunknown...
r15894 b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Pradeepkumar Gayam
tests: unify test-merge1
r11975 merge of b expected
$ hg merge -f 1
Mads Kiilerich
util: flush stdout before calling external processes...
r13439 merging b
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 diff -r 49035e18a8e6 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+This is file b2
$ hg status
M b
$ cd ..; rm -r t
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b22 > b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #3"
Pradeepkumar Gayam
tests: unify test-merge1
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
merge: standardize error message for dirty working dir
r19802 abort: uncommitted changes
Kevin Bullock
merge: make 'nothing to merge' aborts consistent...
r15619 (use 'hg status' to list changes)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243 merge expected!
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 diff -r 85de557015a8 b
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b22 > b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #3"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b33 > b
merge of b should fail
$ hg merge 2
Siddharth Agarwal
merge: standardize error message for dirty working dir
r19802 abort: uncommitted changes
Kevin Bullock
merge: make 'nothing to merge' aborts consistent...
r15619 (use 'hg status' to list changes)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Pradeepkumar Gayam
tests: unify test-merge1
r11975 merge of b expected
$ hg merge -f 2
Mads Kiilerich
util: flush stdout before calling external processes...
r13439 merging b
Pradeepkumar Gayam
tests: unify test-merge1
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
tests: remove unneeded -d flags...
r12156 diff -r 85de557015a8 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- a/b
+++ b/b
@@ -1,1 +1,1 @@
-This is file b1
+This is file b33
$ hg status
M b
Matt Mackall
merge: handle no file parent in backwards merge (issue2364)
r12664
Test for issue2364
$ hg up -qC .
$ hg rm b
$ hg ci -md
$ hg revert -r -2 b
$ hg up -q -- -2
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
FUJIWARA Katsunori
context: write dirstate out explicitly after marking files as clean...
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
> from mercurial import extensions, merge, util
> def applyupdates(orig, *args, **kwargs):
> orig(*args, **kwargs)
> raise util.Abort('intentional aborting')
> 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
tests: add missing trailing 'cd ..'...
r16913 $ cd ..