1517 inc = self.findincoming(remote, common, remote_heads, force=force) |
1517 inc = self.findincoming(remote, common, remote_heads, force=force) |
1518 |
1518 |
1519 update, updated_heads = self.findoutgoing(remote, common, remote_heads) |
1519 update, updated_heads = self.findoutgoing(remote, common, remote_heads) |
1520 msng_cl, bases, heads = self.changelog.nodesbetween(update, revs) |
1520 msng_cl, bases, heads = self.changelog.nodesbetween(update, revs) |
1521 |
1521 |
1522 def checkbranch(lheads, rheads, branchname=None): |
1522 def checkbranch(lheads, rheads, lheadcnt, branchname=None): |
1523 ''' |
1523 ''' |
1524 check whether there are more local heads than remote heads on |
1524 check whether there are more local heads than remote heads on |
1525 a specific branch. |
1525 a specific branch. |
1526 |
1526 |
1527 lheads: local branch heads |
1527 lheads: local branch heads |
1528 rheads: remote branch heads |
1528 rheads: remote branch heads |
|
1529 lheadcnt: total number of local branch heads |
1529 ''' |
1530 ''' |
1530 |
1531 |
1531 warn = 0 |
1532 warn = 0 |
1532 |
1533 |
1533 if len(lheads) > len(rheads): |
1534 if len(lheads) > len(rheads): |
1558 msg = _("abort: push creates new remote heads" |
1559 msg = _("abort: push creates new remote heads" |
1559 " on branch '%s'!\n") % branchname |
1560 " on branch '%s'!\n") % branchname |
1560 else: |
1561 else: |
1561 msg = _("abort: push creates new remote heads!\n") |
1562 msg = _("abort: push creates new remote heads!\n") |
1562 self.ui.warn(msg) |
1563 self.ui.warn(msg) |
1563 if len(lheads) > len(rheads): |
1564 if lheadcnt > len(rheads): |
1564 self.ui.status(_("(did you forget to merge?" |
1565 self.ui.status(_("(did you forget to merge?" |
1565 " use push -f to force)\n")) |
1566 " use push -f to force)\n")) |
1566 else: |
1567 else: |
1567 self.ui.status(_("(you should pull and merge or" |
1568 self.ui.status(_("(you should pull and merge or" |
1568 " use push -f to force)\n")) |
1569 " use push -f to force)\n")) |
1584 |
1585 |
1585 if remote_heads != [nullid]: |
1586 if remote_heads != [nullid]: |
1586 if remote.capable('branchmap'): |
1587 if remote.capable('branchmap'): |
1587 remotebrheads = remote.branchmap() |
1588 remotebrheads = remote.branchmap() |
1588 |
1589 |
|
1590 lbrmap = self.branchmap() |
|
1591 localbrheads = {} |
1589 if not revs: |
1592 if not revs: |
1590 localbrheads = self.branchmap() |
1593 for br, hds in lbrmap.iteritems(): |
|
1594 localbrheads[br] = (len(hds), hds) |
1591 else: |
1595 else: |
1592 localbrheads = {} |
|
1593 ctxgen = (self[n] for n in msng_cl) |
1596 ctxgen = (self[n] for n in msng_cl) |
1594 self._updatebranchcache(localbrheads, ctxgen) |
1597 self._updatebranchcache(localbrheads, ctxgen) |
|
1598 for br, hds in localbrheads.iteritems(): |
|
1599 localbrheads[br] = (len(lbrmap[br]), hds) |
1595 |
1600 |
1596 newbranches = list(set(localbrheads) - set(remotebrheads)) |
1601 newbranches = list(set(localbrheads) - set(remotebrheads)) |
1597 if newbranches: # new branch requires --force |
1602 if newbranches: # new branch requires --force |
1598 branchnames = ', '.join("%s" % b for b in newbranches) |
1603 branchnames = ', '.join("%s" % b for b in newbranches) |
1599 self.ui.warn(_("abort: push creates " |
1604 self.ui.warn(_("abort: push creates " |
1600 "new remote branches: %s!\n") |
1605 "new remote branches: %s!\n") |
1601 % branchnames) |
1606 % branchnames) |
1602 # propose 'push -b .' in the msg too? |
1607 # propose 'push -b .' in the msg too? |
1603 self.ui.status(_("(use 'hg push -f' to force)\n")) |
1608 self.ui.status(_("(use 'hg push -f' to force)\n")) |
1604 return None, 0 |
1609 return None, 0 |
1605 for branch, lheads in localbrheads.iteritems(): |
1610 for branch, x in localbrheads.iteritems(): |
1606 if branch in remotebrheads: |
1611 if branch in remotebrheads: |
|
1612 headcnt, lheads = x |
1607 rheads = remotebrheads[branch] |
1613 rheads = remotebrheads[branch] |
1608 if not checkbranch(lheads, rheads, branch): |
1614 if not checkbranch(lheads, rheads, headcnt, branch): |
1609 return None, 0 |
1615 return None, 0 |
1610 else: |
1616 else: |
1611 if not checkbranch(heads, remote_heads): |
1617 if not checkbranch(heads, remote_heads, len(heads)): |
1612 return None, 0 |
1618 return None, 0 |
1613 |
1619 |
1614 if inc: |
1620 if inc: |
1615 self.ui.warn(_("note: unsynced remote changes!\n")) |
1621 self.ui.warn(_("note: unsynced remote changes!\n")) |
1616 |
1622 |