[PATCH] update, merge: add option -n / revision 1
Adrian Buehlmann
adrian at cadifra.com
Sat May 24 12:52:17 CDT 2008
# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1211577971 -7200
# Node ID d8fdee53af223a468e6915b89406453e7e95bfa5
# Parent 170818dad56b671a4782794fb5da02635cfe6681
update, merge: add option -n (--dry_run)
Files that need file merging are listed in output, but no file merges
are actually attempted, which implies that file merge conflicts won't
be uncovered with --dry_run
diff -r 170818dad56b -r d8fdee53af22 mercurial/commands.py
--- a/mercurial/commands.py Mon May 19 10:23:47 2008 +0200
+++ b/mercurial/commands.py Fri May 23 23:26:11 2008 +0200
@@ -1865,7 +1865,7 @@
ui.write("%3s %1s " % (perm, type))
ui.write("%s\n" % f)
-def merge(ui, repo, node=None, force=None, rev=None):
+def merge(ui, repo, node=None, force=None, rev=None, dry_run=None):
"""merge working directory with another revision
Merge the contents of the current working directory and the
@@ -1877,6 +1877,10 @@
head revision, and the repository contains exactly one other head,
the other head is merged with by default. Otherwise, an explicit
revision to merge with must be provided.
+
+ No file merges are actually attempted when option -n (--dry_run) is
+ specified, so the dry run output may be different compared to
+ the output produced without -n.
"""
if rev and node:
@@ -1901,7 +1905,7 @@
raise util.Abort(_('working dir not at a head rev - '
'use "hg update" or merge with an explicit rev'))
node = parent == heads[0] and heads[-1] or heads[0]
- return hg.merge(repo, node, force=force)
+ return hg.merge(repo, node, force=force, dry_run=dry_run)
def outgoing(ui, repo, dest=None, **opts):
"""show changesets not found in destination
@@ -2800,7 +2804,7 @@
return postincoming(ui, repo, modheads, opts['update'], None)
-def update(ui, repo, node=None, rev=None, clean=False, date=None):
+def update(ui, repo, node=None, rev=None, clean=False, date=None, dry_run=None):
"""update working directory
Update the working directory to the specified revision, or the
@@ -2816,6 +2820,10 @@
working directory is clean, update quietly switches branches.
See 'hg help dates' for a list of formats valid for --date.
+
+ No file merges are actually attempted when option -n (--dry_run) is
+ specified, so the dry run output may be different compared to
+ the output produced without -n.
"""
if rev and node:
raise util.Abort(_("please specify just one revision"))
@@ -2829,9 +2837,9 @@
rev = cmdutil.finddate(ui, repo, date)
if clean:
- return hg.clean(repo, rev)
+ return hg.clean(repo, rev, dry_run=dry_run)
else:
- return hg.update(repo, rev)
+ return hg.update(repo, rev, dry_run=dry_run)
def verify(ui, repo):
"""verify the integrity of the repository
@@ -3168,8 +3176,8 @@
(merge,
[('f', 'force', None, _('force a merge with outstanding changes')),
('r', 'rev', '', _('revision to merge')),
- ],
- _('hg merge [-f] [[-r] REV]')),
+ ] + dryrunopts,
+ _('hg merge [-f] [-n] [[-r] REV]')),
"outgoing|out":
(outgoing,
[('f', 'force', None,
@@ -3299,8 +3307,9 @@
(update,
[('C', 'clean', None, _('overwrite locally modified files')),
('d', 'date', '', _('tipmost revision matching date')),
- ('r', 'rev', '', _('revision'))],
- _('hg update [-C] [-d DATE] [[-r] REV]')),
+ ('r', 'rev', '', _('revision'))
+ ] + dryrunopts,
+ _('hg update [-C] [-d DATE] [-n] [[-r] REV]')),
"verify": (verify, [], _('hg verify')),
"version": (version_, [], _('hg version')),
}
diff -r 170818dad56b -r d8fdee53af22 mercurial/filemerge.py
--- a/mercurial/filemerge.py Mon May 19 10:23:47 2008 +0200
+++ b/mercurial/filemerge.py Fri May 23 23:26:11 2008 +0200
@@ -101,7 +101,7 @@
if newdata != data:
open(file, "wb").write(newdata)
-def filemerge(repo, mynode, orig, fcd, fco, fca):
+def filemerge(repo, mynode, orig, fcd, fco, fca, dry_run):
"""perform a 3-way merge in the working directory
mynode = parent node before merge
@@ -126,11 +126,14 @@
except IOError:
return False
- if not fco.cmp(fcd.data()): # files identical?
- return None
-
ui = repo.ui
fd = fcd.path()
+
+ # fd may be inexistent on dry runs due to renames
+ if (not dry_run) or util.lexists(fd):
+ if not fco.cmp(fcd.data()): # files identical?
+ return None
+
binary = isbin(fcd) or isbin(fco) or isbin(fca)
symlink = fcd.islink() or fco.islink()
tool, toolpath = _picktool(repo, ui, fd, binary, symlink)
@@ -146,10 +149,21 @@
if tool == "internal:local":
return 0
if tool == "internal:other":
- repo.wwrite(fd, fco.data(), fco.fileflags())
+ if not dry_run:
+ repo.wwrite(fd, fco.data(), fco.fileflags())
return 0
if tool == "internal:fail":
return 1
+
+ if orig != fco.path():
+ repo.ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd))
+ else:
+ repo.ui.status(_("merging %s\n") % fd)
+
+ repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca))
+
+ if dry_run:
+ return 0
# do the actual merge
a = repo.wjoin(fd)
@@ -158,13 +172,6 @@
out = ""
back = a + ".orig"
util.copyfile(a, back)
-
- if orig != fco.path():
- repo.ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd))
- else:
- repo.ui.status(_("merging %s\n") % fd)
-
- repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca))
# do we attempt to simplemerge first?
if _toolbool(ui, tool, "premerge", not (binary or symlink)):
diff -r 170818dad56b -r d8fdee53af22 mercurial/hg.py
--- a/mercurial/hg.py Mon May 19 10:23:47 2008 +0200
+++ b/mercurial/hg.py Fri May 23 23:26:11 2008 +0200
@@ -268,35 +268,43 @@
def _update(repo, node): return update(repo, node)
-def update(repo, node):
+def _dryrunstatus(repo, dry_run):
+ if dry_run:
+ repo.ui.status(_("(this was a dry run, no actions were performed)\n"))
+ return dry_run
+
+def update(repo, node, dry_run=False):
"""update the working directory to node, merging linear changes"""
pl = repo.parents()
- stats = _merge.update(repo, node, False, False, None)
+ stats = _merge.update(repo, node, False, False, None, dry_run)
_showstats(repo, stats)
- if stats[3]:
- repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
+ if not _dryrunstatus(repo, dry_run):
+ if stats[3]:
+ repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
return stats[3] > 0
-def clean(repo, node, show_stats=True):
+def clean(repo, node, show_stats=True, dry_run=False):
"""forcibly switch the working directory to node, clobbering changes"""
- stats = _merge.update(repo, node, False, True, None)
+ stats = _merge.update(repo, node, False, True, None, dry_run)
if show_stats: _showstats(repo, stats)
+ _dryrunstatus(repo, dry_run)
return stats[3] > 0
-def merge(repo, node, force=None, remind=True):
+def merge(repo, node, force=None, remind=True, dry_run=False):
"""branch merge with node, resolving changes"""
- stats = _merge.update(repo, node, True, force, False)
+ stats = _merge.update(repo, node, True, force, False, dry_run)
_showstats(repo, stats)
- if stats[3]:
- pl = repo.parents()
- repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
- elif remind:
- repo.ui.status(_("(branch merge, don't forget to commit)\n"))
+ if not _dryrunstatus(repo, dry_run):
+ if stats[3]:
+ pl = repo.parents()
+ repo.ui.status(_("use 'hg resolve' to retry unresolved file merges\n"))
+ elif remind:
+ repo.ui.status(_("(branch merge, don't forget to commit)\n"))
return stats[3] > 0
def revert(repo, node, choose):
"""revert changes to revision in node without updating dirstate"""
- return _merge.update(repo, node, False, True, choose)[3] > 0
+ return _merge.update(repo, node, False, True, choose, False)[3] > 0
def verify(repo):
"""verify the consistency of a repository"""
diff -r 170818dad56b -r d8fdee53af22 mercurial/merge.py
--- a/mercurial/merge.py Mon May 19 10:23:47 2008 +0200
+++ b/mercurial/merge.py Fri May 23 23:26:11 2008 +0200
@@ -11,15 +11,19 @@
class mergestate(object):
'''track 3-way merge state of individual files'''
- def __init__(self, repo):
+ def __init__(self, repo, dry_run=False):
self._repo = repo
+ self._dry_run = dry_run
self._read()
def reset(self, node):
self._state = {}
self._local = node
- shutil.rmtree(self._repo.join("merge"), True)
+ if not self._dry_run:
+ shutil.rmtree(self._repo.join("merge"), True)
def _read(self):
self._state = {}
+ if self._dry_run:
+ return
try:
localnode = None
f = self._repo.opener("merge/state")
@@ -34,13 +38,16 @@
if err.errno != errno.ENOENT:
raise
def _write(self):
+ if self._dry_run:
+ return
f = self._repo.opener("merge/state", "w")
f.write(hex(self._local) + "\n")
for d, v in self._state.items():
f.write("\0".join([d] + v) + "\n")
def add(self, fcl, fco, fca, fd, flags):
hash = util.sha1(fcl.path()).hexdigest()
- self._repo.opener("merge/" + hash, "w").write(fcl.data())
+ if not self._dry_run:
+ self._repo.opener("merge/" + hash, "w").write(fcl.data())
self._state[fd] = ['u', hash, fcl.path(), fca.path(),
hex(fca.filenode()), fco.path(), flags]
self._write()
@@ -60,12 +67,13 @@
if self[dfile] == 'r':
return 0
state, hash, lfile, afile, anode, ofile, flags = self._state[dfile]
- f = self._repo.opener("merge/" + hash)
- self._repo.wwrite(dfile, f.read(), flags)
+ if not self._dry_run:
+ f = self._repo.opener("merge/" + hash)
+ self._repo.wwrite(dfile, f.read(), flags)
fcd = wctx[dfile]
fco = octx[ofile]
fca = self._repo.filectx(afile, fileid=anode)
- r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca)
+ r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca, self._dry_run)
if not r:
self.mark(dfile, 'r')
return r
@@ -258,13 +266,13 @@
return action
-def applyupdates(repo, action, wctx, mctx):
+def applyupdates(repo, action, wctx, mctx, dry_run):
"apply the merge action list to the working directory"
updated, merged, removed, unresolved = 0, 0, 0, 0
action.sort()
- ms = mergestate(repo)
+ ms = mergestate(repo, dry_run)
ms.reset(wctx.parents()[0].node())
moves = []
@@ -285,7 +293,8 @@
for f in moves:
if util.lexists(repo.wjoin(f)):
repo.ui.debug(_("removing %s\n") % f)
- os.unlink(repo.wjoin(f))
+ if not dry_run:
+ os.unlink(repo.wjoin(f))
audit_path = util.path_auditor(repo.root)
@@ -297,7 +306,8 @@
repo.ui.note(_("removing %s\n") % f)
audit_path(f)
try:
- util.unlink(repo.wjoin(f))
+ if not dry_run:
+ util.unlink(repo.wjoin(f))
except OSError, inst:
if inst.errno != errno.ENOENT:
repo.ui.warn(_("update failed to remove %s: %s!\n") %
@@ -317,19 +327,22 @@
flags = a[2]
repo.ui.note(_("getting %s\n") % f)
t = mctx.filectx(f).data()
- repo.wwrite(f, t, flags)
+ if not dry_run:
+ repo.wwrite(f, t, flags)
updated += 1
elif m == "d": # directory rename
f2, fd, flags = a[2:]
if f:
repo.ui.note(_("moving %s to %s\n") % (f, fd))
t = wctx.filectx(f).data()
- repo.wwrite(fd, t, flags)
- util.unlink(repo.wjoin(f))
+ if not dry_run:
+ repo.wwrite(fd, t, flags)
+ util.unlink(repo.wjoin(f))
if f2:
repo.ui.note(_("getting %s to %s\n") % (f2, fd))
t = mctx.filectx(f2).data()
- repo.wwrite(fd, t, flags)
+ if not dry_run:
+ repo.wwrite(fd, t, flags)
updated += 1
elif m == "dr": # divergent renames
fl = a[2]
@@ -338,7 +351,8 @@
repo.ui.warn(" %s\n" % nf)
elif m == "e": # exec
flags = a[2]
- util.set_flags(repo.wjoin(f), flags)
+ if not dry_run:
+ util.set_flags(repo.wjoin(f), flags)
return updated, merged, removed, unresolved
@@ -398,7 +412,7 @@
if f:
repo.dirstate.forget(f)
-def update(repo, node, branchmerge, force, partial):
+def update(repo, node, branchmerge, force, partial, dry_run=False):
"""
Perform a merge between the working directory and the given node
@@ -468,12 +482,12 @@
### apply phase
if not branchmerge: # just jump to the new rev
fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
- if not partial:
+ if not partial and not dry_run:
repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
- stats = applyupdates(repo, action, wc, p2)
+ stats = applyupdates(repo, action, wc, p2, dry_run)
- if not partial:
+ if not partial and not dry_run:
recordupdates(repo, action, branchmerge)
repo.dirstate.setparents(fp1, fp2)
if not branchmerge and not fastforward:
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-commit
--- a/tests/test-merge-commit Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-commit Fri May 23 23:26:11 2008 +0200
@@ -12,6 +12,8 @@
echo line2 >> foo
hg ci -m '1: change foo' -d '0 0'
+echo testing dry update:
+hg up -C -n 0
hg up -C 0
hg mv foo bar
rm bar
@@ -19,6 +21,8 @@
echo line1 >> bar
hg ci -m '2: mv foo bar; change bar' -d '0 0'
+echo testing dry merge:
+hg merge -n 1
hg merge 1
echo '% contents of bar should be line0 line1 line2'
cat bar
@@ -28,6 +32,8 @@
hg debugindex .hg/store/data/foo.i
# revert the content change from rev 2
+echo testing dry update:
+hg up -C -n 2
hg up -C 2
rm bar
echo line1 > bar
@@ -49,7 +55,11 @@
hg clone -U -r 1 -r 2 a b
cd b
+echo testing dry update:
+hg up -C -n 1
hg up -C 1
+echo testing dry merge:
+hg merge -n 2
hg merge 2
echo '% contents of bar should be line0 line1 line2'
cat bar
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-commit.out
--- a/tests/test-merge-commit.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-commit.out Fri May 23 23:26:11 2008 +0200
@@ -1,5 +1,12 @@
+testing dry update:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
+testing dry merge:
+merging bar and foo to bar
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging bar and foo to bar
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
@@ -14,6 +21,9 @@
rev offset length base linkrev nodeid p1 p2
0 0 7 0 0 690b295714ae 000000000000 000000000000
1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
+testing dry update:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
4:2d2f9a22c82b 2:0a3ab4856510
@@ -49,7 +59,14 @@
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files (+1 heads)
+testing dry update:
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+testing dry merge:
+merging foo and bar to bar
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging foo and bar to bar
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-force
--- a/tests/test-merge-force Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-force Fri May 23 23:26:11 2008 +0200
@@ -17,7 +17,11 @@
rm a
echo '% local deleted a file, remote removed'
+echo testing dry merge:
+hg merge -n
hg merge # should fail, since there are deleted files
+echo testing dry merge:
+hg -v merge --force -n
hg -v merge --force
echo % should show a as removed
hg st
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-force.out
--- a/tests/test-merge-force.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-force.out Fri May 23 23:26:11 2008 +0200
@@ -1,6 +1,13 @@
created new head
% local deleted a file, remote removed
+testing dry merge:
abort: outstanding uncommitted changes
+abort: outstanding uncommitted changes
+testing dry merge:
+resolving manifests
+removing a
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
removing a
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-remove
--- a/tests/test-merge-remove Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-remove Fri May 23 23:26:11 2008 +0200
@@ -17,6 +17,8 @@
hg cat foo >> foo1
hg ci -m 'mv foo foo1'
+echo testing dry merge:
+hg merge -n
hg merge
hg debugstate --nodates
hg st -q
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-remove.out
--- a/tests/test-merge-remove.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-remove.out Fri May 23 23:26:11 2008 +0200
@@ -1,4 +1,8 @@
created new head
+testing dry merge:
+merging foo1 and foo to foo1
+1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging foo1 and foo to foo1
1 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-revert2
--- a/tests/test-merge-revert2 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-revert2 Fri May 23 23:26:11 2008 +0200
@@ -26,6 +26,8 @@
hg id
hg update -C 0
echo "changed file1 different" >> file1
+echo testing dry update:
+hg update -n
hg update
hg diff --nodates
hg status
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-revert2.out
--- a/tests/test-merge-revert2.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-revert2.out Fri May 23 23:26:11 2008 +0200
@@ -9,6 +9,10 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
f248da0d4c3e tip
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+testing dry update:
+merging file1
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging file1
warning: conflicts during merge.
merging file1 failed!
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-types
--- a/tests/test-merge-types Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-types Fri May 23 23:26:11 2008 +0200
@@ -11,6 +11,8 @@
rm a
ln -s symlink a
hg ci -msymlink # 2
+echo testing dry merge:
+hg merge --debug -n
hg merge --debug
echo % symlink is local parent, executable is other
@@ -25,6 +27,8 @@
fi
hg update -C 1
+echo testing dry merge:
+hg merge --debug -n
hg merge --debug
echo % symlink is other parent, executable is local
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge-types.out
--- a/tests/test-merge-types.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge-types.out Fri May 23 23:26:11 2008 +0200
@@ -1,6 +1,14 @@
adding a
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
+ searching for copies back to rev 1
+ a: update permissions -> e
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite None partial False
ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
@@ -11,6 +19,15 @@
% symlink is local parent, executable is other
a has no flags (default for conflicts)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
+ searching for copies back to rev 1
+ a: remote is newer -> g
+getting a
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite None partial False
ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge1
--- a/tests/test-merge1 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge1 Fri May 23 23:26:11 2008 +0200
@@ -22,6 +22,8 @@
hg commit -m "commit #2" -d "1000000 0"
echo This is file b1 > b
echo %% no merges expected
+echo testing dry merge:
+hg merge -n 1
hg merge 1
hg diff --nodates
hg status
@@ -43,8 +45,12 @@
hg commit -m "commit #2" -d "1000000 0"
echo This is file b2 > b
echo %% merge should fail
+echo testing dry merge:
+hg merge -n 1
hg merge 1
echo %% merge of b expected
+echo testing dry merge:
+hg merge -f -n 1
hg merge -f 1
hg diff --nodates
hg status
@@ -72,8 +78,12 @@
echo This is file b22 > b
echo %% merge fails
+echo testing dry merge:
+hg merge -n 2
hg merge 2
echo %% merge expected!
+echo testing dry merge:
+hg merge -f -n 2
hg merge -f 2
hg diff --nodates
hg status
@@ -96,8 +106,12 @@
hg commit -m "commit #3" -d "1000000 0"
echo This is file b33 > b
echo %% merge of b should fail
+echo testing dry merge:
+hg merge -n 2
hg merge 2
echo %% merge of b expected
+echo testing dry merge:
+hg merge -f -n 2
hg merge -f 2
hg diff --nodates
hg status
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge1.out
--- a/tests/test-merge1.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge1.out Fri May 23 23:26:11 2008 +0200
@@ -1,6 +1,9 @@
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
created new head
%% no merges expected
+testing dry merge:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r d9e5953b9dec b
@@ -12,8 +15,14 @@
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
created new head
%% merge should fail
+testing dry merge:
+abort: untracked file in working directory differs from file in requested revision: 'b'
abort: untracked file in working directory differs from file in requested revision: 'b'
%% merge of b expected
+testing dry merge:
+merging b
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging for b
merging b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
@@ -30,8 +39,13 @@
Contents of b should be "this is file b1"
This is file b1
%% merge fails
+testing dry merge:
+abort: outstanding uncommitted changes
abort: outstanding uncommitted changes
%% merge expected!
+testing dry merge:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r c1dd73cbf59f b
@@ -44,8 +58,14 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
created new head
%% merge of b should fail
+testing dry merge:
+abort: outstanding uncommitted changes
abort: outstanding uncommitted changes
%% merge of b expected
+testing dry merge:
+merging b
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging for b
merging b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge10
--- a/tests/test-merge10 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge10 Fri May 23 23:26:11 2008 +0200
@@ -27,7 +27,11 @@
hg add newdir/beta
hg commit -u test -d '1000000 0' -m local-addition
hg pull ../a
+echo testing dry update:
+hg up -C -n 2
hg up -C 2
+echo testing dry merge:
+hg merge -n
hg merge
hg stat
hg diff --nodates
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge10.out
--- a/tests/test-merge10.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge10.out Fri May 23 23:26:11 2008 +0200
@@ -7,7 +7,14 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry update:
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+testing dry merge:
+merging testdir/subdir/a and testdir/a to testdir/subdir/a
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging testdir/subdir/a and testdir/a to testdir/subdir/a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge6
--- a/tests/test-merge6 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge6 Fri May 23 23:26:11 2008 +0200
@@ -32,6 +32,8 @@
cd A1
hg pull ../B1
+echo testing dry merge:
+hg merge -n
hg merge
hg commit -m "commit test" -d "1000000 0"
echo bar should remain deleted.
@@ -39,6 +41,8 @@
cd ../B2
hg pull ../A2
+echo testing dry merge:
+hg merge -n
hg merge
hg commit -m "commit test" -d "1000000 0"
echo bar should remain deleted.
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge6.out
--- a/tests/test-merge6.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge6.out Fri May 23 23:26:11 2008 +0200
@@ -11,6 +11,9 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
bar should remain deleted.
@@ -22,6 +25,9 @@
adding file changes
added 1 changesets with 0 changes to 0 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
bar should remain deleted.
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge7
--- a/tests/test-merge7 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge7 Fri May 23 23:26:11 2008 +0200
@@ -35,6 +35,8 @@
# now pull and merge from test-a
hg pull ../test-a
+echo testing dry merge:
+hg merge -n
hg merge
# resolve conflict
cat >test.txt <<"EOF"
@@ -57,6 +59,8 @@
# pull and merge from test-a again
cd ../test-b
hg pull ../test-a
+echo testing dry merge:
+hg merge --debug -n
hg merge --debug
cat test.txt
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge7.out
--- a/tests/test-merge7.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge7.out Fri May 23 23:26:11 2008 +0200
@@ -7,6 +7,10 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+merging test.txt
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merging test.txt
warning: conflicts during merge.
merging test.txt failed!
@@ -19,6 +23,18 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
+ searching for copies back to rev 1
+ test.txt: versions differ -> m
+preserving test.txt for resolve of test.txt
+picked tool 'internal:merge' for test.txt (binary False symlink False)
+merging test.txt
+my test.txt at 451c744aabcc+ other test.txt at a070d41e8360 ancestor test.txt at faaea63e63a9
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite None partial False
ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge8
--- a/tests/test-merge8 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge8 Fri May 23 23:26:11 2008 +0200
@@ -16,4 +16,6 @@
hg commit -m b
cd ../b
hg pull ../a
+echo testing dry update:
+hg update -n
hg update
diff -r 170818dad56b -r d8fdee53af22 tests/test-merge8.out
--- a/tests/test-merge8.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-merge8.out Fri May 23 23:26:11 2008 +0200
@@ -7,4 +7,7 @@
adding file changes
added 2 changesets with 2 changes to 1 files
(run 'hg update' to get a working copy)
+testing dry update:
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-after-merge
--- a/tests/test-rename-after-merge Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-after-merge Fri May 23 23:26:11 2008 +0200
@@ -23,6 +23,8 @@
echo % merge repositories
hg pull ../t2
+echo testing dry merge:
+hg merge -n
hg merge
hg st
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-after-merge.out
--- a/tests/test-rename-after-merge.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-after-merge.out Fri May 23 23:26:11 2008 +0200
@@ -13,6 +13,9 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
M b
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-dir-merge
--- a/tests/test-rename-dir-merge Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-dir-merge Fri May 23 23:26:11 2008 +0200
@@ -19,13 +19,19 @@
hg add a/c
hg ci -m "2 add a/c" -d "0 0"
+echo testing dry merge:
+hg merge --debug -n 1
hg merge --debug 1
echo a/* b/*
hg st -C
hg ci -m "3 merge 2+1" -d "0 0"
hg debugrename b/c
+echo testing dry update:
+hg co -C -n 1
hg co -C 1
+echo testing dry merge:
+hg merge --debug -n 2
hg merge --debug 2
echo a/* b/*
hg st -C
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-dir-merge.out
--- a/tests/test-rename-dir-merge.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-dir-merge.out Fri May 23 23:26:11 2008 +0200
@@ -5,6 +5,38 @@
moving a/b to b/b
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
created new head
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
+ searching for copies back to rev 1
+ unmatched files in local:
+ a/c
+ a/d
+ unmatched files in other:
+ b/a
+ b/b
+ all copies found (* = to merge, ! = divergent):
+ b/a -> a/a
+ b/b -> a/b
+ checking for directory renames
+ dir a/ -> b/
+ file a/c -> b/c
+ file a/d -> b/d
+ a/d: remote renamed directory to b/d -> d
+ a/c: remote renamed directory to b/c -> d
+ a/b: other deleted -> r
+ a/a: other deleted -> r
+ b/a: remote created -> g
+ b/b: remote created -> g
+removing a/a
+removing a/b
+moving a/c to b/c
+moving a/d to b/d
+getting b/a
+getting b/b
+4 files updated, 0 files merged, 2 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite None partial False
ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
@@ -46,7 +78,31 @@
R a/c
? b/d
b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
+testing dry update:
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
+ searching for copies back to rev 1
+ unmatched files in local:
+ b/a
+ b/b
+ b/d
+ unmatched files in other:
+ a/c
+ all copies found (* = to merge, ! = divergent):
+ b/a -> a/a
+ b/b -> a/b
+ checking for directory renames
+ dir a/ -> b/
+ file a/c -> b/c
+ None: local renamed directory to b/c -> d
+getting a/c to b/c
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite None partial False
ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-dir-merge2
--- a/tests/test-rename-dir-merge2 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-dir-merge2 Fri May 23 23:26:11 2008 +0200
@@ -23,6 +23,8 @@
hg ci -m "a/aa/g"
hg pull ../r2
+echo testing dry merge:
+hg merge -n
hg merge
hg st -C
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-dir-merge2.out
--- a/tests/test-rename-dir-merge2.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-dir-merge2.out Fri May 23 23:26:11 2008 +0200
@@ -10,6 +10,9 @@
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+testing dry merge:
+2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
M b/f
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-merge1
--- a/tests/test-rename-merge1 Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-merge1 Fri May 23 23:26:11 2008 +0200
@@ -18,6 +18,8 @@
echo blahblah > a2
hg mv a2 c2
hg ci -m "modify" -d "0 0"
+echo testing dry merge:
+hg merge -y --debug -n
echo "merge"
hg merge -y --debug
hg status -AC
diff -r 170818dad56b -r d8fdee53af22 tests/test-rename-merge1.out
--- a/tests/test-rename-merge1.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-rename-merge1.out Fri May 23 23:26:11 2008 +0200
@@ -1,6 +1,35 @@
checkout
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
created new head
+testing dry merge:
+resolving manifests
+ overwrite None partial False
+ ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
+ searching for copies back to rev 1
+ unmatched files in local:
+ c2
+ unmatched files in other:
+ b
+ b2
+ all copies found (* = to merge, ! = divergent):
+ c2 -> a2 !
+ b -> a *
+ b2 -> a2 !
+ checking for directory renames
+ a2: divergent renames -> dr
+ a: remote moved to b -> m
+ b2: remote created -> g
+preserving a for resolve of b
+removing a
+picked tool 'internal:merge' for b (binary False symlink False)
+merging a and b to b
+my b at f26ec4fc3fa3+ other b at 8e765a822af2 ancestor a at af1939970a1c
+warning: detected divergent renames of a2 to:
+ c2
+ b2
+getting b2
+1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
merge
resolving manifests
overwrite None partial False
diff -r 170818dad56b -r d8fdee53af22 tests/test-up-local-change
--- a/tests/test-up-local-change Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-up-local-change Fri May 23 23:26:11 2008 +0200
@@ -12,6 +12,8 @@
hg clone . ../r2
cd ../r2
+echo testing dry update:
+hg up -n
hg up
echo abc > a
hg diff --nodates
@@ -26,12 +28,18 @@
hg -q pull ../r1
hg status
hg parents
+echo testing dry update:
+hg --debug up -n
hg --debug up
hg parents
+echo testing dry update:
+hg --debug up -n 0
hg --debug up 0
hg parents
hg --debug merge || echo failed
hg parents
+echo testing dry update:
+hg --debug up -n
hg --debug up
hg parents
hg -v history
@@ -39,6 +47,8 @@
# create a second head
cd ../r1
+echo testing dry update:
+hg up -n 0
hg up 0
echo b2 > b
echo a3 > a
@@ -51,6 +61,8 @@
hg parents
hg --debug up || echo failed
hg --debug merge || echo failed
+echo testing dry merge:
+hg --debug merge -f -n
hg --debug merge -f
hg parents
hg diff --nodates
diff -r 170818dad56b -r d8fdee53af22 tests/test-up-local-change.out
--- a/tests/test-up-local-change.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-up-local-change.out Fri May 23 23:26:11 2008 +0200
@@ -1,6 +1,9 @@
adding a
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+testing dry update:
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
diff -r 33aaa84a386b a
--- a/a
@@ -15,6 +18,22 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 1
+testing dry update:
+resolving manifests
+ overwrite False partial False
+ ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
+ searching for copies back to rev 1
+ unmatched files in other:
+ b
+ a: versions differ -> m
+ b: remote created -> g
+preserving a for resolve of a
+picked tool 'true' for a (binary False symlink False)
+merging a
+my a at 33aaa84a386b+ other a at 802f095af299 ancestor a at 33aaa84a386b
+getting b
+1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite False partial False
ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
@@ -35,6 +54,14 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 2
+testing dry update:
+resolving manifests
+ overwrite False partial False
+ ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
+ b: remote deleted -> r
+removing b
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite False partial False
ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
@@ -53,6 +80,22 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 1
+testing dry update:
+resolving manifests
+ overwrite False partial False
+ ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
+ searching for copies back to rev 1
+ unmatched files in other:
+ b
+ a: versions differ -> m
+ b: remote created -> g
+preserving a for resolve of a
+picked tool 'true' for a (binary False symlink False)
+merging a
+my a at 33aaa84a386b+ other a at 802f095af299 ancestor a at 33aaa84a386b
+getting b
+1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite False partial False
ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
@@ -96,6 +139,9 @@
@@ -1,1 +1,1 @@
-a2
+abc
+testing dry update:
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
adding b
created new head
@@ -109,6 +155,23 @@
failed
abort: outstanding uncommitted changes
failed
+testing dry merge:
+resolving manifests
+ overwrite False partial False
+ ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
+ searching for copies back to rev 1
+ a: versions differ -> m
+ b: versions differ -> m
+preserving a for resolve of a
+preserving b for resolve of b
+picked tool 'true' for a (binary False symlink False)
+merging a
+my a at 802f095af299+ other a at 030602aee63d ancestor a at 33aaa84a386b
+picked tool 'true' for b (binary False symlink False)
+merging b
+my b at 802f095af299+ other b at 030602aee63d ancestor b at 000000000000
+0 files updated, 2 files merged, 0 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
resolving manifests
overwrite False partial False
ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
diff -r 170818dad56b -r d8fdee53af22 tests/test-update-reverse
--- a/tests/test-update-reverse Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-update-reverse Fri May 23 23:26:11 2008 +0200
@@ -25,6 +25,9 @@
echo Should have two heads, side2 and main
hg heads
+echo testing dry update:
+hg update --debug -C -n 1
+
echo Should show "a side1 side2"
ls
diff -r 170818dad56b -r d8fdee53af22 tests/test-update-reverse.out
--- a/tests/test-update-reverse.out Mon May 19 10:23:47 2008 +0200
+++ b/tests/test-update-reverse.out Fri May 23 23:26:11 2008 +0200
@@ -36,6 +36,18 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: Added main
+testing dry update:
+resolving manifests
+ overwrite True partial False
+ ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
+ side2: remote deleted -> r
+ side1: remote deleted -> r
+ main: remote created -> g
+getting main
+removing side1
+removing side2
+1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+(this was a dry run, no actions were performed)
Should show a side1 side2
a
side1
More information about the Mercurial-devel
mailing list