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
diff --git a/error.py b/error.py
index 2148248..7e52b01 100644
--- a/error.py
+++ b/error.py
@@ -21,6 +21,10 @@
"""The revision value in a project is incorrect.
"""
+class NoManifestException(Exception):
+ """The required manifest does not exist.
+ """
+
class EditorError(Exception):
"""Unspecified error from the user's text editor.
"""
diff --git a/main.py b/main.py
index 9594454..83967f7 100755
--- a/main.py
+++ b/main.py
@@ -42,6 +42,7 @@
from error import DownloadError
from error import ManifestInvalidRevisionError
from error import ManifestParseError
+from error import NoManifestException
from error import NoSuchProjectError
from error import RepoChangedException
from manifest_xml import XmlManifest
@@ -140,6 +141,10 @@
except ManifestInvalidRevisionError as e:
print('error: %s' % str(e), file=sys.stderr)
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:
if e.name:
print('error: project %s not found' % e.name, file=sys.stderr)
diff --git a/project.py b/project.py
index 75c5e5e..08b2771 100644
--- a/project.py
+++ b/project.py
@@ -30,6 +30,7 @@
from git_config import GitConfig, IsId, GetSchemeFromUrl, ID_RE
from error import GitError, HookError, UploadError
from error import ManifestInvalidRevisionError
+from error import NoManifestException
from trace import IsTrace, Trace
from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M
@@ -1894,7 +1895,10 @@
path = os.path.join(self._project.gitdir, HEAD)
else:
path = os.path.join(self._project.worktree, '.git', HEAD)
- fd = open(path, 'rb')
+ try:
+ fd = open(path, 'rb')
+ except IOError:
+ raise NoManifestException(path)
try:
line = fd.read()
finally: