# HG changeset patch # User Vadim Gelfer # Date 1147716992 25200 # Node ID 3dc6f2501dbc03bab8606e06cae1912544679cdc # Parent 903ab41ac7ebec3e6aee87504e17b20934c8c9e4 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. diff -r 903ab41ac7eb -r 3dc6f2501dbc mercurial/commands.py --- 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']: diff -r 903ab41ac7eb -r 3dc6f2501dbc mercurial/ui.py --- 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): diff -r 903ab41ac7eb -r 3dc6f2501dbc tests/test-globalopts --- /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 + diff -r 903ab41ac7eb -r 3dc6f2501dbc tests/test-globalopts.out --- /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