# HG changeset patch # User Pierre-Yves David # Date 1391143495 28800 # Node ID f1b532a310e4d8dc1e29dbe50c4d8f1f06567163 # Parent 0031ef5df586f6bb69da663a9416666c5bc8e83a push: move changeset push logic in its own function Now that every necessary information is held in the `pushoperation` object, we can extract the logic pushing changeset to it's own function. This changeset is pure code movement only. diff -r 0031ef5df586 -r f1b532a310e4 mercurial/exchange.py --- a/mercurial/exchange.py Thu Jan 30 20:34:35 2014 -0800 +++ b/mercurial/exchange.py Thu Jan 30 20:44:55 2014 -0800 @@ -141,43 +141,7 @@ discovery.checkheads(unfi, pushop.remote, outgoing, remoteheads, pushop.newbranch, bool(inc), newbm) - - # TODO: get bundlecaps from remote - bundlecaps = None - # create a changegroup from local - if pushop.revs is None and not (outgoing.excluded - or pushop.repo.changelog.filteredrevs): - # push everything, - # use the fast path, no race possible on push - bundler = changegroup.bundle10(pushop.repo, bundlecaps) - cg = pushop.repo._changegroupsubset(outgoing, - bundler, - 'push', - fastpath=True) - else: - cg = pushop.repo.getlocalbundle('push', outgoing, - bundlecaps) - - # apply changegroup to remote - if unbundle: - # local repo finds heads on server, finds out what - # revs it must push. once revs transferred, if server - # finds it has different heads (someone else won - # commit/push race), server aborts. - if pushop.force: - remoteheads = ['force'] - else: - remoteheads = pushop.remoteheads - # ssh: return remote's addchangegroup() - # http: return remote's addchangegroup() or 0 for error - pushop.ret = pushop.remote.unbundle(cg, remoteheads, - 'push') - else: - # we return an integer indicating remote head count - # change - pushop.ret = pushop.remote.addchangegroup(cg, 'push', - pushop.repo.url()) - + _pushchangeset(pushop) _pushsyncphase(pushop) _pushobsolete(pushop) finally: @@ -190,6 +154,45 @@ _pushbookmark(pushop) return pushop.ret +def _pushchangeset(pushop): + """Make the actual push of changeset bundle to remote repo""" + outgoing = pushop.outgoing + unbundle = pushop.remote.capable('unbundle') + # TODO: get bundlecaps from remote + bundlecaps = None + # create a changegroup from local + if pushop.revs is None and not (outgoing.excluded + or pushop.repo.changelog.filteredrevs): + # push everything, + # use the fast path, no race possible on push + bundler = changegroup.bundle10(pushop.repo, bundlecaps) + cg = pushop.repo._changegroupsubset(outgoing, + bundler, + 'push', + fastpath=True) + else: + cg = pushop.repo.getlocalbundle('push', outgoing, bundlecaps) + + # apply changegroup to remote + if unbundle: + # local repo finds heads on server, finds out what + # revs it must push. once revs transferred, if server + # finds it has different heads (someone else won + # commit/push race), server aborts. + if pushop.force: + remoteheads = ['force'] + else: + remoteheads = pushop.remoteheads + # ssh: return remote's addchangegroup() + # http: return remote's addchangegroup() or 0 for error + pushop.ret = pushop.remote.unbundle(cg, remoteheads, + 'push') + else: + # we return an integer indicating remote head count + # change + pushop.ret = pushop.remote.addchangegroup(cg, 'push', + pushop.repo.url()) + def _pushsyncphase(pushop): """synchronise phase information locally and remotly""" unfi = pushop.repo.unfiltered()