# HG changeset patch # User Thomas Arendsen Hein # Date 1186259272 -7200 # Node ID d5126a0172ba406f53b884e712d7cfc192b0bed7 # Parent 568bb3b4b815fff6a935552ba1db87f616692952# Parent 3d35c8cb5eb410d911c5e9dd55fffb264c339149 merge with crew-stable diff -r 568bb3b4b815 -r d5126a0172ba mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sat Aug 04 12:38:30 2007 -0700 +++ b/mercurial/cmdutil.py Sat Aug 04 22:27:52 2007 +0200 @@ -21,7 +21,7 @@ class ParseError(Exception): """Exception raised on errors in parsing the command line.""" -def runcatch(ui, args, argv0=None): +def runcatch(ui, args): def catchterm(*args): raise util.SignalInterrupt @@ -35,7 +35,7 @@ if '--debugger' in args: pdb.set_trace() try: - return dispatch(ui, args, argv0=argv0) + return dispatch(ui, args) finally: ui.flush() except: @@ -277,10 +277,7 @@ pos += 1 return values -def dispatch(ui, args, argv0=None): - # remember how to call 'hg' before changing the working dir - util.set_hgexecutable(argv0) - +def dispatch(ui, args): # read --config before doing anything else # (e.g. to change trust settings for reading .hg/hgrc) config = earlygetopt(['--config'], args) diff -r 568bb3b4b815 -r d5126a0172ba mercurial/commands.py --- a/mercurial/commands.py Sat Aug 04 12:38:30 2007 -0700 +++ b/mercurial/commands.py Sat Aug 04 22:27:52 2007 +0200 @@ -3129,13 +3129,13 @@ " debugindex debugindexdot debugdate debuginstall") optionalrepo = ("paths serve showconfig") -def dispatch(args, argv0=None): +def dispatch(args): try: u = ui.ui(traceback='--traceback' in args) except util.Abort, inst: sys.stderr.write(_("abort: %s\n") % inst) return -1 - return cmdutil.runcatch(u, args, argv0=argv0) + return cmdutil.runcatch(u, args) def run(): - sys.exit(dispatch(sys.argv[1:], argv0=sys.argv[0])) + sys.exit(dispatch(sys.argv[1:])) diff -r 568bb3b4b815 -r d5126a0172ba mercurial/help.py --- a/mercurial/help.py Sat Aug 04 12:38:30 2007 -0700 +++ b/mercurial/help.py Sat Aug 04 22:27:52 2007 +0200 @@ -38,9 +38,9 @@ 'environment|env|Environment Variables': r''' HG:: - Path to the 'hg' executable, automatically passed when running hooks - or external tools. Falls back to 'hg' if unset and the value can't be - autodetected, e.g. when Mercurial is run as a Python module. + Path to the 'hg' executable, automatically passed when running hooks, + extensions or external tools. If unset or empty, an executable named + 'hg' (with com/exe/bat/cmd extension on Windows) is searched. HGEDITOR:: This is the name of the editor to use when committing. Defaults to the diff -r 568bb3b4b815 -r d5126a0172ba mercurial/util.py --- a/mercurial/util.py Sat Aug 04 12:38:30 2007 -0700 +++ b/mercurial/util.py Sat Aug 04 22:27:52 2007 +0200 @@ -540,17 +540,21 @@ return (roots, match, (inc or exc or anypats) and True) -_hgexecutable = 'hg' +_hgexecutable = None + +def hgexecutable(): + """return location of the 'hg' executable. + + Defaults to $HG or 'hg' in the search path. + """ + if _hgexecutable is None: + set_hgexecutable(os.environ.get('HG') or find_exe('hg', 'hg')) + return _hgexecutable def set_hgexecutable(path): - """remember location of the 'hg' executable if easily possible - - path might be None or empty if hg was loaded as a module, - fall back to 'hg' in this case. - """ + """set location of the 'hg' executable""" global _hgexecutable - if path: - _hgexecutable = os.path.abspath(path) + _hgexecutable = path def system(cmd, environ={}, cwd=None, onerr=None, errprefix=None): '''enhanced shell command execution. @@ -577,8 +581,7 @@ try: for k, v in environ.iteritems(): os.environ[k] = py2shell(v) - if 'HG' not in os.environ: - os.environ['HG'] = _hgexecutable + os.environ['HG'] = hgexecutable() if cwd is not None and oldcwd != cwd: os.chdir(cwd) rc = os.system(cmd)