Fix compilation issue
AddReviewerInput was renamed to ReviewerInput [I16aa48a6].
PatchListCache was replaced by DiffOperations [I9d64f29].
Bug: Issue 15855
Change-Id: I81eeadb9fd75452145e892bbb3b1b464d815d3d3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
index 214c3ee..24121f4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
@@ -22,15 +22,16 @@
import com.google.gerrit.entities.Patch.ChangeType;
import com.google.gerrit.entities.PatchSet;
import com.google.gerrit.extensions.api.GerritApi;
-import com.google.gerrit.extensions.api.changes.AddReviewerInput;
import com.google.gerrit.extensions.api.changes.ReviewInput;
+import com.google.gerrit.extensions.api.changes.ReviewerInput;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.account.Emails;
-import com.google.gerrit.server.patch.PatchList;
-import com.google.gerrit.server.patch.PatchListCache;
-import com.google.gerrit.server.patch.PatchListEntry;
-import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.patch.DiffNotAvailableException;
+import com.google.gerrit.server.patch.DiffOperations;
+import com.google.gerrit.server.patch.DiffOptions;
+import com.google.gerrit.server.patch.filediff.FileDiffOutput;
+import com.google.gerrit.server.patch.filediff.TaggedEdit;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
@@ -41,6 +42,7 @@
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import org.eclipse.jgit.api.BlameCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.blame.BlameResult;
@@ -53,6 +55,7 @@
public class ReviewersByBlame implements Runnable {
private static final Logger log = LoggerFactory.getLogger(ReviewersByBlame.class);
+ private static final int DEFAULT_BASE = 0;
private final RevCommit commit;
private final Change change;
@@ -63,7 +66,7 @@
private final Emails emails;
private final AccountCache accountCache;
- private final PatchListCache patchListCache;
+ private final DiffOperations diffOperations;
private final GerritApi gApi;
public interface Factory {
@@ -80,7 +83,7 @@
public ReviewersByBlame(
Emails emails,
AccountCache accountCache,
- PatchListCache patchListCache,
+ DiffOperations diffOperations,
GerritApi gApi,
@Assisted RevCommit commit,
@Assisted Change change,
@@ -90,7 +93,7 @@
@Assisted String ignoreFileRegEx) {
this.emails = emails;
this.accountCache = accountCache;
- this.patchListCache = patchListCache;
+ this.diffOperations = diffOperations;
this.gApi = gApi;
this.commit = commit;
this.change = change;
@@ -103,10 +106,13 @@
@Override
public void run() {
Map<Account, Integer> reviewers = Maps.newHashMap();
- PatchList patchList;
+ Map<String, FileDiffOutput> stringFileDiffOutputMap;
try {
- patchList = patchListCache.get(change, ps);
- } catch (PatchListNotAvailableException ex) {
+ stringFileDiffOutputMap =
+ diffOperations.listModifiedFilesAgainstParent(
+ change.getProject(), ps.commitId(), DEFAULT_BASE, DiffOptions.DEFAULTS);
+
+ } catch (DiffNotAvailableException ex) {
log.error("Couldn't load patchlist for change {}", change.getKey(), ex);
return;
}
@@ -114,13 +120,13 @@
if (commit.getParentCount() != 1) {
return;
}
- for (PatchListEntry entry : patchList.getPatches()) {
+ for (FileDiffOutput entry : stringFileDiffOutputMap.values()) {
BlameResult blameResult;
- if ((entry.getChangeType() == ChangeType.MODIFIED
- || entry.getChangeType() == ChangeType.DELETED)
- && (ignoreFileRegEx.isEmpty() || !entry.getNewName().matches(ignoreFileRegEx))
+ if ((entry.changeType() == ChangeType.MODIFIED || entry.changeType() == ChangeType.DELETED)
+ && (ignoreFileRegEx.isEmpty() || !entry.newPath().orElse("").matches(ignoreFileRegEx))
&& (blameResult = computeBlame(entry, commit.getParent(0))) != null) {
- List<Edit> edits = entry.getEdits();
+ List<Edit> edits =
+ entry.edits().stream().map(TaggedEdit::jgitEdit).collect(Collectors.toList());
reviewers.putAll(getReviewersForPatch(edits, blameResult));
}
}
@@ -139,9 +145,9 @@
ReviewInput in = new ReviewInput();
in.reviewers = new ArrayList<>(topReviewers.size());
for (Account.Id account : topReviewers) {
- AddReviewerInput addReviewerInput = new AddReviewerInput();
- addReviewerInput.reviewer = account.toString();
- in.reviewers.add(addReviewerInput);
+ ReviewerInput reviewerInput = new ReviewerInput();
+ reviewerInput.reviewer = account.toString();
+ in.reviewers.add(reviewerInput);
}
gApi.changes().id(change.getChangeId()).current().review(in);
} catch (Exception ex) {
@@ -212,14 +218,22 @@
* Compute the blame data for the parent, we are not interested in the specific commit but the
* parent, since we only want to know the last person that edited this specific part of the code.
*
- * @param entry {@link PatchListEntry}
+ * @param entry {@link FileDiffOutput}
* @param parent Parent {@link RevCommit}
* @return Result of blame computation, null if the computation fails
*/
- private BlameResult computeBlame(PatchListEntry entry, RevCommit parent) {
+ private BlameResult computeBlame(FileDiffOutput entry, RevCommit parent) {
+ if (entry.changeType() == ChangeType.ADDED) {
+ // This file is not present in the parent commit, so there is no blame
+ return null;
+ }
+
+ // For all other ChangeType cases this file exists in the old commit and therefore we
+ // use the entry.oldPath() which is then guaranteed to be set
+
BlameCommand blameCommand = new BlameCommand(repo);
blameCommand.setStartCommit(parent);
- blameCommand.setFilePath(entry.getNewName());
+ blameCommand.setFilePath(entry.oldPath().get());
try {
BlameResult blameResult = blameCommand.call();
blameResult.computeAll();