diff -r dc3eefe0c80e -r 309e49491253 mercurial/subrepo.py --- a/mercurial/subrepo.py Wed Dec 21 23:56:15 2011 +0100 +++ b/mercurial/subrepo.py Thu Sep 29 17:20:04 2011 +0200 @@ -303,7 +303,7 @@ """merge currently-saved state with the new state.""" raise NotImplementedError - def push(self, force): + def push(self, opts): """perform whatever action is analogous to 'hg push' This may be a no-op on some systems. @@ -519,19 +519,23 @@ else: mergefunc() - def push(self, force): + def push(self, opts): + force = opts.get('force') + newbranch = opts.get('new_branch') + ssh = opts.get('ssh') + # push subrepos depth-first for coherent ordering c = self._repo[''] subs = c.substate # only repos that are committed for s in sorted(subs): - if not c.sub(s).push(force): + if not c.sub(s).push(opts): return False dsturl = _abssource(self._repo, True) self._repo.ui.status(_('pushing subrepo %s to %s\n') % (subrelpath(self), dsturl)) - other = hg.peer(self._repo.ui, {}, dsturl) - return self._repo.push(other, force) + other = hg.peer(self._repo.ui, {'ssh': ssh}, dsturl) + return self._repo.push(other, force, newbranch=newbranch) def outgoing(self, ui, dest, opts): return hg.outgoing(ui, self._repo, _abssource(self._repo, True), opts) @@ -731,7 +735,7 @@ if _updateprompt(self._ui, self, dirty, self._wcrev(), new): self.get(state, False) - def push(self, force): + def push(self, opts): # push is a no-op for SVN return True @@ -1025,7 +1029,9 @@ else: mergefunc() - def push(self, force): + def push(self, opts): + force = opts.get('force') + if not self._state[1]: return True if self._gitmissing():