diff -r d2217df3a7cf -r 1f08ecc7febb mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Jul 26 16:41:42 2012 +0200 +++ b/mercurial/localrepo.py Fri Jul 27 18:32:56 2012 +0200 @@ -1785,11 +1785,13 @@ self.ui.debug('fetching remote obsolete markers') remoteobs = remote.listkeys('obsolete') - if 'dump' in remoteobs: + if 'dump0' in remoteobs: if tr is None: tr = self.transaction(trname) - data = base85.b85decode(remoteobs['dump']) - self.obsstore.mergemarkers(tr, data) + for key in sorted(remoteobs, reverse=True): + if key.startswith('dump'): + data = base85.b85decode(remoteobs[key]) + self.obsstore.mergemarkers(tr, data) if tr is not None: tr.close() finally: @@ -1955,10 +1957,15 @@ self.ui.debug('try to push obsolete markers to remote\n') if (self.obsstore and 'obsolete' in remote.listkeys('namespaces')): - data = self.listkeys('obsolete')['dump'] - r = remote.pushkey('obsolete', 'dump', '', data) - if not r: - self.ui.warn(_('failed to push obsolete markers!\n')) + rslts = [] + remotedata = self.listkeys('obsolete') + for key in sorted(remotedata, reverse=True): + # reverse sort to ensure we end with dump0 + data = remotedata[key] + rslts.append(remote.pushkey('obsolete', key, '', data)) + if [r for r in rslts if not r]: + msg = _('failed to push some obsolete markers!\n') + self.ui.warn(msg) finally: if lock is not None: lock.release()