# HG changeset patch # User Thomas Arendsen Hein # Date 1183704508 -7200 # Node ID b68b250f95372a536052211fc487ebe4b6cf2357 # Parent 8706e75e6431dea156074c5f86e175b2795f25b2# Parent 4da2149b63a111189e71acdfeeb0a4c5a2f76dfc merge with crew-stable diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -40,6 +40,9 @@ class changectx(object): except AttributeError: return False + def __ne__(self, other): + return not (self == other) + def __nonzero__(self): return self._rev != nullrev @@ -185,6 +188,9 @@ class filectx(object): except AttributeError: return False + def __ne__(self, other): + return not (self == other) + def filectx(self, fileid): '''opens an arbitrary revision of the file without opening a new filelog''' diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -478,6 +478,9 @@ def recordupdates(repo, action, branchme repo.dirstate.forget([f]) elif m == "d": # directory rename f2, fd, flag = a[2:] + if not f2 and f not in repo.dirstate: + # untracked file moved + continue if branchmerge: repo.dirstate.update([fd], 'a') if f: @@ -523,7 +526,7 @@ def update(repo, node, branchmerge, forc raise util.Abort(_("outstanding uncommitted merges")) if pa == p1 or pa == p2: # is there a linear path from p1 to p2? if branchmerge: - if p1.branch() != p2.branch(): + if p1.branch() != p2.branch() and pa != p2: fastforward = True else: raise util.Abort(_("there is nothing to merge, just use " diff --git a/tests/test-issue612 b/tests/test-issue612 new file mode 100755 --- /dev/null +++ b/tests/test-issue612 @@ -0,0 +1,24 @@ +#!/bin/sh + +mkdir t +cd t + +hg init +mkdir src +echo a > src/a.c +hg ci -Ama -d "10000000 0" + +hg mv src source +hg ci -Ammove -d "1000000 0" + +hg co -C 0 +echo new > src/a.c +echo compiled > src/a.o +hg ci -mupdate -d "1000000 0" + +hg st + +hg merge + +hg st + diff --git a/tests/test-issue612.out b/tests/test-issue612.out new file mode 100644 --- /dev/null +++ b/tests/test-issue612.out @@ -0,0 +1,11 @@ +adding src/a.c +copying src/a.c to source/a.c +removing src/a.c +1 files updated, 0 files merged, 1 files removed, 0 files unresolved +? src/a.o +merging src/a.c and source/a.c +1 files updated, 1 files merged, 0 files removed, 0 files unresolved +(branch merge, don't forget to commit) +M source/a.c +R src/a.c +? source/a.o diff --git a/tests/test-issue619 b/tests/test-issue619 new file mode 100755 --- /dev/null +++ b/tests/test-issue619 @@ -0,0 +1,20 @@ +#!/bin/sh + +mkdir t +cd t +hg init +echo a > a +hg ci -Ama -d '1000000000 0' +echo b > b +hg branch b +hg ci -Amb -d '1000000000 0' +hg co -C 0 + +echo fast-forward +hg merge b +hg ci -Ammerge -d '1000000000 0' + +echo bogus fast-forward should fail +hg merge b + +echo done diff --git a/tests/test-issue619.out b/tests/test-issue619.out new file mode 100644 --- /dev/null +++ b/tests/test-issue619.out @@ -0,0 +1,10 @@ +adding a +marked working directory as branch b +adding b +0 files updated, 0 files merged, 1 files removed, 0 files unresolved +fast-forward +1 files updated, 0 files merged, 0 files removed, 0 files unresolved +(branch merge, don't forget to commit) +bogus fast-forward should fail +abort: there is nothing to merge, just use 'hg update' or look at 'hg heads' +done