diff -r 408877d491fb -r 19b9f23a8c6f mercurial/localrepo.py --- a/mercurial/localrepo.py Tue Apr 15 16:42:52 2014 -0400 +++ b/mercurial/localrepo.py Tue Apr 15 16:49:30 2014 -0400 @@ -124,7 +124,14 @@ This function handles the repo locking itself.""" try: cg = exchange.readbundle(self.ui, cg, None) - return exchange.unbundle(self._repo, cg, heads, 'push', url) + ret = exchange.unbundle(self._repo, cg, heads, 'push', url) + if util.safehasattr(ret, 'getchunks'): + # This is a bundle20 object, turn it into an unbundler. + # This little dance should be dropped eventually when the API + # is finally improved. + stream = util.chunkbuffer(ret.getchunks()) + ret = bundle2.unbundle20(self.ui, stream) + return ret except exchange.PushRaced, exc: raise error.ResponseError(_('push failed:'), exc.message)