comparison mercurial/localrepo.py @ 10772:1e819576e926 stable

push: refactor and optimize prepush
author Sune Foldager <cryo@cyanite.org>
date Fri, 26 Mar 2010 17:02:49 +0100
parents 01f097c4ae66
children bd36e5c0ccb1 60b42f318a6d
comparison
equal deleted inserted replaced
10771:01f097c4ae66 10772:1e819576e926
1501 inc = self.findincoming(remote, common, remote_heads, force=force) 1501 inc = self.findincoming(remote, common, remote_heads, force=force)
1502 1502
1503 update, updated_heads = self.findoutgoing(remote, common, remote_heads) 1503 update, updated_heads = self.findoutgoing(remote, common, remote_heads)
1504 msng_cl, bases, heads = self.changelog.nodesbetween(update, revs) 1504 msng_cl, bases, heads = self.changelog.nodesbetween(update, revs)
1505 1505
1506 def checkbranch(lheads, rheads, updatelb, branchname=None): 1506 def checkbranch(lheads, rheads, branchname=None):
1507 ''' 1507 '''
1508 check whether there are more local heads than remote heads on 1508 check whether there are more local heads than remote heads on
1509 a specific branch. 1509 a specific branch.
1510 1510
1511 lheads: local branch heads 1511 lheads: local branch heads
1512 rheads: remote branch heads 1512 rheads: remote branch heads
1513 updatelb: outgoing local branch bases
1514 ''' 1513 '''
1515 1514
1516 warn = 0 1515 warn = 0
1517 1516
1518 if not revs and len(lheads) > len(rheads): 1517 if len(lheads) > len(rheads):
1519 warn = 1 1518 warn = 1
1520 else: 1519 else:
1521 # add local heads involved in the push
1522 updatelheads = [self.changelog.heads(x, lheads)
1523 for x in updatelb]
1524 newheads = set(sum(updatelheads, [])) & set(lheads)
1525
1526 if not newheads:
1527 return True
1528
1529 # add heads we don't have or that are not involved in the push 1520 # add heads we don't have or that are not involved in the push
1521 newheads = set(lheads)
1530 for r in rheads: 1522 for r in rheads:
1531 if r in self.changelog.nodemap: 1523 if r in self.changelog.nodemap:
1532 desc = self.changelog.heads(r, heads) 1524 desc = self.changelog.heads(r, heads)
1533 l = [h for h in heads if h in desc] 1525 l = [h for h in heads if h in desc]
1534 if not l: 1526 if not l:
1588 self.ui.status(_("(use 'hg push -f' to force)\n")) 1580 self.ui.status(_("(use 'hg push -f' to force)\n"))
1589 return None, 0 1581 return None, 0
1590 for branch, lheads in localbrheads.iteritems(): 1582 for branch, lheads in localbrheads.iteritems():
1591 if branch in remotebrheads: 1583 if branch in remotebrheads:
1592 rheads = remotebrheads[branch] 1584 rheads = remotebrheads[branch]
1593 if not checkbranch(lheads, rheads, update, branch): 1585 if not checkbranch(lheads, rheads, branch):
1594 return None, 0 1586 return None, 0
1595 else: 1587 else:
1596 if not checkbranch(heads, remote_heads, update): 1588 if not checkbranch(heads, remote_heads):
1597 return None, 0 1589 return None, 0
1598 1590
1599 if inc: 1591 if inc:
1600 self.ui.warn(_("note: unsynced remote changes!\n")) 1592 self.ui.warn(_("note: unsynced remote changes!\n"))
1601 1593