Commit 5f67bdba authored by Valentin Gatien-Baron's avatar Valentin Gatien-Baron
Browse files

commit: improve the files field of changelog for merges

Currently, the files list of merge commits repeats all the deletions
(either actual deletions, or files that got renamed) that happened
between base and p2 of the merge. If p2 is the main branch, the list
can easily be much bigger than the change being merged.

This results in various problems worth improving:
- changelog is bigger than necessary
- `hg log directory` lists many unrelated merge commits, and `hg log
  -v -r commit` frequently fills multiple screens worth of files
- it possibly slows down adjustlinkrev, by forcing it to read more
  manifests, and that function can certainly be a bottleneck
- the server side of pulls can waste a lot of time simply opening the
  filelogs for pointless files (the constant factors for opening even
  a tiny filelog is apparently pretty bad)

So stop listing such files as described in the code.  Impacted merge
commits and their descendants get a different hash than they would
have without this. This doesn't seem problematic, except for
convert. The previous commit helped with that in the hg->hg case (but
if you do svn->hg twice from scratch, hashes can still change).

The rest of the description is numbers. I don't have much to report,
because recreating the files list of existing repositories is not
easy:
- debugupgradeformat and bundle/unbundle don't recreate the list
- export/import tends to choke quickly applying patches or on
  description that contain diffs,
- merge commits from the convert extension don't have the right files
  list for reasons orthogonal to the current commit
- replaying the merge with hg update/hg merge/hg revert --all/hg
  commit can end up failing in hg revert
- I wasn't sure that using debugsetparents + debugrebuilddirstate
  would really build the right thing

I measured commit time before and after this change, in a case with no
files filtered out, several files filtered out (no difference) and 5k
files filtered out (+1% time).

Recreating the 100 more recent merges in a private repo, the
concatenated uncompressed files lists goes from 1.12MB to
0.52MB. Excluding 3 merges that are not representative, then the size
goes from 570k to 15k.
I converted part of mozilla-central, and observed file list shrinking
quite a bit too, starting at the very first merge, 733641d9feaf, going
from 550 files to 10 files (although they have relatively few merges,
so they probably wouldn't care).

Differential Revision: https://phab.mercurial-scm.org/D6613
parent d98ec36be808
......@@ -2661,6 +2661,47 @@ class localrepository(object):
drop = sorted([f for f in removed if f in m])
for f in drop:
del m[f]
if p2.rev() != nullrev:
@util.cachefunc
def mas():
p1n = p1.node()
p2n = p2.node()
cahs = self.changelog.commonancestorsheads(p1n, p2n)
if not cahs:
cahs = [nullrev]
return [self[r].manifest() for r in cahs]
def deletionfromparent(f):
# When a file is removed relative to p1 in a merge, this
# function determines whether the absence is due to a
# deletion from a parent, or whether the merge commit
# itself deletes the file. We decide this by doing a
# simplified three way merge of the manifest entry for
# the file. There are two ways we decide the merge
# itself didn't delete a file:
# - neither parent (nor the merge) contain the file
# - exactly one parent contains the file, and that
# parent has the same filelog entry as the merge
# ancestor (or all of them if there two). In other
# words, that parent left the file unchanged while the
# other one deleted it.
# One way to think about this is that deleting a file is
# similar to emptying it, so the list of changed files
# should be similar either way. The computation
# described above is not done directly in _filecommit
# when creating the list of changed files, however
# it does something very similar by comparing filelog
# nodes.
if f in m1:
return (f not in m2
and all(f in ma and ma.find(f) == m1.find(f)
for ma in mas()))
elif f in m2:
return all(f in ma and ma.find(f) == m2.find(f)
for ma in mas())
else:
return True
removed = [f for f in removed if not deletionfromparent(f)]
files = changed + removed
md = None
if not files:
......
......@@ -583,12 +583,12 @@ on branch2 with branch1 merged, so file1 should be gone:
(branch merge, don't forget to commit)
$ hg ci -d '4 0' -m 'merge backout of branch1'
$ hg id
22149cdde76d (branch2) tip
d97a8500a969 (branch2) tip
$ hg st -A
C default
C file2
$ hg summary
parent: 4:22149cdde76d tip
parent: 4:d97a8500a969 tip
merge backout of branch1
branch: branch2
commit: (clean)
......
......@@ -649,7 +649,7 @@ Amend a merge changeset (with renames and conflicts from the second parent):
(no more unresolved files)
$ hg ci -m 'merge bar'
$ hg log --config diff.git=1 -pr .
changeset: 20:163cfd7219f7
changeset: 20:5aba7f3726e6
tag: tip
parent: 19:30d96aeaf27b
parent: 18:1aa437659d19
......@@ -682,7 +682,7 @@ Amend a merge changeset (with renames and conflicts from the second parent):
$ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -m 'merge bar (amend message)' --edit
HGEDITFORM=commit.amend.merge
$ hg log --config diff.git=1 -pr .
changeset: 21:bca52d4ed186
changeset: 21:4b0631ef043e
tag: tip
parent: 19:30d96aeaf27b
parent: 18:1aa437659d19
......@@ -715,7 +715,7 @@ Amend a merge changeset (with renames and conflicts from the second parent):
$ hg mv zz z
$ hg ci --amend -m 'merge bar (undo rename)'
$ hg log --config diff.git=1 -pr .
changeset: 22:12594a98ca3f
changeset: 22:06423be42d60
tag: tip
parent: 19:30d96aeaf27b
parent: 18:1aa437659d19
......@@ -751,9 +751,9 @@ Amend a merge changeset (with renames during the merge):
$ echo aa >> aaa
$ hg ci -m 'merge bar again'
$ hg log --config diff.git=1 -pr .
changeset: 24:dffde028b388
changeset: 24:a89974a20457
tag: tip
parent: 22:12594a98ca3f
parent: 22:06423be42d60
parent: 23:4c94d5bc65f5
user: test
date: Thu Jan 01 00:00:00 1970 +0000
......@@ -800,9 +800,9 @@ in p1 too, but it was recorded as copied from p2.
$ hg mv aaa aa
$ hg ci --amend -m 'merge bar again (undo rename)'
$ hg log --config diff.git=1 -pr .
changeset: 25:18e3ba160489
changeset: 25:282080768800
tag: tip
parent: 22:12594a98ca3f
parent: 22:06423be42d60
parent: 23:4c94d5bc65f5
user: test
date: Thu Jan 01 00:00:00 1970 +0000
......@@ -843,9 +843,9 @@ Amend a merge changeset (with manifest-level conflicts):
What do you want to do? c
$ hg ci -m 'merge bar (with conflicts)'
$ hg log --config diff.git=1 -pr .
changeset: 28:b4c3035e2544
changeset: 28:ed15db12298d
tag: tip
parent: 27:4b216ca5ba97
parent: 27:eb5adec0b43b
parent: 26:67db8847a540
user: test
date: Thu Jan 01 00:00:00 1970 +0000
......@@ -855,9 +855,9 @@ Amend a merge changeset (with manifest-level conflicts):
$ hg rm aa
$ hg ci --amend -m 'merge bar (with conflicts, amended)'
$ hg log --config diff.git=1 -pr .
changeset: 29:1205ed810051
changeset: 29:0eeafd043f63
tag: tip
parent: 27:4b216ca5ba97
parent: 27:eb5adec0b43b
parent: 26:67db8847a540
user: test
date: Thu Jan 01 00:00:00 1970 +0000
......@@ -974,7 +974,7 @@ Test that "diff()" in committemplate works correctly for amending
HG: M:
HG: A: foo
HG: R:
HG: diff -r 1205ed810051 foo
HG: diff -r 0eeafd043f63 foo
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
......@@ -988,12 +988,12 @@ Test that "diff()" in committemplate works correctly for amending
HG: M:
HG: A: foo y
HG: R:
HG: diff -r 1205ed810051 foo
HG: diff -r 0eeafd043f63 foo
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
HG: +foo
HG: diff -r 1205ed810051 y
HG: diff -r 0eeafd043f63 y
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
......@@ -1006,18 +1006,18 @@ Test that "diff()" in committemplate works correctly for amending
HG: M:
HG: A: foo y
HG: R: a
HG: diff -r 1205ed810051 a
HG: diff -r 0eeafd043f63 a
HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: @@ -1,2 +0,0 @@
HG: -a
HG: -a
HG: diff -r 1205ed810051 foo
HG: diff -r 0eeafd043f63 foo
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
HG: +foo
HG: diff -r 1205ed810051 y
HG: diff -r 0eeafd043f63 y
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
......@@ -1030,23 +1030,23 @@ Test that "diff()" in committemplate works correctly for amending
HG: M:
HG: A: foo y
HG: R: a x
HG: diff -r 1205ed810051 a
HG: diff -r 0eeafd043f63 a
HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: @@ -1,2 +0,0 @@
HG: -a
HG: -a
HG: diff -r 1205ed810051 foo
HG: diff -r 0eeafd043f63 foo
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
HG: +foo
HG: diff -r 1205ed810051 x
HG: diff -r 0eeafd043f63 x
HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: @@ -1,1 +0,0 @@
HG: -x
HG: diff -r 1205ed810051 y
HG: diff -r 0eeafd043f63 y
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
......@@ -1061,23 +1061,23 @@ Test that "diff()" in committemplate works correctly for amending
HG: M:
HG: A: foo y
HG: R: a x
HG: diff -r 1205ed810051 a
HG: diff -r 0eeafd043f63 a
HG: --- a/a Thu Jan 01 00:00:00 1970 +0000
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: @@ -1,2 +0,0 @@
HG: -a
HG: -a
HG: diff -r 1205ed810051 foo
HG: diff -r 0eeafd043f63 foo
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/foo Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
HG: +foo
HG: diff -r 1205ed810051 x
HG: diff -r 0eeafd043f63 x
HG: --- a/x Thu Jan 01 00:00:00 1970 +0000
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: @@ -1,1 +0,0 @@
HG: -x
HG: diff -r 1205ed810051 y
HG: diff -r 0eeafd043f63 y
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
HG: +++ b/y Thu Jan 01 00:00:00 1970 +0000
HG: @@ -0,0 +1,1 @@
......
......@@ -760,9 +760,8 @@ test converting merges into a repo that contains other files
converted/b
x
$ hg -R merge-test2 log -G -T '{shortest(node)} {desc}\n{files % "- {file}\n"}\n'
o 6eaa merge a & b
o e2ff merge a & b
|\ - converted/a
| | - toberemoved
| |
| o 2995 add b
| | - converted/b
......
......@@ -54,7 +54,7 @@ Convert from null revision
$ glog full
o 5 "5: change a" files: a
|
o 4 "4: merge 2 and 3" files: e f
o 4 "4: merge 2 and 3" files: e
|\
| o 3 "3: change a" files: a
| |
......@@ -83,7 +83,7 @@ Convert from zero revision
$ glog full
o 5 "5: change a" files: a
|
o 4 "4: merge 2 and 3" files: e f
o 4 "4: merge 2 and 3" files: e
|\
| o 3 "3: change a" files: a
| |
......@@ -130,7 +130,7 @@ Check copy preservation
(It seems like a bug in log that the following doesn't show rev 1.)
$ hg log --follow --copies e
changeset: 2:82bbac3d2cf4
changeset: 2:8d3c3fe67bb7
user: test
date: Thu Jan 01 00:00:04 1970 +0000
summary: 4: merge 2 and 3
......
......@@ -202,7 +202,7 @@ Merge rename from other branch
$ hg ci -m 'merge rename from p2'
$ hg l
@ 3 merge rename from p2
|\ x
|\
| o 2 add z
| | z
o | 1 rename x to y
......@@ -417,9 +417,9 @@ Try merging the other direction too
created new head
$ hg l
@ 5 merge 3 into 1
|\ y z
|\ z
+---o 4 merge 1 into 3
| |/ x z
| |/ z
| o 3 modify z
| | z
| o 2 rename y to z
......
......@@ -2101,7 +2101,7 @@ Test --patch and --stat with --follow and --follow-first
$ hg up -q 6
$ hg log -G --git --patch --follow-first e
\xe2\x97\x8d changeset: 6:fc281d8ff18d (esc)
\xe2\x97\x8d changeset: 6:9feeac35a70a (esc)
\xe2\x94\x82\xe2\x95\xb2 tag: tip (esc)
\xe2\x94\x82 \xe2\x95\xa7 parent: 5:99b31f1c2782 (esc)
\xe2\x94\x82 parent: 4:17d952250a9d (esc)
......@@ -2148,7 +2148,7 @@ Test --follow and forward --rev
$ hg log -G --template "{rev} {desc|firstline}\n"
\xe2\x97\x8b 8 add g (esc)
\xe2\x94\x82 (esc)
\xe2\x94\x82 \xe2\x97\x8b 7 Added tag foo-bar for changeset fc281d8ff18d (esc)
\xe2\x94\x82 \xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
\xe2\x94\x82\xe2\x95\xb1 (esc)
\xe2\x97\x8b 6 merge 5 and 4 (esc)
\xe2\x94\x82\xe2\x95\xb2 (esc)
......@@ -2311,17 +2311,17 @@ changessincelatesttag with no prior tag
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID fc281d8ff18d999ad6497b3d27390bcd695dcc73
# Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
# Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
# Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
merge 5 and 4
diff -r 99b31f1c2782 -r fc281d8ff18d dir/b
diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
--- a/dir/b Thu Jan 01 00:00:00 1970 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-a
diff -r 99b31f1c2782 -r fc281d8ff18d e
diff -r 99b31f1c2782 -r 9feeac35a70a e
--- a/e Thu Jan 01 00:00:00 1970 +0000
+++ b/e Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
......@@ -2331,24 +2331,24 @@ changessincelatesttag with no prior tag
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID 02dbb8e276b8ab7abfd07cab50c901647e75c2dd
# Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
Added tag foo-bar for changeset fc281d8ff18d
# Node ID 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
# Parent 9feeac35a70aa325519bbf3178683271113f2b8f
Added tag foo-bar for changeset 9feeac35a70a
diff -r fc281d8ff18d -r 02dbb8e276b8 .hgtags
diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+fc281d8ff18d999ad6497b3d27390bcd695dcc73 foo-bar
+9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
# HG changeset patch
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID 24c2e826ddebf80f9dcd60b856bdb8e6715c5449
# Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
# Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
# Parent 9feeac35a70aa325519bbf3178683271113f2b8f
add g
diff -r fc281d8ff18d -r 24c2e826ddeb g
diff -r 9feeac35a70a -r 3bd4551ec3fe g
--- a/g Thu Jan 01 00:00:00 1970 +0000
+++ b/g Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +1,1 @@
......@@ -2436,7 +2436,7 @@ Test --hidden
[]
<spanset- 0:9>
$ hg log -G --template '{rev} {desc}\n'
\xe2\x97\x8b 7 Added tag foo-bar for changeset fc281d8ff18d (esc)
\xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
\xe2\x94\x82 (esc)
\xe2\x97\x8b 6 merge 5 and 4 (esc)
\xe2\x94\x82\xe2\x95\xb2 (esc)
......@@ -2534,9 +2534,9 @@ working-directory revision
node template with changesetprinter:
$ hg log -Gqr 5:7 --config ui.graphnodetemplate='"{rev}"'
7 7:02dbb8e276b8
7 7:9febbb9c8b2e
\xe2\x94\x82 (esc)
6 6:fc281d8ff18d
6 6:9feeac35a70a
\xe2\x94\x82\xe2\x95\xb2 (esc)
\xe2\x94\x82 \xe2\x95\xa7 (esc)
5 5:99b31f1c2782
......@@ -2560,7 +2560,7 @@ label() should just work in node template:
$ hg log -Gqr 7 --config extensions.color= --color=debug \
> --config ui.graphnodetemplate='{label("branch.{branch}", rev)}'
[branch.default\xe2\x94\x827] [log.node|7:02dbb8e276b8] (esc)
[branch.default\xe2\x94\x827] [log.node|7:9febbb9c8b2e] (esc)
\xe2\x94\x82 (esc)
\xe2\x95\xa7 (esc)
......
......@@ -1951,7 +1951,7 @@ Test --patch and --stat with --follow and --follow-first
$ hg up -q 6
$ hg log -G --git --patch --follow-first e
@ changeset: 6:fc281d8ff18d
@ changeset: 6:9feeac35a70a
|\ tag: tip
| ~ parent: 5:99b31f1c2782
| parent: 4:17d952250a9d
......@@ -1998,7 +1998,7 @@ Test --follow and forward --rev
$ hg log -G --template "{rev} {desc|firstline}\n"
o 8 add g
|
| o 7 Added tag foo-bar for changeset fc281d8ff18d
| o 7 Added tag foo-bar for changeset 9feeac35a70a
|/
o 6 merge 5 and 4
|\
......@@ -2161,17 +2161,17 @@ changessincelatesttag with no prior tag
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID fc281d8ff18d999ad6497b3d27390bcd695dcc73
# Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
# Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
# Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
merge 5 and 4
diff -r 99b31f1c2782 -r fc281d8ff18d dir/b
diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
--- a/dir/b Thu Jan 01 00:00:00 1970 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-a
diff -r 99b31f1c2782 -r fc281d8ff18d e
diff -r 99b31f1c2782 -r 9feeac35a70a e
--- a/e Thu Jan 01 00:00:00 1970 +0000
+++ b/e Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
......@@ -2181,24 +2181,24 @@ changessincelatesttag with no prior tag
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID 02dbb8e276b8ab7abfd07cab50c901647e75c2dd
# Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
Added tag foo-bar for changeset fc281d8ff18d
# Node ID 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
# Parent 9feeac35a70aa325519bbf3178683271113f2b8f
Added tag foo-bar for changeset 9feeac35a70a
diff -r fc281d8ff18d -r 02dbb8e276b8 .hgtags
diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+fc281d8ff18d999ad6497b3d27390bcd695dcc73 foo-bar
+9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
# HG changeset patch
# User test
# Date 0 0
# Thu Jan 01 00:00:00 1970 +0000
# Node ID 24c2e826ddebf80f9dcd60b856bdb8e6715c5449
# Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
# Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
# Parent 9feeac35a70aa325519bbf3178683271113f2b8f
add g
diff -r fc281d8ff18d -r 24c2e826ddeb g
diff -r 9feeac35a70a -r 3bd4551ec3fe g
--- a/g Thu Jan 01 00:00:00 1970 +0000
+++ b/g Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +1,1 @@
......@@ -2286,7 +2286,7 @@ Test --hidden
[]
<spanset- 0:9>
$ hg log -G --template '{rev} {desc}\n'
o 7 Added tag foo-bar for changeset fc281d8ff18d
o 7 Added tag foo-bar for changeset 9feeac35a70a
|
o 6 merge 5 and 4
|\
......@@ -2384,9 +2384,9 @@ working-directory revision
node template with changesetprinter:
$ hg log -Gqr 5:7 --config ui.graphnodetemplate='"{rev}"'
7 7:02dbb8e276b8
7 7:9febbb9c8b2e
|
6 6:fc281d8ff18d
6 6:9feeac35a70a
|\
| ~
5 5:99b31f1c2782
......@@ -2410,7 +2410,7 @@ label() should just work in node template:
$ hg log -Gqr 7 --config extensions.color= --color=debug \
> --config ui.graphnodetemplate='{label("branch.{branch}", rev)}'
[branch.default|7] [log.node|7:02dbb8e276b8]
[branch.default|7] [log.node|7:9febbb9c8b2e]
|
~
......
......@@ -60,13 +60,13 @@ https://bz.mercurial-scm.org/672
checking for directory renames
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: c64f439569a9, local: e327dca35ac8+, remote: 746e9549ea96
ancestor: c64f439569a9, local: f4a9cff3cd0b+, remote: 746e9549ea96
preserving 1a for resolve of 1a
starting 4 threads for background file closing (?)
1a: local copied/moved from 1 -> m (premerge)
picked tool ':merge' for 1a (binary False symlink False changedelete False)
merging 1a and 1 to 1a
my 1a@e327dca35ac8+ other 1@746e9549ea96 ancestor 1@c64f439569a9
my 1a@f4a9cff3cd0b+ other 1@746e9549ea96 ancestor 1@c64f439569a9
premerge successful
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
......@@ -82,14 +82,14 @@ https://bz.mercurial-scm.org/672
checking for directory renames
resolving manifests
branchmerge: True, force: False, partial: False
ancestor: c64f439569a9, local: 746e9549ea96+, remote: e327dca35ac8
ancestor: c64f439569a9, local: 746e9549ea96+, remote: f4a9cff3cd0b
preserving 1 for resolve of 1a
removing 1
starting 4 threads for background file closing (?)
1a: remote moved from 1 -> m (premerge)
picked tool ':merge' for 1a (binary False symlink False changedelete False)
merging 1 and 1a to 1a
my 1a@746e9549ea96+ other 1a@e327dca35ac8 ancestor 1@c64f439569a9
my 1a@746e9549ea96+ other 1a@f4a9cff3cd0b ancestor 1@c64f439569a9
premerge successful
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
......
......@@ -160,7 +160,7 @@ lfconvert with rename, merge, and remove
initializing destination largefiles-repo
$ cd largefiles-repo
$ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
o 5:8e05f5f2b77e merge
o 5:9cc5aa7204f0 merge
|\
| o 4:a5a02de7a8e4 remove large, normal3
| |
......@@ -251,7 +251,7 @@ convert extension is disabled to show config items can be loaded without it.
3 remove large, normal3
2 merge
1 add anotherlarge (should be a largefile)
0 Added tag mytag for changeset abacddda7028
0 Added tag mytag for changeset 17126745edfd
$ cd ../normal-repo
$ cat >> .hg/hgrc <<EOF
> [extensions]
......@@ -304,7 +304,7 @@ from the working dir on a convert.
3 remove large, normal3
2 merge
1 add anotherlarge (should be a largefile)
0 Added tag mytag for changeset abacddda7028
0 Added tag mytag for changeset 17126745edfd
$ hg -R largefiles-repo-hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
o 7:2f08f66459b7 Added tag mytag for changeset 17126745edfd
......@@ -374,7 +374,7 @@ Ensure the largefile can be cached in the source if necessary
4 remove large, normal3
3 merge
2 add anotherlarge (should be a largefile)
1 Added tag mytag for changeset abacddda7028
1 Added tag mytag for changeset 17126745edfd
0 change branch name only
Ensure empty commits aren't lost in the conversion
......
......@@ -118,7 +118,7 @@ All the merges of various file contents.
12-- C: agree on "a"
1-11 : hg said "", expected "a"
1-12 : agree on "a"
1-1- : hg said "a", expected ""
1-1- : agree on ""
1-21 C: agree on "a"
1-22 C: hg said "", expected "a"
1-23 C: agree on "a"
......@@ -215,6 +215,6 @@ containing $files.
$ hg merge -qr 3; echo f > u1; echo f > u2; rm -f c1 c2
$ hg commit -qAm '5 merge with two gcas'
$ hg log -r . -T '{files}\n' # expecting u1 u2
c1
$ cd ../
$ rm -rf repo
......@@ -744,7 +744,7 @@ Test rebasing a commit with copy information, but no content changes
$ hg tglog
@ 6: 676538af172d 'untracked rename of d to e'
|
| * 5: 71cb43376053 'merge'
| * 5: 574d92ad16fc 'merge'
| |\
| | x 4: 2c8b5dad7956 'rename d to e'
| | |
......@@ -758,8 +758,8 @@ Test rebasing a commit with copy information, but no content changes
$ hg rebase -b 5 -d tip
rebasing 3:ca58782ad1e4 "b"
rebasing 5:71cb43376053 "merge"
note: not rebasing 5:71cb43376053 "merge", its destination already has all its changes
rebasing 5:574d92ad16fc "merge"
note: not rebasing 5:574d92ad16fc "merge", its destination already has all its changes
$ cd ..
......
......@@ -108,7 +108,7 @@ wrong.
$ hg tglog
@ 7: e08089805d82 'default: f-other stuff'
|
| o 6: 9455ee510502 'dev: merge default' dev
| o 6: 010ced67e558 'dev: merge default' dev
|/|
o | 5: 462860db70a1 'default: remove f-default'
| |
......@@ -136,10 +136,10 @@ Full rebase all the way back from branching point:
file 'f-default' was deleted in local [dest] but was modified in other [source].
You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.