##// END OF EJS Templates
destupdate: move the check related to the "clean" logic in the function...
Pierre-Yves David -
r26628:45b86dba default
parent child Browse files
Show More
@@ -20,7 +20,7 b' import merge as mergemod'
20 20 import minirst, revset, fileset
21 21 import dagparser, context, simplemerge, graphmod, copies
22 22 import random, operator
23 import setdiscovery, treediscovery, dagutil, pvec, localrepo
23 import setdiscovery, treediscovery, dagutil, pvec, localrepo, destutil
24 24 import phases, obsolete, exchange, bundle2, repair, lock as lockmod
25 25 import ui as uimod
26 26
@@ -6597,6 +6597,8 b' def update(ui, repo, node=None, rev=None'
6597 6597 cmdutil.bailifchanged(repo, merge=False)
6598 6598 if rev is None:
6599 6599 rev = repo[repo[None].branch()].rev()
6600 elif rev is None:
6601 rev = destutil.destupdate(repo, clean=clean)
6600 6602
6601 6603 repo.ui.setconfig('ui', 'forcemerge', tool, 'update')
6602 6604
@@ -11,7 +11,7 b' from . import ('
11 11 obsolete,
12 12 )
13 13
14 def destupdate(repo):
14 def destupdate(repo, clean=False):
15 15 """destination for bare update operation
16 16 """
17 17 # Here is where we should consider bookmarks, divergent bookmarks, and tip
@@ -52,4 +52,28 b' def destupdate(repo):'
52 52 # get the max revision for the given successors set,
53 53 # i.e. the 'tip' of a set
54 54 node = repo.revs('max(%ln)', successors).first()
55 return repo[node].rev()
55 rev = repo[node].rev()
56
57 if not clean:
58 # Check that the update is linear.
59 #
60 # Mercurial do not allow update-merge for non linear pattern
61 # (that would be technically possible but was considered too confusing
62 # for user a long time ago)
63 #
64 # See mercurial.merge.update for details
65 if p1.rev() not in repo.changelog.ancestors([rev], inclusive=True):
66 dirty = wc.dirty(missing=True)
67 foreground = obsolete.foreground(repo, [p1.node()])
68 if not repo[rev].node() in foreground:
69 if dirty:
70 msg = _("uncommitted changes")
71 hint = _("commit and merge, or update --clean to"
72 " discard changes")
73 raise error.Abort(msg, hint=hint)
74 else: # destination is not a descendant.
75 msg = _("not a linear update")
76 hint = _("merge or update --check to force update")
77 raise error.Abort(msg, hint=hint)
78
79 return rev
General Comments 0
You need to be logged in to leave comments. Login now