From c95583bf4f17b8467f815b6391ffc6c7add08804 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 3 Mar 2009 17:47:06 -0800 Subject: Don't permit users to run repo status in a mirror client If a client was created with "repo init --mirror" then there are no working directories present, and no files checked out. Using a command like "repo status" in this context makes no sense, and actually throws back a Pytyon traceback at the console when the underlying commands fail out. We now tag commands with the MirrorSafeCommand type if they are able to be executed within a mirror directory safely. Using a command in a mirror which lacks this base class results in a useful error letting you know the command isn't supported. Bug: REPO-14 Signed-off-by: Shawn O. Pearce --- main.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'main.py') diff --git a/main.py b/main.py index db4fa0fb..0e0a61de 100755 --- a/main.py +++ b/main.py @@ -27,7 +27,9 @@ import os import re import sys -from command import InteractiveCommand, PagedCommand +from command import InteractiveCommand +from command import MirrorSafeCommand +from command import PagedCommand from editor import Editor from error import ManifestInvalidRevisionError from error import NoSuchProjectError @@ -91,6 +93,12 @@ class _Repo(object): cmd.manifest = Manifest(cmd.repodir) Editor.globalConfig = cmd.manifest.globalConfig + if not isinstance(cmd, MirrorSafeCommand) and cmd.manifest.IsMirror: + print >>sys.stderr, \ + "fatal: '%s' requires a working directory"\ + % name + sys.exit(1) + if not gopts.no_pager and not isinstance(cmd, InteractiveCommand): config = cmd.manifest.globalConfig if gopts.pager: -- cgit v1.2.3-54-g00ecf