Mercurial > public > mercurial-scm > hg
diff mercurial/localrepo.py @ 17139:ad1b5e070f16
merge with main
author | Martin Geisler <mg@aragost.com> |
---|---|
date | Thu, 12 Jul 2012 10:03:50 +0200 |
parents | b090601a80d1 8fa8717b47b6 |
children | 7034365089bf |
line wrap: on
line diff
--- a/mercurial/localrepo.py Wed Jul 11 15:39:00 2012 -0700 +++ b/mercurial/localrepo.py Thu Jul 12 10:03:50 2012 +0200 @@ -197,10 +197,7 @@ @storecache('obsstore') def obsstore(self): - store = obsolete.obsstore() - data = self.sopener.tryread('obsstore') - if data: - store.loadmarkers(data) + store = obsolete.obsstore(self.sopener) return store @storecache('00changelog.i') @@ -994,16 +991,6 @@ self.store.write() if '_phasecache' in vars(self): self._phasecache.write() - if 'obsstore' in vars(self) and self.obsstore._new: - # XXX: transaction logic should be used here. But for - # now rewriting the whole file is good enough. - f = self.sopener('obsstore', 'wb', atomictemp=True) - try: - self.obsstore.flushmarkers(f) - f.close() - except: # re-raises - f.discard() - raise for k, ce in self._filecache.items(): if k == 'dirstate': continue @@ -1622,6 +1609,10 @@ return r def pull(self, remote, heads=None, force=False): + # don't open transaction for nothing or you break future useful + # rollback call + tr = None + trname = 'pull\n' + util.hidepassword(remote.url()) lock = self.lock() try: tmp = discovery.findcommonincoming(self, remote, heads=heads, @@ -1632,6 +1623,7 @@ added = [] result = 0 else: + tr = self.transaction(trname) if heads is None and list(common) == [nullid]: self.ui.status(_("requesting all changes\n")) elif heads is None and remote.capable('changegroupsubset'): @@ -1680,9 +1672,15 @@ remoteobs = remote.listkeys('obsolete') if 'dump' in remoteobs: + if tr is None: + tr = self.transaction(trname) data = base85.b85decode(remoteobs['dump']) - self.obsstore.mergemarkers(data) + self.obsstore.mergemarkers(tr, data) + if tr is not None: + tr.close() finally: + if tr is not None: + tr.release() lock.release() return result @@ -1823,9 +1821,8 @@ self.ui.warn(_('updating %s to public failed!\n') % newremotehead) if 'obsolete' in self.listkeys('namespaces') and self.obsstore: - data = self.obsstore._writemarkers() - r = remote.pushkey('obsolete', 'dump', '', - base85.b85encode(data)) + data = self.listkeys('obsolete')['dump'] + r = remote.pushkey('obsolete', 'dump', '', data) if not r: self.ui.warn(_('failed to push obsolete markers!\n')) finally: