comparison 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
comparison
equal deleted inserted replaced
17138:528cb91a90ee 17139:ad1b5e070f16
195 def _phasecache(self): 195 def _phasecache(self):
196 return phases.phasecache(self, self._phasedefaults) 196 return phases.phasecache(self, self._phasedefaults)
197 197
198 @storecache('obsstore') 198 @storecache('obsstore')
199 def obsstore(self): 199 def obsstore(self):
200 store = obsolete.obsstore() 200 store = obsolete.obsstore(self.sopener)
201 data = self.sopener.tryread('obsstore')
202 if data:
203 store.loadmarkers(data)
204 return store 201 return store
205 202
206 @storecache('00changelog.i') 203 @storecache('00changelog.i')
207 def changelog(self): 204 def changelog(self):
208 c = changelog.changelog(self.sopener) 205 c = changelog.changelog(self.sopener)
992 989
993 def unlock(): 990 def unlock():
994 self.store.write() 991 self.store.write()
995 if '_phasecache' in vars(self): 992 if '_phasecache' in vars(self):
996 self._phasecache.write() 993 self._phasecache.write()
997 if 'obsstore' in vars(self) and self.obsstore._new:
998 # XXX: transaction logic should be used here. But for
999 # now rewriting the whole file is good enough.
1000 f = self.sopener('obsstore', 'wb', atomictemp=True)
1001 try:
1002 self.obsstore.flushmarkers(f)
1003 f.close()
1004 except: # re-raises
1005 f.discard()
1006 raise
1007 for k, ce in self._filecache.items(): 994 for k, ce in self._filecache.items():
1008 if k == 'dirstate': 995 if k == 'dirstate':
1009 continue 996 continue
1010 ce.refresh() 997 ce.refresh()
1011 998
1620 r.append(l) 1607 r.append(l)
1621 1608
1622 return r 1609 return r
1623 1610
1624 def pull(self, remote, heads=None, force=False): 1611 def pull(self, remote, heads=None, force=False):
1612 # don't open transaction for nothing or you break future useful
1613 # rollback call
1614 tr = None
1615 trname = 'pull\n' + util.hidepassword(remote.url())
1625 lock = self.lock() 1616 lock = self.lock()
1626 try: 1617 try:
1627 tmp = discovery.findcommonincoming(self, remote, heads=heads, 1618 tmp = discovery.findcommonincoming(self, remote, heads=heads,
1628 force=force) 1619 force=force)
1629 common, fetch, rheads = tmp 1620 common, fetch, rheads = tmp
1630 if not fetch: 1621 if not fetch:
1631 self.ui.status(_("no changes found\n")) 1622 self.ui.status(_("no changes found\n"))
1632 added = [] 1623 added = []
1633 result = 0 1624 result = 0
1634 else: 1625 else:
1626 tr = self.transaction(trname)
1635 if heads is None and list(common) == [nullid]: 1627 if heads is None and list(common) == [nullid]:
1636 self.ui.status(_("requesting all changes\n")) 1628 self.ui.status(_("requesting all changes\n"))
1637 elif heads is None and remote.capable('changegroupsubset'): 1629 elif heads is None and remote.capable('changegroupsubset'):
1638 # issue1320, avoid a race if remote changed after discovery 1630 # issue1320, avoid a race if remote changed after discovery
1639 heads = rheads 1631 heads = rheads
1678 # should be seen as public 1670 # should be seen as public
1679 phases.advanceboundary(self, phases.public, subset) 1671 phases.advanceboundary(self, phases.public, subset)
1680 1672
1681 remoteobs = remote.listkeys('obsolete') 1673 remoteobs = remote.listkeys('obsolete')
1682 if 'dump' in remoteobs: 1674 if 'dump' in remoteobs:
1675 if tr is None:
1676 tr = self.transaction(trname)
1683 data = base85.b85decode(remoteobs['dump']) 1677 data = base85.b85decode(remoteobs['dump'])
1684 self.obsstore.mergemarkers(data) 1678 self.obsstore.mergemarkers(tr, data)
1679 if tr is not None:
1680 tr.close()
1685 finally: 1681 finally:
1682 if tr is not None:
1683 tr.release()
1686 lock.release() 1684 lock.release()
1687 1685
1688 return result 1686 return result
1689 1687
1690 def checkpush(self, force, revs): 1688 def checkpush(self, force, revs):
1821 str(phases.public)) 1819 str(phases.public))
1822 if not r: 1820 if not r:
1823 self.ui.warn(_('updating %s to public failed!\n') 1821 self.ui.warn(_('updating %s to public failed!\n')
1824 % newremotehead) 1822 % newremotehead)
1825 if 'obsolete' in self.listkeys('namespaces') and self.obsstore: 1823 if 'obsolete' in self.listkeys('namespaces') and self.obsstore:
1826 data = self.obsstore._writemarkers() 1824 data = self.listkeys('obsolete')['dump']
1827 r = remote.pushkey('obsolete', 'dump', '', 1825 r = remote.pushkey('obsolete', 'dump', '', data)
1828 base85.b85encode(data))
1829 if not r: 1826 if not r:
1830 self.ui.warn(_('failed to push obsolete markers!\n')) 1827 self.ui.warn(_('failed to push obsolete markers!\n'))
1831 finally: 1828 finally:
1832 if lock is not None: 1829 if lock is not None:
1833 lock.release() 1830 lock.release()