Patchwork [3,of,8] paths: use single loop for both search=None|pattern cases

login
register
mail settings
Submitter Yuya Nishihara
Date Jan. 12, 2016, 10:34 p.m.
Message ID <7e9dc8bbebf6a0fbfba5.1452638041@waste.org>
Download mbox | patch
Permalink /patch/12713/
State Accepted
Commit 7e9dc8bbebf6a0fbfba5bbc83f110aa5673f9f8d
Headers show

Comments

Yuya Nishihara - Jan. 12, 2016, 10:34 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1450011752 -32400
#      Sun Dec 13 22:02:32 2015 +0900
# Node ID 7e9dc8bbebf6a0fbfba5bbc83f110aa5673f9f8d
# Parent  64ee5866e1076b864ca91b215012bb2a438b99b7
paths: use single loop for both search=None|pattern cases

This will help porting to the formatter API. This patch adds test for empty
pathitems to make sure "hg paths" never say "not found!".

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5398,18 +5398,16 @@ 
     Returns 0 on success.
     """
     if search:
-        for name, path in sorted(ui.paths.iteritems()):
-            if name == search:
-                if not ui.quiet:
-                    ui.write("%s\n" % util.hidepassword(path.rawloc))
-                return
-        if not ui.quiet:
-            ui.warn(_("not found!\n"))
-        return 1
+        pathitems = [(name, path) for name, path in ui.paths.iteritems()
+                     if name == search]
     else:
         pathitems = sorted(ui.paths.iteritems())
 
     for name, path in pathitems:
+        if search and not ui.quiet:
+            ui.write("%s\n" % util.hidepassword(path.rawloc))
+        if search:
+            continue
         if ui.quiet:
             ui.write("%s\n" % name)
         else:
@@ -5417,6 +5415,13 @@ 
             for subopt, value in sorted(path.suboptions.items()):
                 ui.write('%s:%s = %s\n' % (name, subopt, value))
 
+    if search and not pathitems:
+        if not ui.quiet:
+            ui.warn(_("not found!\n"))
+        return 1
+    else:
+        return 0
+
 @command('phase',
     [('p', 'public', False, _('set changeset phase to public')),
      ('d', 'draft', False, _('set changeset phase to draft')),
diff --git a/tests/test-paths.t b/tests/test-paths.t
--- a/tests/test-paths.t
+++ b/tests/test-paths.t
@@ -3,6 +3,16 @@ 
   updating to branch default
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd a
+
+with no paths:
+
+  $ hg paths
+  $ hg paths unknown
+  not found!
+  [1]
+
+with paths:
+
   $ echo '[paths]' >> .hg/hgrc
   $ echo 'dupe = ../b#tip' >> .hg/hgrc
   $ echo 'expand = $SOMETHING/bar' >> .hg/hgrc