changeset 2293:3dc6f2501dbc

add --config global option. allows to set hgrc option on command line. syntax: --config section.name=value also add new test-globalopts to test all global options in one place.
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Mon, 15 May 2006 11:16:32 -0700
parents 903ab41ac7eb
children ce67fa312f61
files mercurial/commands.py mercurial/ui.py tests/test-globalopts tests/test-globalopts.out
diffstat 4 files changed, 292 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Mon May 15 10:25:17 2006 -0700
+++ b/mercurial/commands.py	Mon May 15 11:16:32 2006 -0700
@@ -3136,6 +3136,7 @@
      _('do not prompt, assume \'yes\' for any required answers')),
     ('q', 'quiet', None, _('suppress output')),
     ('v', 'verbose', None, _('enable additional output')),
+    ('', 'config', [], _('set/override config option')),
     ('', 'debug', None, _('enable debugging output')),
     ('', 'debugger', None, _('start debugger')),
     ('', 'traceback', None, _('print traceback on exception')),
@@ -3300,7 +3301,8 @@
             atexit.register(print_time)
 
         u.updateopts(options["verbose"], options["debug"], options["quiet"],
-                     not options["noninteractive"], options["traceback"])
+                     not options["noninteractive"], options["traceback"],
+                     options["config"])
 
         # enter the debugger before command execution
         if options['debugger']:
--- a/mercurial/ui.py	Mon May 15 10:25:17 2006 -0700
+++ b/mercurial/ui.py	Mon May 15 11:16:32 2006 -0700
@@ -47,12 +47,23 @@
         return getattr(self.parentui, key)
 
     def updateopts(self, verbose=False, debug=False, quiet=False,
-                   interactive=True, traceback=False):
+                   interactive=True, traceback=False, config=[]):
         self.quiet = (self.quiet or quiet) and not verbose and not debug
         self.verbose = (self.verbose or verbose) or debug
         self.debugflag = (self.debugflag or debug)
         self.interactive = (self.interactive and interactive)
         self.traceback = self.traceback or traceback
+        for cfg in config:
+            try:
+                name, value = cfg.split('=', 1)
+                section, name = name.split('.', 1)
+                if not self.cdata.has_section(section):
+                    self.cdata.add_section(section)
+                if not section or not name:
+                    raise IndexError
+                self.cdata.set(section, name, value)
+            except (IndexError, ValueError):
+                raise util.Abort(_('malformed --config option: %s') % cfg)
 
     def readconfig(self, fn, root=None):
         if isinstance(fn, basestring):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-globalopts	Mon May 15 11:16:32 2006 -0700
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+hg init a
+cd a
+echo a > a
+hg ci -A -d'1 0' -m a
+
+cd ..
+
+hg init b
+cd b
+echo b > b
+hg ci -A -d'1 0' -m b
+
+cd ..
+
+hg clone a c
+cd c
+hg pull -f ../b
+HGMERGE=merge hg merge
+
+cd ..
+
+echo %% -R/--repository
+hg -R a tip
+hg --repository b tip
+
+echo %% abbrev of long option
+hg --repo c tip
+
+echo %% --cwd
+hg --cwd a parents
+
+echo %% -y/--noninteractive - just be sure it is parsed
+hg --cwd a tip -q --noninteractive
+hg --cwd a tip -q -y
+
+echo %% -q/--quiet
+hg -R a -q tip
+hg -R b -q tip
+hg -R c --quiet parents
+
+echo %% -v/--verbose
+hg --cwd c head -v
+hg --cwd b tip --verbose
+
+echo %% --config
+hg --cwd c --config paths.quuxfoo=bar paths | grep -q quuxfoo && echo quuxfoo
+hg --cwd c --config '' tip -q
+hg --cwd c --config a.b tip -q
+hg --cwd c --config a tip -q
+hg --cwd c --config a.= tip -q
+hg --cwd c --config .b= tip -q
+
+echo %% --debug
+hg --cwd c log --debug
+
+echo %% --traceback
+hg --cwd c --config x --traceback tip 2>&1 | grep -i 'traceback'
+
+echo %% --time
+hg --cwd a --time tip 2>&1 | grep '^Time:' | sed 's/[0-9][0-9]*/x/g'
+
+echo %% --version
+hg --version -q | sed 's/version [a-f0-9+]*/version xxx/'
+
+echo %% -h/--help
+hg -h
+hg --help
+
+echo %% not tested: --debugger
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-globalopts.out	Mon May 15 11:16:32 2006 -0700
@@ -0,0 +1,205 @@
+adding a
+adding b
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+pulling from ../b
+searching for changes
+warning: repository is unrelated
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+%% -R/--repository
+changeset:   0:8580ff50825a
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
+
+changeset:   0:b6c483daf290
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     b
+
+%% abbrev of long option
+changeset:   1:b6c483daf290
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     b
+
+%% --cwd
+changeset:   0:8580ff50825a
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
+
+%% -y/--noninteractive - just be sure it is parsed
+0:8580ff50825a
+0:8580ff50825a
+%% -q/--quiet
+0:8580ff50825a
+0:b6c483daf290
+0:8580ff50825a
+1:b6c483daf290
+%% -v/--verbose
+changeset:   1:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+files:       b
+description:
+b
+
+
+changeset:   0:8580ff50825a50c8f716709acdf8de0deddcd6ab
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+files:       a
+description:
+a
+
+
+changeset:   0:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+files:       b
+description:
+b
+
+
+%% --config
+quuxfoo
+abort: malformed --config option: 
+abort: malformed --config option: a.b
+abort: malformed --config option: a
+abort: malformed --config option: a.=
+abort: malformed --config option: .b=
+%% --debug
+changeset:   1:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag:         tip
+parent:      -1:0000000000000000000000000000000000000000
+parent:      -1:0000000000000000000000000000000000000000
+manifest:    1:23226e7a252cacdc2d99e4fbdc3653441056de49
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+files+:      b
+description:
+b
+
+
+changeset:   0:8580ff50825a50c8f716709acdf8de0deddcd6ab
+parent:      -1:0000000000000000000000000000000000000000
+parent:      -1:0000000000000000000000000000000000000000
+manifest:    0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
+user:        test
+date:        Thu Jan 01 00:00:01 1970 +0000
+files+:      a
+description:
+a
+
+
+%% --traceback
+%% --time
+Time: real x.x secs (user x.x+x.x sys x.x+x.x)
+%% --version
+Mercurial Distributed SCM (version xxx)
+%% -h/--help
+Mercurial Distributed SCM
+
+list of commands (use "hg help -v" to show aliases and global options):
+
+ add        add the specified files on the next commit
+ annotate   show changeset information per file line
+ archive    create unversioned archive of a repository revision
+ backout    reverse effect of earlier changeset
+ bundle     create a changegroup file
+ cat        output the latest or given revisions of files
+ clone      make a copy of an existing repository
+ commit     commit the specified files or all outstanding changes
+ copy       mark files as copied for the next commit
+ diff       diff repository (or selected files)
+ export     dump the header and diffs for one or more changesets
+ grep       search for a pattern in specified files and revisions
+ heads      show current repository heads
+ help       show help for a given command or all commands
+ identify   print information about the working copy
+ import     import an ordered set of patches
+ incoming   show new changesets found in source
+ init       create a new repository in the given directory
+ locate     locate files matching specific patterns
+ log        show revision history of entire repository or files
+ manifest   output the latest or given revision of the project manifest
+ merge      Merge working directory with another revision
+ outgoing   show changesets not found in destination
+ parents    show the parents of the working dir or revision
+ paths      show definition of symbolic path names
+ pull       pull changes from the specified source
+ push       push changes to the specified destination
+ recover    roll back an interrupted transaction
+ remove     remove the specified files on the next commit
+ rename     rename files; equivalent of copy + remove
+ revert     revert files or dirs to their states as of some revision
+ rollback   roll back the last transaction in this repository
+ root       print the root (top) of the current working dir
+ serve      export the repository via HTTP
+ status     show changed files in the working directory
+ tag        add a tag for the current tip or a given revision
+ tags       list repository tags
+ tip        show the tip revision
+ unbundle   apply a changegroup file
+ update     update or merge working directory
+ verify     verify the integrity of the repository
+ version    output version and copyright information
+Mercurial Distributed SCM
+
+list of commands (use "hg help -v" to show aliases and global options):
+
+ add        add the specified files on the next commit
+ annotate   show changeset information per file line
+ archive    create unversioned archive of a repository revision
+ backout    reverse effect of earlier changeset
+ bundle     create a changegroup file
+ cat        output the latest or given revisions of files
+ clone      make a copy of an existing repository
+ commit     commit the specified files or all outstanding changes
+ copy       mark files as copied for the next commit
+ diff       diff repository (or selected files)
+ export     dump the header and diffs for one or more changesets
+ grep       search for a pattern in specified files and revisions
+ heads      show current repository heads
+ help       show help for a given command or all commands
+ identify   print information about the working copy
+ import     import an ordered set of patches
+ incoming   show new changesets found in source
+ init       create a new repository in the given directory
+ locate     locate files matching specific patterns
+ log        show revision history of entire repository or files
+ manifest   output the latest or given revision of the project manifest
+ merge      Merge working directory with another revision
+ outgoing   show changesets not found in destination
+ parents    show the parents of the working dir or revision
+ paths      show definition of symbolic path names
+ pull       pull changes from the specified source
+ push       push changes to the specified destination
+ recover    roll back an interrupted transaction
+ remove     remove the specified files on the next commit
+ rename     rename files; equivalent of copy + remove
+ revert     revert files or dirs to their states as of some revision
+ rollback   roll back the last transaction in this repository
+ root       print the root (top) of the current working dir
+ serve      export the repository via HTTP
+ status     show changed files in the working directory
+ tag        add a tag for the current tip or a given revision
+ tags       list repository tags
+ tip        show the tip revision
+ unbundle   apply a changegroup file
+ update     update or merge working directory
+ verify     verify the integrity of the repository
+ version    output version and copyright information
+%% not tested: --debugger