5 # This software may be used and distributed according to the terms of the |
5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. |
6 # GNU General Public License version 2 or any later version. |
7 |
7 |
8 from node import nullid, nullrev, hex, bin |
8 from node import nullid, nullrev, hex, bin |
9 from i18n import _ |
9 from i18n import _ |
|
10 from mercurial import obsolete |
10 import error, util, filemerge, copies, subrepo, worker, dicthelpers |
11 import error, util, filemerge, copies, subrepo, worker, dicthelpers |
11 import errno, os, shutil |
12 import errno, os, shutil |
12 |
13 |
13 class mergestate(object): |
14 class mergestate(object): |
14 '''track 3-way merge state of individual files''' |
15 '''track 3-way merge state of individual files''' |
695 if wc.sub(s).dirty(): |
696 if wc.sub(s).dirty(): |
696 raise util.Abort(_("outstanding uncommitted changes in " |
697 raise util.Abort(_("outstanding uncommitted changes in " |
697 "subrepository '%s'") % s) |
698 "subrepository '%s'") % s) |
698 |
699 |
699 elif not overwrite: |
700 elif not overwrite: |
700 if pa == p1 or pa == p2: # linear |
701 if pa not in (p1, p2): # nolinear |
701 pass # all good |
702 dirty = wc.dirty(missing=True) |
702 elif wc.dirty(missing=True): |
703 if dirty or onode is None: |
703 raise util.Abort(_("crosses branches (merge branches or use" |
704 # Branching is a bit strange to ensure we do the minimal |
704 " --clean to discard changes)")) |
705 # amount of call to obsolete.background. |
705 elif onode is None: |
706 foreground = obsolete.foreground(repo, [p1.node()]) |
706 raise util.Abort(_("crosses branches (merge branches or update" |
707 # note: the <node> variable contains a random identifier |
707 " --check to force update)")) |
708 if repo[node].node() in foreground: |
708 else: |
709 pa = p1 # allow updating to successors |
709 # Allow jumping branches if clean and specific rev given |
710 elif dirty: |
710 pa = p1 |
711 msg = _("crosses branches (merge branches or use" |
|
712 " --clean to discard changes)") |
|
713 raise util.Abort(msg) |
|
714 else: # node is none |
|
715 msg = _("crosses branches (merge branches or update" |
|
716 " --check to force update)") |
|
717 raise util.Abort(msg) |
|
718 else: |
|
719 # Allow jumping branches if clean and specific rev given |
|
720 pa = p1 |
711 |
721 |
712 ### calculate phase |
722 ### calculate phase |
713 actions = calculateupdates(repo, wc, p2, pa, |
723 actions = calculateupdates(repo, wc, p2, pa, |
714 branchmerge, force, partial, mergeancestor) |
724 branchmerge, force, partial, mergeancestor) |
715 |
725 |