Raise RepoExitError in place of sys.exit
Bug: b/293344017 Change-Id: Icae4932b00e4068cba502a5ab4a0274fd7854d9d Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/382214 Reviewed-by: Gavin Mak <gavinmak@google.com> Tested-by: Jason Chang <jasonnc@google.com> Reviewed-by: Aravind Vasudevan <aravindvasudev@google.com> Commit-Queue: Jason Chang <jasonnc@google.com>
This commit is contained in:
parent
f0aeb220de
commit
1a3612fe6d
10 changed files with 251 additions and 122 deletions
|
@ -21,7 +21,18 @@ from git_config import IsImmutable
|
|||
from git_command import git
|
||||
import gitc_utils
|
||||
from progress import Progress
|
||||
from project import SyncBuffer
|
||||
from project import SyncBuffer, Project
|
||||
from typing import NamedTuple
|
||||
from error import RepoExitError
|
||||
|
||||
|
||||
class ExecuteOneResult(NamedTuple):
|
||||
project: Project
|
||||
error: Exception
|
||||
|
||||
|
||||
class StartError(RepoExitError):
|
||||
"""Exit error for failed start command."""
|
||||
|
||||
|
||||
class Start(Command):
|
||||
|
@ -73,6 +84,7 @@ revision specified in the manifest.
|
|||
# a change, then we can't push back to it. Substitute with
|
||||
# dest_branch, if defined; or with manifest default revision instead.
|
||||
branch_merge = ""
|
||||
error = None
|
||||
if IsImmutable(project.revisionExpr):
|
||||
if project.dest_branch:
|
||||
branch_merge = project.dest_branch
|
||||
|
@ -80,7 +92,7 @@ revision specified in the manifest.
|
|||
branch_merge = self.manifest.default.revisionExpr
|
||||
|
||||
try:
|
||||
ret = project.StartBranch(
|
||||
project.StartBranch(
|
||||
nb, branch_merge=branch_merge, revision=revision
|
||||
)
|
||||
except Exception as e:
|
||||
|
@ -88,11 +100,12 @@ revision specified in the manifest.
|
|||
"error: unable to checkout %s: %s" % (project.name, e),
|
||||
file=sys.stderr,
|
||||
)
|
||||
ret = False
|
||||
return (ret, project)
|
||||
error = e
|
||||
return ExecuteOneResult(project, error)
|
||||
|
||||
def Execute(self, opt, args):
|
||||
nb = args[0]
|
||||
err_projects = []
|
||||
err = []
|
||||
projects = []
|
||||
if not opt.all:
|
||||
|
@ -146,9 +159,10 @@ revision specified in the manifest.
|
|||
pm.end()
|
||||
|
||||
def _ProcessResults(_pool, pm, results):
|
||||
for result, project in results:
|
||||
if not result:
|
||||
err.append(project)
|
||||
for result in results:
|
||||
if result.error:
|
||||
err_projects.append(result.project)
|
||||
err.append(result.error)
|
||||
pm.update(msg="")
|
||||
|
||||
self.ExecuteInParallel(
|
||||
|
@ -161,13 +175,15 @@ revision specified in the manifest.
|
|||
),
|
||||
)
|
||||
|
||||
if err:
|
||||
for p in err:
|
||||
if err_projects:
|
||||
for p in err_projects:
|
||||
print(
|
||||
"error: %s/: cannot start %s"
|
||||
% (p.RelPath(local=opt.this_manifest_only), nb),
|
||||
file=sys.stderr,
|
||||
)
|
||||
msg_fmt = "cannot start %d project(s)"
|
||||
self.git_event_log.ErrorEvent(msg_fmt % (len(err)), msg_fmt)
|
||||
sys.exit(1)
|
||||
self.git_event_log.ErrorEvent(
|
||||
msg_fmt % (len(err_projects)), msg_fmt
|
||||
)
|
||||
raise StartError(aggregate_errors=err)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue