changeset 28210:ca8ada499529 stable

push: restore old behavior of default-push (issue5000) This effectively backs out dceaef70e410 and 10917b062adf. We can't handle "default-push" just like "default:pushurl" because it is a stand-alone named path. Instead, I have two ideas to work around the issue: a. two defaults: getpath(dest, default=('default-push', 'default')) b. virtual path: getpath(dest, default=':default') (a) is conservative approach and will have less trouble, but callers have to specify they need "default-push" or "default". (b) generates hidden ":default" path from "default" and "default-push", and callers request ":default". This will require some tricks and won't work if there are conflicting sub-options valid for both "pull" and "push". I'll take (a) for default branch. This patch should NOT BE MERGED to default except for tests because it would break handling of "pushurl" sub-option.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 26 Dec 2015 15:18:16 +0900
parents 1be02894dd6f
children 44f717c87903 6a6e78f84cc6 ffffe735175f
files mercurial/commands.py tests/test-default-push.t
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5394,11 +5394,13 @@
                 # this lets simultaneous -r, -b options continue working
                 opts.setdefault('rev', []).append("null")
 
-    path = ui.paths.getpath(dest, default='default')
+    path = ui.paths.getpath(dest, default='default-push')
+    if not path:
+        path = ui.paths.getpath(dest, default='default')
     if not path:
         raise error.Abort(_('default repository not configured!'),
                          hint=_('see the "path" section in "hg help config"'))
-    dest, branches = path.pushloc, (path.branch, opts.get('branch') or [])
+    dest, branches = path.loc, (path.branch, opts.get('branch') or [])
     ui.status(_('pushing to %s\n') % util.hidepassword(dest))
     revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
     other = hg.peer(repo, opts, dest)
--- a/tests/test-default-push.t
+++ b/tests/test-default-push.t
@@ -46,6 +46,14 @@
   adding file changes
   added 1 changesets with 1 changes to 1 files
 
+But push should push to 'default' if explicitly specified (issue5000):
+
+  $ hg --cwd b push default
+  pushing to $TESTTMP/a (glob)
+  searching for changes
+  no changes found
+  [1]
+
 Push should push to 'default-push' when 'default' is not set
 
   $ hg -q clone a push-default-only