Patchwork [STABLE] ui: support paths.default-push without paths.default set (issue4914)

login
register
mail settings
Submitter Gregory Szorc
Date Oct. 22, 2015, 7:02 p.m.
Message ID <0d4034dd4b2993c35136.1445540563@gps-mbp.local>
Download mbox | patch
Permalink /patch/11217/
State Accepted
Headers show

Comments

Gregory Szorc - Oct. 22, 2015, 7:02 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 1445540343 0
#      Thu Oct 22 18:59:03 2015 +0000
# Branch stable
# Node ID 0d4034dd4b2993c351361519f4c6ed51b5c62834
# Parent  c7d30fdb13b229537269030c94c7b2540b6d34a0
ui: support paths.default-push without paths.default set (issue4914)

This behavior regressed as part of the paths API refactoring. Previous
behavior was to accept "default-push" without "default" defined. Current
behavior aborts with "default repository not configured!." This patch
restores the old behavior and adds test coverage for the scenario, which
was absent before.
Augie Fackler - Oct. 23, 2015, 9:04 a.m.
Queued for stable, thanks.

> On Oct 22, 2015, at 20:02, Gregory Szorc <gregory.szorc@gmail.com> wrote:
> 
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc@gmail.com>
> # Date 1445540343 0
> #      Thu Oct 22 18:59:03 2015 +0000
> # Branch stable
> # Node ID 0d4034dd4b2993c351361519f4c6ed51b5c62834
> # Parent  c7d30fdb13b229537269030c94c7b2540b6d34a0
> ui: support paths.default-push without paths.default set (issue4914)
> 
> This behavior regressed as part of the paths API refactoring. Previous
> behavior was to accept "default-push" without "default" defined. Current
> behavior aborts with "default repository not configured!." This patch
> restores the old behavior and adds test coverage for the scenario, which
> was absent before.
> 
> diff --git a/mercurial/ui.py b/mercurial/ui.py
> --- a/mercurial/ui.py
> +++ b/mercurial/ui.py
> @@ -1025,9 +1025,13 @@ class paths(dict):
> 
>         # Handle default-push, which is a one-off that defines the push URL for
>         # the "default" path.
>         defaultpush = ui.config('paths', 'default-push')
> -        if defaultpush and 'default' in self:
> +        if defaultpush:
> +            # "default-push" can be defined without "default" entry. This is a
> +            # bit weird, but is allowed for backwards compatibility.
> +            if 'default' not in self:
> +                self['default'] = path('default', rawloc=defaultpush)
>             self['default']._pushloc = defaultpush
> 
>     def getpath(self, name, default=None):
>         """Return a ``path`` from a string, falling back to a default.
> diff --git a/tests/test-default-push.t b/tests/test-default-push.t
> --- a/tests/test-default-push.t
> +++ b/tests/test-default-push.t
> @@ -45,8 +45,26 @@ Push should push to 'default-push' when 
>   adding manifests
>   adding file changes
>   added 1 changesets with 1 changes to 1 files
> 
> +Push should push to 'default-push' when 'default' is not set
> +
> +  $ hg -q clone a push-default-only
> +  $ cd push-default-only
> +  $ rm .hg/hgrc
> +
> +  $ touch foo
> +  $ hg -q commit -A -m 'add foo'
> +  $ hg --config paths.default-push=../a push
> +  pushing to $TESTTMP/a (glob)
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +
> +  $ cd ..
> +
> Pushing to a path that isn't defined should not fall back to default
> 
>   $ hg --cwd b push doesnotexist
>   abort: repository doesnotexist does not exist!
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -1025,9 +1025,13 @@  class paths(dict):
 
         # Handle default-push, which is a one-off that defines the push URL for
         # the "default" path.
         defaultpush = ui.config('paths', 'default-push')
-        if defaultpush and 'default' in self:
+        if defaultpush:
+            # "default-push" can be defined without "default" entry. This is a
+            # bit weird, but is allowed for backwards compatibility.
+            if 'default' not in self:
+                self['default'] = path('default', rawloc=defaultpush)
             self['default']._pushloc = defaultpush
 
     def getpath(self, name, default=None):
         """Return a ``path`` from a string, falling back to a default.
diff --git a/tests/test-default-push.t b/tests/test-default-push.t
--- a/tests/test-default-push.t
+++ b/tests/test-default-push.t
@@ -45,8 +45,26 @@  Push should push to 'default-push' when 
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 1 files
 
+Push should push to 'default-push' when 'default' is not set
+
+  $ hg -q clone a push-default-only
+  $ cd push-default-only
+  $ rm .hg/hgrc
+
+  $ touch foo
+  $ hg -q commit -A -m 'add foo'
+  $ hg --config paths.default-push=../a push
+  pushing to $TESTTMP/a (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+
+  $ cd ..
+
 Pushing to a path that isn't defined should not fall back to default
 
   $ hg --cwd b push doesnotexist
   abort: repository doesnotexist does not exist!