comparison mercurial/localrepo.py @ 15650:5b26667fc4d3

phases: exchange phase boundaries on pull Add an extra argument to addchangegroup to all phase code to execute before the lock is released.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Thu, 15 Dec 2011 11:28:42 +0100
parents 218ec96c45d7
children e69a3cdad37e
comparison
equal deleted inserted replaced
15649:ca7c4254a21a 15650:5b26667fc4d3
1505 tmp = discovery.findcommonincoming(self, remote, heads=heads, 1505 tmp = discovery.findcommonincoming(self, remote, heads=heads,
1506 force=force) 1506 force=force)
1507 common, fetch, rheads = tmp 1507 common, fetch, rheads = tmp
1508 if not fetch: 1508 if not fetch:
1509 self.ui.status(_("no changes found\n")) 1509 self.ui.status(_("no changes found\n"))
1510 added = []
1510 result = 0 1511 result = 0
1511 else: 1512 else:
1512 if heads is None and list(common) == [nullid]: 1513 if heads is None and list(common) == [nullid]:
1513 self.ui.status(_("requesting all changes\n")) 1514 self.ui.status(_("requesting all changes\n"))
1514 elif heads is None and remote.capable('changegroupsubset'): 1515 elif heads is None and remote.capable('changegroupsubset'):
1524 raise util.Abort(_("partial pull cannot be done because " 1525 raise util.Abort(_("partial pull cannot be done because "
1525 "other repository doesn't support " 1526 "other repository doesn't support "
1526 "changegroupsubset.")) 1527 "changegroupsubset."))
1527 else: 1528 else:
1528 cg = remote.changegroupsubset(fetch, heads, 'pull') 1529 cg = remote.changegroupsubset(fetch, heads, 'pull')
1530 clstart = len(self.changelog)
1529 result = self.addchangegroup(cg, 'pull', remote.url()) 1531 result = self.addchangegroup(cg, 'pull', remote.url())
1530 phases.advanceboundary(self, 0, common) 1532 clend = len(self.changelog)
1533 added = [self.changelog.node(r) for r in xrange(clstart, clend)]
1534
1535
1536 # Get remote phases data from remote
1537 remotephases = remote.listkeys('phases')
1538 publishing = bool(remotephases.get('publishing', False))
1539 if remotephases and not publishing:
1540 # remote is new and unpublishing
1541 subset = common + added
1542 rheads, rroots = phases.analyzeremotephases(self, subset,
1543 remotephases)
1544 for phase, boundary in enumerate(rheads):
1545 phases.advanceboundary(self, phase, boundary)
1546 else:
1547 # Remote is old or publishing all common changesets
1548 # should be seen as public
1549 phases.advanceboundary(self, 0, common + added)
1531 finally: 1550 finally:
1532 lock.release() 1551 lock.release()
1533 1552
1534 return result 1553 return result
1535 1554