# HG changeset patch # User Jesse Glick # Date 2008-01-25 09:11:32 # Node ID aafdea37f7968088508ea53cfc53a79625655e7b # Parent 5b159ebb19cf9e2fddd008012e836e3d720a167f 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. diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -150,8 +150,7 @@ def _runcatch(ui, args): 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 @@ def _dispatch(ui, args): 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 @@ def _dispatch(ui, args): 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)")) diff --git a/tests/test-globalopts b/tests/test-globalopts --- a/tests/test-globalopts +++ b/tests/test-globalopts @@ -25,6 +25,13 @@ echo %% -R/--repository 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 diff --git a/tests/test-globalopts.out b/tests/test-globalopts.out --- a/tests/test-globalopts.out +++ b/tests/test-globalopts.out @@ -24,6 +24,12 @@ user: test 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