diff options
author | Ivan Frade <ifrade@google.com> | 2021-08-26 10:29:47 -0700 |
---|---|---|
committer | Ivan Frade <ifrade@google.com> | 2021-11-23 11:30:25 -0800 |
commit | cde3ed9ecf5397c7fe6f338ef782efe5262e481f (patch) | |
tree | 7eed17ae6a624d36c0d29244f7b1bceb1679a457 | |
parent | ce6826f5061297d7e8c949127e34e08488f2f229 (diff) | |
download | jgit-cde3ed9ecf5397c7fe6f338ef782efe5262e481f.tar.gz jgit-cde3ed9ecf5397c7fe6f338ef782efe5262e481f.zip |
RepoCommand: Do not wrap GitApiExceptions in GitApiExceptions
While building the commit for the destination project, RepoCommand
catches GitApiExceptions and wraps them into ManifestErrorException
(a subclass of GitApiException). This hides the real exception from the
caller and prevent them to do a fine-grained catch.
Specifically this is problematic for gerrit's supermanifest plugin, that
won't see ConcurrentRefUpdate exceptions to detect lock-failures.
Use ManifestErrorException to wrap non-GitApiExceptions, let
GitApiExceptions pass through as they are.
Change-Id: Ia2cda244e65993bb07c89cd6435507d5d0754dd4
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java index 095927f3cd..e0a822479f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java @@ -578,10 +578,10 @@ public class RepoCommand extends GitCommand<RevCommit> { DirCache index = DirCache.newInCore(); ObjectInserter inserter = repo.newObjectInserter(); + try (RevWalk rw = new RevWalk(repo)) { prepareIndex(renamedProjects, index, inserter); ObjectId treeId = index.writeTree(inserter); - long prevDelay = 0; for (int i = 0; i < LOCK_FAILURE_MAX_RETRIES - 1; i++) { try { @@ -597,7 +597,7 @@ public class RepoCommand extends GitCommand<RevCommit> { } // In the last try, just propagate the exceptions return commitTreeOnCurrentTip(inserter, rw, treeId); - } catch (GitAPIException | IOException | InterruptedException e) { + } catch (IOException | InterruptedException e) { throw new ManifestErrorException(e); } } @@ -609,12 +609,11 @@ public class RepoCommand extends GitCommand<RevCommit> { } return git.commit().setMessage(RepoText.get().repoCommitMessage) .call(); - } catch (GitAPIException | IOException e) { + } catch (IOException e) { throw new ManifestErrorException(e); } } - private void prepareIndex(List<RepoProject> projects, DirCache index, ObjectInserter inserter) throws IOException, GitAPIException { Config cfg = new Config(); |