Mercurial > public > mercurial-scm > hg
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() |