Raise a NoManifestException when the manifest DNE

When a command (eg, `repo forall`) expects the manifest project to
exist, but there is no manifest, an IOException gets raised.  This
change defines a new Exception type to be raised in these cases and
raises it when project.py fails to read the manifest.

Change-Id: Iac576c293a37f7d8f60cd4f6aa95b2c97f9e7957
This commit is contained in:
Conley Owens 2012-11-15 17:33:11 -08:00
parent 88b86728a4
commit 75ee0570da
3 changed files with 14 additions and 1 deletions

View File

@ -21,6 +21,10 @@ class ManifestInvalidRevisionError(Exception):
"""The revision value in a project is incorrect. """The revision value in a project is incorrect.
""" """
class NoManifestException(Exception):
"""The required manifest does not exist.
"""
class EditorError(Exception): class EditorError(Exception):
"""Unspecified error from the user's text editor. """Unspecified error from the user's text editor.
""" """

View File

@ -42,6 +42,7 @@ from editor import Editor
from error import DownloadError from error import DownloadError
from error import ManifestInvalidRevisionError from error import ManifestInvalidRevisionError
from error import ManifestParseError from error import ManifestParseError
from error import NoManifestException
from error import NoSuchProjectError from error import NoSuchProjectError
from error import RepoChangedException from error import RepoChangedException
from manifest_xml import XmlManifest from manifest_xml import XmlManifest
@ -140,6 +141,10 @@ class _Repo(object):
except ManifestInvalidRevisionError as e: except ManifestInvalidRevisionError as e:
print('error: %s' % str(e), file=sys.stderr) print('error: %s' % str(e), file=sys.stderr)
result = 1 result = 1
except NoManifestException as e:
print('error: manifest required for this command -- please run init',
file=sys.stderr)
result = 1
except NoSuchProjectError as e: except NoSuchProjectError as e:
if e.name: if e.name:
print('error: project %s not found' % e.name, file=sys.stderr) print('error: project %s not found' % e.name, file=sys.stderr)

View File

@ -30,6 +30,7 @@ from git_command import GitCommand, git_require
from git_config import GitConfig, IsId, GetSchemeFromUrl, ID_RE from git_config import GitConfig, IsId, GetSchemeFromUrl, ID_RE
from error import GitError, HookError, UploadError from error import GitError, HookError, UploadError
from error import ManifestInvalidRevisionError from error import ManifestInvalidRevisionError
from error import NoManifestException
from trace import IsTrace, Trace from trace import IsTrace, Trace
from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M
@ -1894,7 +1895,10 @@ class Project(object):
path = os.path.join(self._project.gitdir, HEAD) path = os.path.join(self._project.gitdir, HEAD)
else: else:
path = os.path.join(self._project.worktree, '.git', HEAD) path = os.path.join(self._project.worktree, '.git', HEAD)
fd = open(path, 'rb') try:
fd = open(path, 'rb')
except IOError:
raise NoManifestException(path)
try: try:
line = fd.read() line = fd.read()
finally: finally: