changeset 17773:434e5bd615fc

commands: don't infer repo for commands like update (issue2748) Maintain a whitelist of commands to infer the repo for instead. The whitelist contains those commands that take file(s) in the working dir as arguments.
author Siddharth Agarwal <sid0@fb.com>
date Tue, 16 Oct 2012 11:43:15 -0700
parents 823a7d79ef82
children 0496d4f73cf4
files hgext/children.py hgext/churn.py hgext/extdiff.py hgext/graphlog.py hgext/hgk.py hgext/keyword.py hgext/largefiles/lfcommands.py hgext/mq.py hgext/record.py mercurial/commands.py mercurial/dispatch.py tests/test-update-branches.t
diffstat 12 files changed, 34 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/children.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/children.py	Tue Oct 16 11:43:15 2012 -0700
@@ -14,7 +14,7 @@
 "children(REV)"` instead.
 '''
 
-from mercurial import cmdutil
+from mercurial import cmdutil, commands
 from mercurial.commands import templateopts
 from mercurial.i18n import _
 
@@ -48,3 +48,5 @@
          ] + templateopts,
          _('hg children [-r REV] [FILE]')),
 }
+
+commands.inferrepo += " children"
--- a/hgext/churn.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/churn.py	Tue Oct 16 11:43:15 2012 -0700
@@ -197,3 +197,5 @@
           ] + commands.walkopts,
          _("hg churn [-d DATE] [-r REV] [--aliases FILE] [FILE]")),
 }
+
+commands.inferrepo += " churn"
--- a/hgext/extdiff.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/extdiff.py	Tue Oct 16 11:43:15 2012 -0700
@@ -329,3 +329,5 @@
         cmdtable[cmd] = (save(cmd, path, diffopts),
                          cmdtable['extdiff'][1][1:],
                          _('hg %s [OPTION]... [FILE]...') % cmd)
+
+commands.inferrepo += " extdiff"
--- a/hgext/graphlog.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/graphlog.py	Tue Oct 16 11:43:15 2012 -0700
@@ -52,3 +52,5 @@
     directory.
     """
     return cmdutil.graphlog(ui, repo, *pats, **opts)
+
+commands.inferrepo += " glog"
--- a/hgext/hgk.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/hgk.py	Tue Oct 16 11:43:15 2012 -0700
@@ -350,3 +350,5 @@
           ('n', 'max-count', 0, _('max-count'))],
          _('hg debug-rev-list [OPTION]... REV...')),
 }
+
+commands.inferrepo += " debug-diff-tree debug-cat-file"
--- a/hgext/keyword.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/keyword.py	Tue Oct 16 11:43:15 2012 -0700
@@ -728,3 +728,5 @@
             pass
 
     repo.__class__ = kwrepo
+
+commands.inferrepo += " kwexpand kwfiles kwshrink"
--- a/hgext/largefiles/lfcommands.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/largefiles/lfcommands.py	Tue Oct 16 11:43:15 2012 -0700
@@ -12,7 +12,7 @@
 import shutil
 
 from mercurial import util, match as match_, hg, node, context, error, \
-    cmdutil, scmutil
+    cmdutil, scmutil, commands
 from mercurial.i18n import _
 from mercurial.lock import release
 
@@ -549,3 +549,5 @@
                   ],
                   _('hg lfconvert SOURCE DEST [FILE ...]')),
     }
+
+commands.inferrepo += " lfconvert"
--- a/hgext/mq.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/mq.py	Tue Oct 16 11:43:15 2012 -0700
@@ -3602,3 +3602,5 @@
               'qseries.guarded': 'black bold',
               'qseries.missing': 'red bold',
               'qseries.unapplied': 'black bold'}
+
+commands.inferrepo += " qnew qrefresh qdiff qcommit"
--- a/hgext/record.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/hgext/record.py	Tue Oct 16 11:43:15 2012 -0700
@@ -667,3 +667,5 @@
 def _wrapcmd(cmd, table, wrapfn, msg):
     entry = extensions.wrapcommand(table, cmd, wrapfn)
     entry[1].append(('i', 'interactive', None, msg))
+
+commands.inferrepo += " record qrecord"
--- a/mercurial/commands.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/mercurial/commands.py	Tue Oct 16 11:43:15 2012 -0700
@@ -5911,3 +5911,5 @@
           " debugknown debuggetbundle debugbundle")
 optionalrepo = ("identify paths serve showconfig debugancestor debugdag"
                 " debugdata debugindex debugindexdot debugrevlog")
+inferrepo = ("add addremove annotate cat commit diff grep forget log parents"
+             " remove resolve status debugwalk")
--- a/mercurial/dispatch.py	Mon Oct 15 09:43:34 2012 -0700
+++ b/mercurial/dispatch.py	Tue Oct 16 11:43:15 2012 -0700
@@ -715,7 +715,8 @@
                 raise
             except error.RepoError:
                 if cmd not in commands.optionalrepo.split():
-                    if args and not path: # try to infer -R from command args
+                    if (cmd in commands.inferrepo.split() and
+                        args and not path): # try to infer -R from command args
                         repos = map(cmdutil.findrepo, args)
                         guess = repos[0]
                         if guess and repos.count(guess) == len(repos):
--- a/tests/test-update-branches.t	Mon Oct 15 09:43:34 2012 -0700
+++ b/tests/test-update-branches.t	Tue Oct 16 11:43:15 2012 -0700
@@ -12,6 +12,8 @@
 # |/
 # o  0:b608b9236435
 
+  $ mkdir b1
+  $ cd b1
   $ hg init
   $ echo foo > foo
   $ echo zero > a
@@ -47,6 +49,14 @@
   o  0:60829823a42a
   
 
+Make sure update doesn't assume b1 is a repository if invoked from outside:
+
+  $ cd ..
+  $ hg update b1
+  abort: no repository found in '$TESTTMP' (.hg not found)!
+  [255]
+  $ cd b1
+
 Test helper functions:
 
   $ revtest () {