# HG changeset patch # User Matt Mackall # Date 1156281809 18000 # Node ID 33dcf03ef45f9eaadb27cae9b37a188a00fa0898 # Parent fa9c769fee8a043c39514c94576a4e6a2f3ec08f merge: hoist partial code out of manifest loops diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -79,7 +79,7 @@ def update(repo, node, branchmerge=False raise util.Abort(_("there is nothing to merge, just use " "'hg update' or look at 'hg heads'")) - if not overwrite and not linear_path and not branchmerge: + if not linear_path and not (overwrite or branchmerge): raise util.Abort(_("update spans branches, use 'hg merge' " "or 'hg update -C' to lose changes")) @@ -140,10 +140,14 @@ def update(repo, node, branchmerge=False if linear_path and f not in m2: forget.append(f) + if partial: + for f in mw.keys(): + if not partial(f): del mw[f] + for f in m2.keys(): + if not partial(f): del m2[f] + # Compare manifests for f, n in mw.iteritems(): - if partial and not partial(f): - continue if f in m2: queued = 0 @@ -205,8 +209,6 @@ def update(repo, node, branchmerge=False repo.ui.debug(_("working dir created %s, keeping\n") % f) for f, n in m2.iteritems(): - if partial and not partial(f): - continue if f[0] == "/": continue if f in ma and n != ma[f]: