add -d and -s to show/set default paths

TK Soh teekaysoh at
Mon Sep 5 00:52:31 CDT 2005

Thought it should be more convient than having to manually edit hgrc, and user
shouldn't need to be aware that symbolic name 'default' carries a special
meaning. Though I seemed to recall Matt saying it's bad to have Hg editing the

The code to change default path was taken from Bryan's recent fix on multiple
paths section.

# HG changeset patch
# User TK Soh <teekaysoh at>
# Node ID c819754541d883229cc95f3d939e5a7ef2325095
# Parent  4003ea6586934cb217db164e3e100d938f271e67
paths: add -d and -s options to show/set default paths

diff -r 4003ea658693 -r c819754541d8 doc/hg.1.txt
--- a/doc/hg.1.txt	Sun Sep  4 22:47:59 2005
+++ b/doc/hg.1.txt	Mon Sep  5 05:49:40 2005
@@ -343,12 +343,16 @@
     Print the working directory's parent revisions.
-paths [NAME]::
+paths [-d] [-s PATH] [NAME]::
     Show definition of symbolic path name NAME. If no name is given, show
     definition of available names.
     Path names are defined in the [paths] section of /etc/mercurial/hgrc
     and $HOME/.hgrc.  If run inside a repository, .hg/hgrc is used, too.
+    options:
+    -d  --default           show default repo path
+    -s, --set-default PATH  set default repo to PATH
 pull <repository path>::
     Pull changes from a remote repository to a local one.
diff -r 4003ea658693 -r c819754541d8 mercurial/
--- a/mercurial/	Sun Sep  4 22:47:59 2005
+++ b/mercurial/	Mon Sep  5 05:49:40 2005
@@ -1201,19 +1201,43 @@
         if n != nullid:
             show_changeset(ui, repo, changenode=n)
-def paths(ui, search=None):
+def paths(ui, search=None, **opts):
     """show definition of symbolic path names"""
+    repo = None
         repo = hg.repository(ui=ui)
     except hg.RepoError:
+    if opts['set_default']:
+        if not repo:
+            ui.warn("must be inside a repo to set default paths.\n")
+            return 1
+        source = ui.expandpath(opts['set_default'])
+        abspath = os.path.abspath(source)
+        cfg = ConfigParser.SafeConfigParser()
+        try:
+            fp = repo.opener('hgrc', 'r')
+            os.unlink(
+            cfg.readfp(fp)
+        except IOError, inst:
+            if inst.errno != errno.ENOENT: raise
+        if not cfg.has_section('paths'): cfg.add_section('paths')
+        cfg.set('paths', 'default', abspath)
+        cfg.write(repo.opener('hgrc', 'w'))
+        return
+    elif opts['default']:
+        if not repo:
+            ui.warn("must be inside a repo to query default paths.\n")
+            return 1
+        search = 'default'
     if search:
         for name, path in ui.configitems("paths"):
             if name == search:
                 ui.write("%s\n" % path)
-        ui.warn("not found!\n")
+        ui.warn("can't find %s in [paths] section!\n" % search)
         return 1
         for name, path in ui.configitems("paths"):
@@ -1713,7 +1737,10 @@
          [('p', 'patch', None, 'show patch')],
          'hg outgoing [-p] [DEST]'),
     "parents": (parents, [], 'hg parents [REV]'),
-    "paths": (paths, [], 'hg paths [NAME]'),
+    "paths": (paths, 
+         [('d', 'default', None, 'show default repo path'),
+          ('s', 'set-default', "", 'set default repo path')],
+         'hg paths [-d] [-s PATH] [NAME]'),
          [('u', 'update', None, 'update working directory'),

Click here to donate to the Hurricane Katrina relief effort.

More information about the Mercurial mailing list