mercurial/localrepo.py
changeset 10912 3d7c20986027
parent 10911 4327409c1303
parent 10908 816bac2f9452
child 10920 39c69b5dc258
equal deleted inserted replaced
10911:4327409c1303 10912:3d7c20986027
  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