From cf6463bddc879bdf8ed500d80f826d645fcf9dc2 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Tue, 7 Aug 2018 21:33:24 +0200 Subject: [PATCH] Fix API breakage introduced by da254106 Use org.eclipse.jgit.errors.CancelledException which is a subclass of IOException instead of org.eclipse.jgit.api.errors.CanceledException in order to avoid breaking API. We can reconsider this with the next major version 6.0. Bug: 536324 Change-Id: Ia6f84f59aa6b7d78b8fccaba24ade320a54f7458 Signed-off-by: Matthias Sohn Signed-off-by: Thomas Wolf --- .../eclipse/jgit/blame/BlameGenerator.java | 26 +++-------- .../org/eclipse/jgit/diff/DiffFormatter.java | 7 ++- .../org/eclipse/jgit/diff/RenameDetector.java | 43 ++++++++++--------- .../jgit/diff/SimilarityRenameDetector.java | 16 ++++--- 4 files changed, 45 insertions(+), 47 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java index 823494166..9cec64567 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java @@ -52,7 +52,6 @@ import java.util.Collections; import org.eclipse.jgit.annotations.Nullable; -import org.eclipse.jgit.api.errors.CanceledException; import org.eclipse.jgit.blame.Candidate.BlobCandidate; import org.eclipse.jgit.blame.Candidate.ReverseCandidate; import org.eclipse.jgit.blame.ReverseWalk.ReverseCommit; @@ -628,15 +627,9 @@ private boolean processOne(Candidate n) throws IOException { if (n.sourceCommit == null) return result(n); - DiffEntry r; - try { - r = findRename(parent, n.sourceCommit, n.sourcePath); - if (r == null) { - return result(n); - } - } catch (CanceledException e) { + DiffEntry r = findRename(parent, n.sourceCommit, n.sourcePath); + if (r == null) return result(n); - } if (0 == r.getOldId().prefixCompare(n.sourceBlob)) { // A 100% rename without any content change can also @@ -694,8 +687,7 @@ private boolean split(Candidate parent, Candidate source) return false; } - private boolean processMerge(Candidate n) - throws IOException { + private boolean processMerge(Candidate n) throws IOException { int pCnt = n.getParentCount(); // If any single parent exactly matches the merge, follow only @@ -722,15 +714,9 @@ private boolean processMerge(Candidate n) if (ids != null && ids[pIdx] != null) continue; - DiffEntry r; - try { - r = findRename(parent, n.sourceCommit, n.sourcePath); - if (r == null) { - continue; - } - } catch (CanceledException e) { + DiffEntry r = findRename(parent, n.sourceCommit, n.sourcePath); + if (r == null) continue; - } if (n instanceof ReverseCandidate) { if (ids == null) @@ -1035,7 +1021,7 @@ private static final boolean isFile(int rawMode) { } private DiffEntry findRename(RevCommit parent, RevCommit commit, - PathFilter path) throws IOException, CanceledException { + PathFilter path) throws IOException { if (renameDetector == null) return null; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java index b70ff4b2b..e7ad0bc40 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffFormatter.java @@ -62,12 +62,12 @@ import java.util.Collections; import java.util.List; -import org.eclipse.jgit.api.errors.CanceledException; import org.eclipse.jgit.diff.DiffAlgorithm.SupportedAlgorithm; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.dircache.DirCacheIterator; import org.eclipse.jgit.errors.AmbiguousObjectException; import org.eclipse.jgit.errors.BinaryBlobException; +import org.eclipse.jgit.errors.CancelledException; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -580,7 +580,10 @@ private List detectRenames(List files) renameDetector.addAll(files); try { return renameDetector.compute(reader, progressMonitor); - } catch (CanceledException e) { + } catch (CancelledException e) { + // TODO: consider propagating once bug 536323 is tackled + // (making DiffEntry.scan() and DiffFormatter.scan() and + // format() cancellable). return Collections.emptyList(); } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java index 8336cf249..772fbb5ff 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java @@ -55,9 +55,9 @@ import java.util.HashMap; import java.util.List; -import org.eclipse.jgit.api.errors.CanceledException; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.diff.SimilarityIndex.TableFullException; +import org.eclipse.jgit.errors.CancelledException; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.FileMode; @@ -321,11 +321,7 @@ public void add(DiffEntry entry) { * file contents cannot be read from the repository. */ public List compute() throws IOException { - try { - return compute(NullProgressMonitor.INSTANCE); - } catch (CanceledException e) { - return Collections.emptyList(); - } + return compute(NullProgressMonitor.INSTANCE); } /** @@ -337,11 +333,13 @@ public List compute() throws IOException { * representing all files that have been changed. * @throws java.io.IOException * file contents cannot be read from the repository. - * @throws CanceledException + * @throws CancelledException * if rename detection was cancelled */ + // TODO(ms): use org.eclipse.jgit.api.errors.CanceledException in next major + // version public List compute(ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { if (!done) { try { return compute(objectReader, pm); @@ -363,11 +361,13 @@ public List compute(ProgressMonitor pm) * representing all files that have been changed. * @throws java.io.IOException * file contents cannot be read from the repository. - * @throws CanceledException + * @throws CancelledException * if rename detection was cancelled */ + // TODO(ms): use org.eclipse.jgit.api.errors.CanceledException in next major + // version public List compute(ObjectReader reader, ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { final ContentSource cs = ContentSource.create(reader); return compute(new ContentSource.Pair(cs, cs), pm); } @@ -383,11 +383,13 @@ public List compute(ObjectReader reader, ProgressMonitor pm) * representing all files that have been changed. * @throws java.io.IOException * file contents cannot be read from the repository. - * @throws CanceledException + * @throws CancelledException * if rename detection was cancelled */ + // TODO(ms): use org.eclipse.jgit.api.errors.CanceledException in next major + // version public List compute(ContentSource.Pair reader, ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { if (!done) { done = true; @@ -427,15 +429,15 @@ public void reset() { done = false; } - private void advanceOrCancel(ProgressMonitor pm) throws CanceledException { + private void advanceOrCancel(ProgressMonitor pm) throws CancelledException { if (pm.isCancelled()) { - throw new CanceledException(JGitText.get().renameCancelled); + throw new CancelledException(JGitText.get().renameCancelled); } pm.update(1); } private void breakModifies(ContentSource.Pair reader, ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { ArrayList newEntries = new ArrayList<>(entries.size()); pm.beginTask(JGitText.get().renamesBreakingModifies, entries.size()); @@ -462,7 +464,7 @@ private void breakModifies(ContentSource.Pair reader, ProgressMonitor pm) entries = newEntries; } - private void rejoinModifies(ProgressMonitor pm) throws CanceledException { + private void rejoinModifies(ProgressMonitor pm) throws CancelledException { HashMap nameMap = new HashMap<>(); ArrayList newAdded = new ArrayList<>(added.size()); @@ -517,7 +519,7 @@ private int calculateModifyScore(ContentSource.Pair reader, DiffEntry d) private void findContentRenames(ContentSource.Pair reader, ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { int cnt = Math.max(added.size(), deleted.size()); if (getRenameLimit() == 0 || cnt <= getRenameLimit()) { SimilarityRenameDetector d; @@ -535,7 +537,8 @@ private void findContentRenames(ContentSource.Pair reader, } @SuppressWarnings("unchecked") - private void findExactRenames(ProgressMonitor pm) throws CanceledException { + private void findExactRenames(ProgressMonitor pm) + throws CancelledException { pm.beginTask(JGitText.get().renamesFindingExact, // added.size() + added.size() + deleted.size() + added.size() * deleted.size()); @@ -624,7 +627,7 @@ private void findExactRenames(ProgressMonitor pm) throws CanceledException { matrix[mNext] = SimilarityRenameDetector.encode(score, delIdx, addIdx); mNext++; if (pm.isCancelled()) { - throw new CanceledException( + throw new CancelledException( JGitText.get().renameCancelled); } } @@ -717,7 +720,7 @@ private static DiffEntry bestPathMatch(DiffEntry src, List list) { @SuppressWarnings("unchecked") private HashMap populateMap( List diffEntries, ProgressMonitor pm) - throws CanceledException { + throws CancelledException { HashMap map = new HashMap<>(); for (DiffEntry de : diffEntries) { Object old = map.put(id(de), de); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityRenameDetector.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityRenameDetector.java index 71e391c73..d8a05c34e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityRenameDetector.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/SimilarityRenameDetector.java @@ -52,9 +52,9 @@ import java.util.BitSet; import java.util.List; -import org.eclipse.jgit.api.errors.CanceledException; import org.eclipse.jgit.diff.DiffEntry.ChangeType; import org.eclipse.jgit.diff.SimilarityIndex.TableFullException; +import org.eclipse.jgit.errors.CancelledException; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.NullProgressMonitor; @@ -129,7 +129,7 @@ void setRenameScore(int score) { renameScore = score; } - void compute(ProgressMonitor pm) throws IOException, CanceledException { + void compute(ProgressMonitor pm) throws IOException, CancelledException { if (pm == null) pm = NullProgressMonitor.INSTANCE; @@ -144,7 +144,9 @@ void compute(ProgressMonitor pm) throws IOException, CanceledException { // for (--mNext; mNext >= 0; mNext--) { if (pm.isCancelled()) { - throw new CanceledException(JGitText.get().renameCancelled); + // TODO(ms): use org.eclipse.jgit.api.errors.CanceledException + // in next major version + throw new CancelledException(JGitText.get().renameCancelled); } long ent = matrix[mNext]; int sIdx = srcFile(ent); @@ -214,7 +216,7 @@ private static List compactDstList(List in) { } private int buildMatrix(ProgressMonitor pm) - throws IOException, CanceledException { + throws IOException, CancelledException { // Allocate for the worst-case scenario where every pair has a // score that we need to consider. We might not need that many. // @@ -240,7 +242,11 @@ private int buildMatrix(ProgressMonitor pm) for (int dstIdx = 0; dstIdx < dsts.size(); dstIdx++) { if (pm.isCancelled()) { - throw new CanceledException(JGitText.get().renameCancelled); + // TODO(ms): use + // org.eclipse.jgit.api.errors.CanceledException in next + // major version + throw new CancelledException( + JGitText.get().renameCancelled); } DiffEntry dstEnt = dsts.get(dstIdx);