# HG changeset patch # User Pierre-Yves David # Date 1349710867 -7200 # Node ID 2e30972d859db3ce485a39baa3d0467b4e6e754a # Parent aba3c161bcc606b59ca82c4cae7172b567784698 clfilter: unfilter some parts of the push logic Computation of common changesets during push needs to be done on the widest set possible. An unfiltered version of the repo is kept for discovery and various revset calls. The discovery code itself enforces the filtering of unserved outgoing changeset. diff -r aba3c161bcc6 -r 2e30972d859d mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Oct 08 17:15:08 2012 +0200 +++ b/mercurial/localrepo.py Mon Oct 08 17:41:07 2012 +0200 @@ -1869,25 +1869,26 @@ if not unbundle: lock = remote.lock() try: + unfi = self.unfiltered() # discovery fci = discovery.findcommonincoming - commoninc = fci(self, remote, force=force) + commoninc = fci(unfi, remote, force=force) common, inc, remoteheads = commoninc fco = discovery.findcommonoutgoing - outgoing = fco(self, remote, onlyheads=revs, + outgoing = fco(unfi, remote, onlyheads=revs, commoninc=commoninc, force=force) if not outgoing.missing: # nothing to push - scmutil.nochangesfound(self.ui, self, outgoing.excluded) + scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded) ret = None else: # something to push if not force: # if self.obsstore == False --> no obsolete # then, save the iteration - if self.obsstore: + if unfi.obsstore: # this message are here for 80 char limit reason mso = _("push includes obsolete changeset: %s!") msu = _("push includes unstable changeset: %s!") @@ -1897,14 +1898,14 @@ # least one of the missinghead will be obsolete or # unstable. So checking heads only is ok for node in outgoing.missingheads: - ctx = self[node] + ctx = unfi[node] if ctx.obsolete(): raise util.Abort(mso % ctx) elif ctx.unstable(): raise util.Abort(msu % ctx) elif ctx.bumped(): raise util.Abort(msb % ctx) - discovery.checkheads(self, remote, outgoing, + discovery.checkheads(unfi, remote, outgoing, remoteheads, newbranch, bool(inc)) @@ -1957,7 +1958,7 @@ cheads = [node for node in revs if node in common] # and # * commonheads parents on missing - revset = self.set('%ln and parents(roots(%ln))', + revset = unfi.set('%ln and parents(roots(%ln))', outgoing.commonheads, outgoing.missing) cheads.extend(c.node() for c in revset) @@ -1980,7 +1981,7 @@ # Get the list of all revs draft on remote by public here. # XXX Beware that revset break if droots is not strictly # XXX root we may want to ensure it is but it is costly - outdated = self.set('heads((%ln::%ln) and public())', + outdated = unfi.set('heads((%ln::%ln) and public())', droots, cheads) for newremotehead in outdated: r = remote.pushkey('phases',