--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -320,6 +320,9 @@ def dispatch(ui, args):
raise util.Abort(_("repository '%s' is not local") % path)
except hg.RepoError:
if cmd not in commands.optionalrepo.split():
+ if not path:
+ raise hg.RepoError(_("There is no Mercurial repository here"
+ " (.hg not found)"))
raise
d = lambda: func(ui, repo, *args, **cmdoptions)
else:
--- a/tests/test-dispatch
+++ b/tests/test-dispatch
@@ -17,3 +17,9 @@ cat = -v
EOF
hg cat a
+echo '% no repo'
+cd ..
+hg cat
+
+exit 0
+
\ No newline at end of file
--- a/tests/test-dispatch.out
+++ b/tests/test-dispatch.out
@@ -28,3 +28,5 @@ use "hg -v help cat" to show global opti
% [defaults]
a
a
+% no repo
+abort: There is no Mercurial repository here (.hg not found)!