[PATCH [RFC]] push: propagate --new_branch option when pushing subrepos
Angel Ezquerra
angel.ezquerra at gmail.com
Thu Sep 29 10:20:58 CDT 2011
# HG changeset patch
# User Angel Ezquerra <angel.ezquerra at gmail.com>
# Date 1317309604 -7200
# Node ID e6eb3657e327c3e60f042f4cdf77cfb90c4735ac
# Parent 8df4166b6f634b305934fdd49c0e0ae64184d4ed
push: propagate --new_branch option when pushing subrepos
Up until now the --new_branch option of the push command was ignored when
pushing subrepos. The result was 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 flag to every subrepo that is pushed.
Limitations: git subrepos get the new_branch flag, but ignore it.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4077,7 +4077,7 @@
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')):
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=False):
"""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=False):
# 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)
+ 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)
@@ -708,7 +708,7 @@
if _updateprompt(self._ui, self, dirty, self._wcrev(), new):
self.get(state, False)
- def push(self, force):
+ def push(self, force, newbranch=False):
# push is a no-op for SVN
return True
@@ -993,7 +993,7 @@
else:
mergefunc()
- def push(self, force):
+ def push(self, force, newbranch=False):
if not self._state[1]:
return True
if self._gitmissing():
More information about the Mercurial-devel
mailing list