[PATCH V2] push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra
angel.ezquerra at gmail.com
Thu Oct 6 16:24:02 CDT 2011
# HG changeset patch
# User Angel Ezquerra <angel.ezquerra at gmail.com>
# Date 1317309604 -7200
# Node ID f63ea5a24685e78d1cf432f9ebe1c46b1387f967
# Parent 6dc67dced8c122f6139ae20ccdc03a6b11e8b765
push: propagate --new-branch and --ssh options when pushing subrepos
Up until now the all the push command options were ignored when pushing
subrepos. In particular, the fact that the --new-branch command was not passed
down to subrepos that it was not possible to push a repo when any of its
subrepos had a new branch, even if you used the --new-branch option of the push
command.
In addition the error message was confusing since it showed the following hint:
"--new-branch hint: use 'hg push --new-branch' to create new remote branches".
However using the --new_branch flag did not fix the problem, as it was ignored
when pushing subrepos.
This patch passes the --new-branch and --ssh flags to every subrepo that is
pushed.
Issues/Limitations:
- git subrepos get these flags, but ignore them.
- It is no longer possible to _not_ pass down these flags to subrepos when
pushing.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4105,7 +4105,9 @@
c = repo['']
subs = c.substate # only repos that are committed
for s in sorted(subs):
- if not c.sub(s).push(opts.get('force')):
+ if not c.sub(s).push(opts.get('force'),
+ opts.get('new_branch'),
+ opts.get('ssh')):
return False
finally:
del repo._subtoppath
diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -302,7 +302,7 @@
"""merge currently-saved state with the new state."""
raise NotImplementedError
- def push(self, force):
+ def push(self, force, newbranch, ssh):
"""perform whatever action is analogous to 'hg push'
This may be a no-op on some systems.
@@ -507,19 +507,19 @@
else:
mergefunc()
- def push(self, force):
+ def push(self, force, newbranch, 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(force, newbranch):
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)
@@ -712,7 +712,7 @@
if _updateprompt(self._ui, self, dirty, self._wcrev(), new):
self.get(state, False)
- def push(self, force):
+ def push(self, force, newbranch, ssh):
# push is a no-op for SVN
return True
@@ -997,7 +997,7 @@
else:
mergefunc()
- def push(self, force):
+ def push(self, force, newbranch, ssh):
if not self._state[1]:
return True
if self._gitmissing():
More information about the Mercurial-devel
mailing list