From 559b846b17a5b720c1247d07e292150466f27f96 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 2 Mar 2009 12:56:08 -0800 Subject: [PATCH] Report better errors when a project revision is invalid If a manifest specifies an invalid revision property, give the user a better error message detaling the problem, instead of an ugly Python traceback with a strange Git error message. Bug: REPO-2 Signed-off-by: Shawn O. Pearce --- error.py | 4 ++++ main.py | 4 ++++ project.py | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/error.py b/error.py index 029e1227..6b9dff44 100644 --- a/error.py +++ b/error.py @@ -17,6 +17,10 @@ class ManifestParseError(Exception): """Failed to parse the manifest file. """ +class ManifestInvalidRevisionError(Exception): + """The revision value in a project is incorrect. + """ + class EditorError(Exception): """Unspecified error from the user's text editor. """ diff --git a/main.py b/main.py index be8da017..f8fcfe2d 100755 --- a/main.py +++ b/main.py @@ -29,6 +29,7 @@ import sys from command import InteractiveCommand, PagedCommand from editor import Editor +from error import ManifestInvalidRevisionError from error import NoSuchProjectError from error import RepoChangedException from manifest import Manifest @@ -94,6 +95,9 @@ class _Repo(object): copts, cargs = cmd.OptionParser.parse_args(argv) try: cmd.Execute(copts, cargs) + except ManifestInvalidRevisionError, e: + print >>sys.stderr, 'error: %s' % str(e) + sys.exit(1) except NoSuchProjectError, e: if e.name: print >>sys.stderr, 'error: project %s not found' % e.name diff --git a/project.py b/project.py index 4780316c..8cdb8b19 100644 --- a/project.py +++ b/project.py @@ -25,6 +25,7 @@ from color import Coloring from git_command import GitCommand from git_config import GitConfig, IsId from error import GitError, ImportError, UploadError +from error import ManifestInvalidRevisionError from remote import Remote HEAD = 'HEAD' @@ -582,6 +583,12 @@ class Project(object): rem = self.GetRemote(self.remote.name) rev = rem.ToLocal(self.revision) + try: + self.bare_git.rev_parse('--verify', '%s^0' % rev) + except GitError: + raise ManifestInvalidRevisionError( + 'revision %s in %s not found' % (self.revision, self.name)) + branch = self.CurrentBranch if branch is None: