Infer a --repository argument from command arguments when reasonable.
In particular: if invoked without -R from a CWD not inside a repo, having been
passed one or more file paths as command arguments, where the nearest enclosing
repo of all of those paths is the same, quietly infer a -R option for that repo.
Otherwise abort with an error message as before.
--- a/mercurial/dispatch.py Tue Feb 19 10:53:40 2008 -0800
+++ b/mercurial/dispatch.py Fri Jan 25 04:11:32 2008 -0500
@@ -150,8 +150,7 @@
return -1
-def _findrepo():
- p = os.getcwd()
+def _findrepo(p):
while not os.path.isdir(os.path.join(p, ".hg")):
oldp, p = p, os.path.dirname(p)
if p == oldp:
@@ -254,7 +253,7 @@
os.chdir(cwd[-1])
# read the local repository .hgrc into a local ui object
- path = _findrepo() or ""
+ path = _findrepo(os.getcwd()) or ""
if not path:
lui = ui
if path:
@@ -345,6 +344,11 @@
ui.setconfig("bundle", "mainreporoot", repo.root)
except hg.RepoError:
if cmd not in commands.optionalrepo.split():
+ if args and not path: # try to infer -R from command args
+ repos = map(_findrepo, args)
+ guess = repos[0]
+ if guess and repos.count(guess) == len(repos):
+ return _dispatch(ui, ['--repository', guess] + fullargs)
if not path:
raise hg.RepoError(_("There is no Mercurial repository here"
" (.hg not found)"))
--- a/tests/test-globalopts Tue Feb 19 10:53:40 2008 -0800
+++ b/tests/test-globalopts Fri Jan 25 04:11:32 2008 -0500
@@ -25,6 +25,13 @@
hg -R a tip
hg --repository b tip
+echo %% implicit -R
+hg ann a/a
+hg ann a/a a/a
+hg ann a/a b/b
+hg -R b ann a/a
+hg log
+
echo %% abbrev of long option
hg --repo c tip
--- a/tests/test-globalopts.out Tue Feb 19 10:53:40 2008 -0800
+++ b/tests/test-globalopts.out Fri Jan 25 04:11:32 2008 -0500
@@ -24,6 +24,12 @@
date: Thu Jan 01 00:00:01 1970 +0000
summary: b
+%% implicit -R
+0: a
+0: a
+abort: There is no Mercurial repository here (.hg not found)!
+abort: a/a not under root
+abort: There is no Mercurial repository here (.hg not found)!
%% abbrev of long option
changeset: 1:b6c483daf290
tag: tip