Show More
@@ -1500,8 +1500,13 b' class localrepository(repo.repository):' | |||||
1500 | remote_heads = remote.heads() |
|
1500 | remote_heads = remote.heads() | |
1501 | inc = self.findincoming(remote, common, remote_heads, force=force) |
|
1501 | inc = self.findincoming(remote, common, remote_heads, force=force) | |
1502 |
|
1502 | |||
|
1503 | cl = self.changelog | |||
1503 | update, updated_heads = self.findoutgoing(remote, common, remote_heads) |
|
1504 | update, updated_heads = self.findoutgoing(remote, common, remote_heads) | |
1504 |
msng_cl, bases, heads = |
|
1505 | msng_cl, bases, heads = cl.nodesbetween(update, revs) | |
|
1506 | ||||
|
1507 | outgoingnodeset = set(msng_cl) | |||
|
1508 | # compute set of nodes which, if they were a head before, no longer are | |||
|
1509 | nolongeraheadnodeset = set(p for n in msng_cl for p in cl.parents(n)) | |||
1505 |
|
1510 | |||
1506 | def checkbranch(lheads, rheads, branchname=None): |
|
1511 | def checkbranch(lheads, rheads, branchname=None): | |
1507 | ''' |
|
1512 | ''' | |
@@ -1511,33 +1516,10 b' class localrepository(repo.repository):' | |||||
1511 | lheads: local branch heads |
|
1516 | lheads: local branch heads | |
1512 | rheads: remote branch heads |
|
1517 | rheads: remote branch heads | |
1513 | ''' |
|
1518 | ''' | |
1514 |
|
1519 | newlheads = [n for n in lheads if n in outgoingnodeset] | ||
1515 | warn = 0 |
|
1520 | formerrheads = [n for n in rheads if n in nolongeraheadnodeset] | |
1516 |
|
1521 | if len(newlheads) > len(formerrheads): | ||
1517 | if len(lheads) > len(rheads): |
|
1522 | # we add more new heads than we demote former heads to non-head | |
1518 | warn = 1 |
|
|||
1519 | else: |
|
|||
1520 | # add local heads involved in the push |
|
|||
1521 | updatelheads = [self.changelog.heads(x, lheads) |
|
|||
1522 | for x in update] |
|
|||
1523 | newheads = set(sum(updatelheads, [])) & set(lheads) |
|
|||
1524 |
|
||||
1525 | if not newheads: |
|
|||
1526 | return True |
|
|||
1527 |
|
||||
1528 | # add heads we don't have or that are not involved in the push |
|
|||
1529 | for r in rheads: |
|
|||
1530 | if r in self.changelog.nodemap: |
|
|||
1531 | desc = self.changelog.heads(r, heads) |
|
|||
1532 | l = [h for h in heads if h in desc] |
|
|||
1533 | if not l: |
|
|||
1534 | newheads.add(r) |
|
|||
1535 | else: |
|
|||
1536 | newheads.add(r) |
|
|||
1537 | if len(newheads) > len(rheads): |
|
|||
1538 | warn = 1 |
|
|||
1539 |
|
||||
1540 | if warn: |
|
|||
1541 | if branchname is not None: |
|
1523 | if branchname is not None: | |
1542 | msg = _("abort: push creates new remote heads" |
|
1524 | msg = _("abort: push creates new remote heads" | |
1543 | " on branch '%s'!\n") % branchname |
|
1525 | " on branch '%s'!\n") % branchname | |
@@ -1601,7 +1583,7 b' class localrepository(repo.repository):' | |||||
1601 |
|
1583 | |||
1602 | if revs is None: |
|
1584 | if revs is None: | |
1603 | # use the fast path, no race possible on push |
|
1585 | # use the fast path, no race possible on push | |
1604 |
nodes = |
|
1586 | nodes = cl.findmissing(common.keys()) | |
1605 | cg = self._changegroup(nodes, 'push') |
|
1587 | cg = self._changegroup(nodes, 'push') | |
1606 | else: |
|
1588 | else: | |
1607 | cg = self.changegroupsubset(update, revs, 'push') |
|
1589 | cg = self.changegroupsubset(update, revs, 'push') |
General Comments 0
You need to be logged in to leave comments.
Login now