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.
--- 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:
--- a/tests/test-obsolete-changeset-exchange.t Tue Jan 29 16:44:51 2013 +0100
+++ b/tests/test-obsolete-changeset-exchange.t Tue Jan 29 15:26:10 2013 +0100
@@ -53,3 +53,23 @@
crosschecking files in changesets and manifests
checking files
2 files, 2 changesets, 2 total revisions
+
+Adding a changeset going extinct locally
+------------------------------------------
+
+Pull a changeset that will immediatly goes extinct (because you already have a
+marker to obsolete him)
+(test resolution of issue3788)
+
+ $ hg phase --draft --force f89bcc95eba5
+ $ hg phase -R ../other --draft --force f89bcc95eba5
+ $ hg commit --amend -m "A''"
+ $ hg --hidden --config extensions.mq= strip --no-backup f89bcc95eba5
+ $ hg pull ../other
+ pulling from ../other
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 0 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)