diff mercurial/localrepo.py @ 18498:4d9f7dd2ac82 stable

pull: fix crash when pulling changeset that get hidden locally (issue3788) When you have obsolescence marker that apply to a pulled changesets, the added changeset is immediately filtered. Then the list of added changeset needs to be build against and unfiltered repo.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 29 Jan 2013 15:26:10 +0100
parents f009804e2a43
children 751135cca13c
line wrap: on
line diff
--- a/mercurial/localrepo.py	Tue Jan 29 16:44:51 2013 +0100
+++ b/mercurial/localrepo.py	Tue Jan 29 15:26:10 2013 +0100
@@ -1688,10 +1688,14 @@
                                            "changegroupsubset."))
                 else:
                     cg = remote.changegroupsubset(fetch, heads, 'pull')
-                clstart = len(self.changelog)
+                # we use unfiltered changelog here because hidden revision must
+                # be taken in account for phase synchronization. They may
+                # becomes public and becomes visible again.
+                cl = self.unfiltered().changelog
+                clstart = len(cl)
                 result = self.addchangegroup(cg, 'pull', remote.url())
-                clend = len(self.changelog)
-                added = [self.changelog.node(r) for r in xrange(clstart, clend)]
+                clend = len(cl)
+                added = [cl.node(r) for r in xrange(clstart, clend)]
 
             # compute target subset
             if heads is None: