From 1a3612fe6d347e458a53d7a9e920a91ea502e6ba Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Tue, 8 Aug 2023 14:12:53 -0700 Subject: 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 Tested-by: Jason Chang Reviewed-by: Aravind Vasudevan Commit-Queue: Jason Chang --- subcmds/download.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'subcmds/download.py') diff --git a/subcmds/download.py b/subcmds/download.py index 475c0bc2..18e555be 100644 --- a/subcmds/download.py +++ b/subcmds/download.py @@ -16,11 +16,15 @@ import re import sys from command import Command -from error import GitError, NoSuchProjectError +from error import GitError, NoSuchProjectError, RepoExitError CHANGE_RE = re.compile(r"^([1-9][0-9]*)(?:[/\.-]([1-9][0-9]*))?$") +class DownloadCommandError(RepoExitError): + """Error raised when download command fails.""" + + class Download(Command): COMMON = True helpSummary = "Download and checkout a change" @@ -137,15 +141,16 @@ If no project is specified try to use current directory as a project. ) def Execute(self, opt, args): + try: + self._ExecuteHelper(opt, args) + except Exception as e: + if isinstance(e, RepoExitError): + raise e + raise DownloadCommandError(aggregate_errors=[e]) + + def _ExecuteHelper(self, opt, args): for project, change_id, ps_id in self._ParseChangeIds(opt, args): dl = project.DownloadPatchSet(change_id, ps_id) - if not dl: - print( - "[%s] change %d/%d not found" - % (project.name, change_id, ps_id), - file=sys.stderr, - ) - sys.exit(1) if not opt.revert and not dl.commits: print( @@ -201,4 +206,4 @@ If no project is specified try to use current directory as a project. % (project.name, mode, dl.commit), file=sys.stderr, ) - sys.exit(1) + raise -- cgit v1.2.3-54-g00ecf