merge: fix a copy detection bug (issue672)
When merging rev1 and rev2, we want to search for copies that happened
in rev1 but not in rev2 and vice-versa. We were starting the search at
rev1/rev2 and then going back, stopping as soon as we reached the revno
of the ancestor, but that can miss some cases (see the new
test-issue672).
Now we calculate the revisions that are ancestors of rev1 or rev2 (but
not both) and make sure the search doesn't stop too early.
Simplified test provided by mpm, based on a test case provided by
Edward Lee.
adding a
adding b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from ../b
searching for changes
warning: repository is unrelated
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
%% -R/--repository
changeset: 0:8580ff50825a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: a
changeset: 0:b6c483daf290
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
%% abbrev of long option
changeset: 1:b6c483daf290
tag: tip
parent: -1:000000000000
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
%% earlygetopt with duplicate options (36d23de02da1)
changeset: 1:b6c483daf290
tag: tip
parent: -1:000000000000
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
changeset: 0:8580ff50825a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: a
%% earlygetopt short option without following space
0:b6c483daf290
%% earlygetopt with illegal abbreviations
abort: Option --config may not be abbreviated!
abort: Option --cwd may not be abbreviated!
abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
%% --cwd
changeset: 0:8580ff50825a
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
summary: a
%% -y/--noninteractive - just be sure it is parsed
0:8580ff50825a
0:8580ff50825a
%% -q/--quiet
0:8580ff50825a
0:b6c483daf290
0:8580ff50825a
1:b6c483daf290
%% -v/--verbose
changeset: 1:b6c483daf290
tag: tip
parent: -1:000000000000
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: b
description:
b
changeset: 0:8580ff50825a
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: a
description:
a
changeset: 0:b6c483daf290
tag: tip
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files: b
description:
b
%% --config
quuxfoo
abort: malformed --config option:
abort: malformed --config option: a.b
abort: malformed --config option: a
abort: malformed --config option: a.=
abort: malformed --config option: .b=
%% --debug
changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a
tag: tip
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
manifest: 1:23226e7a252cacdc2d99e4fbdc3653441056de49
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files+: b
extra: branch=default
description:
b
changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
parent: -1:0000000000000000000000000000000000000000
parent: -1:0000000000000000000000000000000000000000
manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
user: test
date: Thu Jan 01 00:00:01 1970 +0000
files+: a
extra: branch=default
description:
a
%% --traceback
Traceback (most recent call last):
%% --time
Time: real x.x secs (user x.x+x.x sys x.x+x.x)
%% --version
Mercurial Distributed SCM (version xxx)
%% -h/--help
Mercurial Distributed SCM
list of commands:
add add the specified files on the next commit
addremove add all new files, delete all missing files
annotate show changeset information per file line
archive create unversioned archive of a repository revision
backout reverse effect of earlier changeset
branch set or show the current branch name
branches list repository named branches
bundle create a changegroup file
cat output the current or given revision of files
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
copy mark files as copied for the next commit
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
grep search for a pattern in specified files and revisions
heads show current repository heads or show branch heads
help show help for a command, extension, or list of commands
identify identify the working copy or specified revision
import import an ordered set of patches
incoming show new changesets found in source
init create a new repository in the given directory
locate locate files matching specific patterns
log show revision history of entire repository or files
manifest output the current or given revision of the project manifest
merge merge working directory with another revision
outgoing show changesets not found in destination
parents show the parents of the working dir or revision
paths show definition of symbolic path names
pull pull changes from the specified source
push push changes to the specified destination
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
revert revert files or dirs to their states as of some revision
rollback roll back the last transaction in this repository
root print the root (top) of the current working dir
serve export the repository via HTTP
showconfig show combined config settings from all hgrc files
status show changed files in the working directory
tag add a tag for the current or given revision
tags list repository tags
tip show the tip revision
unbundle apply one or more changegroup files
update update working directory
verify verify the integrity of the repository
version output version and copyright information
use "hg -v help" to show aliases and global options
Mercurial Distributed SCM
list of commands:
add add the specified files on the next commit
addremove add all new files, delete all missing files
annotate show changeset information per file line
archive create unversioned archive of a repository revision
backout reverse effect of earlier changeset
branch set or show the current branch name
branches list repository named branches
bundle create a changegroup file
cat output the current or given revision of files
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
copy mark files as copied for the next commit
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
grep search for a pattern in specified files and revisions
heads show current repository heads or show branch heads
help show help for a command, extension, or list of commands
identify identify the working copy or specified revision
import import an ordered set of patches
incoming show new changesets found in source
init create a new repository in the given directory
locate locate files matching specific patterns
log show revision history of entire repository or files
manifest output the current or given revision of the project manifest
merge merge working directory with another revision
outgoing show changesets not found in destination
parents show the parents of the working dir or revision
paths show definition of symbolic path names
pull pull changes from the specified source
push push changes to the specified destination
recover roll back an interrupted transaction
remove remove the specified files on the next commit
rename rename files; equivalent of copy + remove
revert revert files or dirs to their states as of some revision
rollback roll back the last transaction in this repository
root print the root (top) of the current working dir
serve export the repository via HTTP
showconfig show combined config settings from all hgrc files
status show changed files in the working directory
tag add a tag for the current or given revision
tags list repository tags
tip show the tip revision
unbundle apply one or more changegroup files
update update working directory
verify verify the integrity of the repository
version output version and copyright information
use "hg -v help" to show aliases and global options
%% not tested: --debugger