mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
37ccfcc8ea
"merge.applyupdates()" sorts "actions" in removal first order, and "workeractions" derived from it should be also sorted. If each actions in "workeractions" are executed in serial, this sorting ensures that merging/updating process is collision free, because updating the file in target context is always executed after removing the existing file which causes case-folding collision against the former. In the other hand, if each actions are executed in parallel, updating on a worker process may be executed before removing on another worker process, because "worker.partition()" partitions list of actions regardless of type of each actions. This patch divides "workeractions" into removing and updating, and executes the former first. This patch still scans "actions"/"workeractions" some times for ease of patch review, even though large list may cost much in this way. (total cost should be as same as before) This also changes some tests, because dividing "workeractions" affects progress indication.
102 lines
2.9 KiB
Perl
102 lines
2.9 KiB
Perl
http://mercurial.selenic.com/bts/issue672
|
|
|
|
# 0-2-4
|
|
# \ \ \
|
|
# 1-3-5
|
|
#
|
|
# rename in #1, content change in #4.
|
|
|
|
$ hg init
|
|
|
|
$ touch 1
|
|
$ touch 2
|
|
$ hg commit -Am init # 0
|
|
adding 1
|
|
adding 2
|
|
|
|
$ hg rename 1 1a
|
|
$ hg commit -m rename # 1
|
|
|
|
$ hg co -C 0
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ echo unrelated >> 2
|
|
$ hg ci -m unrelated1 # 2
|
|
created new head
|
|
|
|
$ hg merge --debug 1
|
|
searching for copies back to rev 1
|
|
unmatched files in other:
|
|
1a
|
|
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
|
|
src: '1' -> dst: '1a'
|
|
checking for directory renames
|
|
resolving manifests
|
|
branchmerge: True, force: False, partial: False
|
|
ancestor: 81f4b099af3d, local: c64f439569a9+, remote: c12dcd37c90a
|
|
1: other deleted -> r
|
|
1a: remote created -> g
|
|
removing 1
|
|
updating: 1 1/2 files (50.00%)
|
|
getting 1a
|
|
updating: 1a 2/2 files (100.00%)
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
|
|
$ hg ci -m merge1 # 3
|
|
|
|
$ hg co -C 2
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ echo hello >> 1
|
|
$ hg ci -m unrelated2 # 4
|
|
created new head
|
|
|
|
$ hg co -C 3
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ hg merge -y --debug 4
|
|
searching for copies back to rev 1
|
|
unmatched files in local:
|
|
1a
|
|
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
|
|
src: '1' -> dst: '1a' *
|
|
checking for directory renames
|
|
resolving manifests
|
|
branchmerge: True, force: False, partial: False
|
|
ancestor: c64f439569a9, local: e327dca35ac8+, remote: 746e9549ea96
|
|
1a: local copied/moved to 1 -> m
|
|
preserving 1a for resolve of 1a
|
|
updating: 1a 1/1 files (100.00%)
|
|
picked tool 'internal:merge' for 1a (binary False symlink False)
|
|
merging 1a and 1 to 1a
|
|
my 1a@e327dca35ac8+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
|
|
premerge successful
|
|
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
|
|
$ hg co -C 4
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ hg merge -y --debug 3
|
|
searching for copies back to rev 1
|
|
unmatched files in other:
|
|
1a
|
|
all copies found (* = to merge, ! = divergent, % = renamed and deleted):
|
|
src: '1' -> dst: '1a' *
|
|
checking for directory renames
|
|
resolving manifests
|
|
branchmerge: True, force: False, partial: False
|
|
ancestor: c64f439569a9, local: 746e9549ea96+, remote: e327dca35ac8
|
|
1: remote moved to 1a -> m
|
|
preserving 1 for resolve of 1a
|
|
removing 1
|
|
updating: 1 1/1 files (100.00%)
|
|
picked tool 'internal:merge' for 1a (binary False symlink False)
|
|
merging 1 and 1a to 1a
|
|
my 1a@746e9549ea96+ other 1a@e327dca35ac8 ancestor 1@81f4b099af3d
|
|
premerge successful
|
|
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
|