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.
--- 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