Mercurial > hg
comparison mercurial/exchange.py @ 22239:0688010ee38f
push: move bookmark discovery with other discovery steps
The discovery of necessary bookmark updates is now done within the "discovery
phase". This opens the door to the inclusion of bookmarks in a unified bundle2
push.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 15 Aug 2014 18:39:39 -0700 |
parents | c894fdff56d1 |
children | d092f4b68fb6 |
comparison
equal
deleted
inserted
replaced
22238:c894fdff56d1 | 22239:0688010ee38f |
---|---|
81 self.outdatedphases = None | 81 self.outdatedphases = None |
82 # phases changes that must be pushed if changeset push fails | 82 # phases changes that must be pushed if changeset push fails |
83 self.fallbackoutdatedphases = None | 83 self.fallbackoutdatedphases = None |
84 # outgoing obsmarkers | 84 # outgoing obsmarkers |
85 self.outobsmarkers = set() | 85 self.outobsmarkers = set() |
86 # outgoing bookmarks | |
87 self.outbookmarks = [] | |
86 | 88 |
87 @util.propertycache | 89 @util.propertycache |
88 def futureheads(self): | 90 def futureheads(self): |
89 """future remote heads if the changeset push succeeds""" | 91 """future remote heads if the changeset push succeeds""" |
90 return self.outgoing.missingheads | 92 return self.outgoing.missingheads |
278 | 280 |
279 @pushdiscovery('obsmarker') | 281 @pushdiscovery('obsmarker') |
280 def _pushdiscoveryobsmarkers(pushop): | 282 def _pushdiscoveryobsmarkers(pushop): |
281 pushop.outobsmarkers = pushop.repo.obsstore | 283 pushop.outobsmarkers = pushop.repo.obsstore |
282 | 284 |
285 @pushdiscovery('bookmarks') | |
286 def _pushdiscoverybookmarks(pushop): | |
287 ui = pushop.ui | |
288 repo = pushop.repo.unfiltered() | |
289 remote = pushop.remote | |
290 ui.debug("checking for updated bookmarks\n") | |
291 ancestors = () | |
292 if pushop.revs: | |
293 revnums = map(repo.changelog.rev, pushop.revs) | |
294 ancestors = repo.changelog.ancestors(revnums, inclusive=True) | |
295 remotebookmark = remote.listkeys('bookmarks') | |
296 | |
297 comp = bookmarks.compare(repo, repo._bookmarks, remotebookmark, srchex=hex) | |
298 (addsrc, adddst, advsrc, advdst, diverge, differ, invalid) = comp | |
299 for b, scid, dcid in advsrc: | |
300 if not ancestors or repo[scid].rev() in ancestors: | |
301 pushop.outbookmarks.append((b, dcid, scid)) | |
302 | |
283 def _pushcheckoutgoing(pushop): | 303 def _pushcheckoutgoing(pushop): |
284 outgoing = pushop.outgoing | 304 outgoing = pushop.outgoing |
285 unfi = pushop.repo.unfiltered() | 305 unfi = pushop.repo.unfiltered() |
286 if not outgoing.missing: | 306 if not outgoing.missing: |
287 # nothing to push | 307 # nothing to push |
614 def _pushbookmark(pushop): | 634 def _pushbookmark(pushop): |
615 """Update bookmark position on remote""" | 635 """Update bookmark position on remote""" |
616 if pushop.ret == 0: | 636 if pushop.ret == 0: |
617 return | 637 return |
618 ui = pushop.ui | 638 ui = pushop.ui |
619 repo = pushop.repo.unfiltered() | |
620 remote = pushop.remote | 639 remote = pushop.remote |
621 ui.debug("checking for updated bookmarks\n") | 640 for b, old, new in pushop.outbookmarks: |
622 ancestors = () | 641 if remote.pushkey('bookmarks', b, old, new): |
623 if pushop.revs: | |
624 revnums = map(repo.changelog.rev, pushop.revs) | |
625 ancestors = repo.changelog.ancestors(revnums, inclusive=True) | |
626 remotebookmark = remote.listkeys('bookmarks') | |
627 comp = bookmarks.compare(repo, repo._bookmarks, remotebookmark, srchex=hex) | |
628 (addsrc, adddst, advsrc, advdst, diverge, differ, invalid) = comp | |
629 for b, scid, dcid in advsrc: | |
630 if ancestors and repo[scid].rev() not in ancestors: | |
631 continue | |
632 if remote.pushkey('bookmarks', b, dcid, scid): | |
633 ui.status(_("updating bookmark %s\n") % b) | 642 ui.status(_("updating bookmark %s\n") % b) |
634 else: | 643 else: |
635 ui.warn(_('updating bookmark %s failed!\n') % b) | 644 ui.warn(_('updating bookmark %s failed!\n') % b) |
636 | 645 |
637 class pulloperation(object): | 646 class pulloperation(object): |