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 <sop@google.com>
This commit is contained in:
Shawn O. Pearce 2009-03-02 12:56:08 -08:00
parent 7c6c64d463
commit 559b846b17
3 changed files with 15 additions and 0 deletions

View File

@ -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.
"""

View File

@ -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

View File

@ -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: