Patchwork [1,of,3] paths: make getpath() accept multiple defaults

login
register
mail settings
Submitter Yuya Nishihara
Date Dec. 26, 2015, 12:06 p.m.
Message ID <38c6d17c94e16ed63f53.1451131604@mimosa>
Download mbox | patch
Permalink /patch/12354/
State Accepted
Headers show

Comments

Yuya Nishihara - Dec. 26, 2015, 12:06 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1451113839 -32400
#      Sat Dec 26 16:10:39 2015 +0900
# Node ID 38c6d17c94e16ed63f532730cb2992eb86dd9e6a
# Parent  e2aa9c4030c4109e5efa50462ffc6048ca30106f
paths: make getpath() accept multiple defaults

This is necessary to handle "default-push" and "default" as fallback items.
We can't apply the same rule as "default:pushurl" because "default-push" is
a valid named path.

This series is for default branch. I have a simpler patch for stable.
Gregory Szorc - Dec. 26, 2015, 5:39 p.m.
> On Dec 26, 2015, at 05:06, Yuya Nishihara <yuya@tcha.org> wrote:
> 
> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1451113839 -32400
> #      Sat Dec 26 16:10:39 2015 +0900
> # Node ID 38c6d17c94e16ed63f532730cb2992eb86dd9e6a
> # Parent  e2aa9c4030c4109e5efa50462ffc6048ca30106f
> paths: make getpath() accept multiple defaults

This series looks sensible to me and is much simpler than what I was brainstorming.

Thank you for cleaning up my mess.

> 
> This is necessary to handle "default-push" and "default" as fallback items.
> We can't apply the same rule as "default:pushurl" because "default-push" is
> a valid named path.
> 
> This series is for default branch. I have a simpler patch for stable.
> 
> diff --git a/mercurial/ui.py b/mercurial/ui.py
> --- a/mercurial/ui.py
> +++ b/mercurial/ui.py
> @@ -1115,7 +1115,7 @@ class paths(dict):
>             self['default'].pushloc = defaultpush
> 
>     def getpath(self, name, default=None):
> -        """Return a ``path`` from a string, falling back to a default.
> +        """Return a ``path`` from a string, falling back to default.
> 
>         ``name`` can be a named path or locations. Locations are filesystem
>         paths or URIs.
> @@ -1125,13 +1125,16 @@ class paths(dict):
>         """
>         # Only fall back to default if no path was requested.
>         if name is None:
> -            if default:
> +            if not default:
> +                default = ()
> +            elif not isinstance(default, (tuple, list)):
> +                default = (default,)
> +            for k in default:
>                 try:
> -                    return self[default]
> +                    return self[k]
>                 except KeyError:
> -                    return None
> -            else:
> -                return None
> +                    continue
> +            return None
> 
>         # Most likely empty string.
>         # This may need to raise in the future.
> _______________________________________________
> 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
@@ -1115,7 +1115,7 @@  class paths(dict):
             self['default'].pushloc = defaultpush
 
     def getpath(self, name, default=None):
-        """Return a ``path`` from a string, falling back to a default.
+        """Return a ``path`` from a string, falling back to default.
 
         ``name`` can be a named path or locations. Locations are filesystem
         paths or URIs.
@@ -1125,13 +1125,16 @@  class paths(dict):
         """
         # Only fall back to default if no path was requested.
         if name is None:
-            if default:
+            if not default:
+                default = ()
+            elif not isinstance(default, (tuple, list)):
+                default = (default,)
+            for k in default:
                 try:
-                    return self[default]
+                    return self[k]
                 except KeyError:
-                    return None
-            else:
-                return None
+                    continue
+            return None
 
         # Most likely empty string.
         # This may need to raise in the future.