diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2021-10-14 08:15:09 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-10-14 08:15:09 +0000 |
commit | a7bcaeb6ee95142abeced1968f52329ca6778cac (patch) | |
tree | 119d95e3639fbaad3db5a3e73257a9d666c297fe | |
parent | 220d9cf6be1a7498d1bee670ef63911f15c47fbf (diff) | |
parent | 3b5bca50d5be1259caf19cd4c1f67aaa088f09bf (diff) |
Merge "Reuse the same Repository when listing changes by status" into stable-3.3
-rw-r--r-- | java/com/google/gerrit/server/notedb/ChangeNotes.java | 27 | ||||
-rw-r--r-- | java/com/google/gerrit/server/query/change/InternalChangeQuery.java | 1 |
2 files changed, 27 insertions, 1 deletions
diff --git a/java/com/google/gerrit/server/notedb/ChangeNotes.java b/java/com/google/gerrit/server/notedb/ChangeNotes.java index 8eb5c5cdaa..047aa0c16a 100644 --- a/java/com/google/gerrit/server/notedb/ChangeNotes.java +++ b/java/com/google/gerrit/server/notedb/ChangeNotes.java @@ -66,12 +66,14 @@ import com.google.inject.Singleton; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; import org.eclipse.jgit.errors.ConfigInvalidException; +import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; @@ -198,13 +200,14 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> { } public List<ChangeNotes> create( + Repository repo, Project.NameKey project, Collection<Change.Id> changeIds, Predicate<ChangeNotes> predicate) { List<ChangeNotes> notes = new ArrayList<>(); for (Change.Id cid : changeIds) { try { - ChangeNotes cn = create(project, cid); + ChangeNotes cn = create(repo, project, cid); if (cn.getChange() != null && predicate.test(cn)) { notes.add(cn); } @@ -217,6 +220,28 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> { return notes; } + /* TODO: This is now unused in the Gerrit code-base, however it is kept in the code + /* because it is a public method in a stable branch. + * It can be removed in master branch where we have more flexibility to change the API + * interface. + */ + public List<ChangeNotes> create( + Project.NameKey project, + Collection<Change.Id> changeIds, + Predicate<ChangeNotes> predicate) { + try (Repository repo = args.repoManager.openRepository(project)) { + return create(repo, project, changeIds, predicate); + } catch (RepositoryNotFoundException e) { + // The repository does not exist, hence it does not contain + // any change. + } catch (IOException e) { + logger.atWarning().withCause(e).log( + "Unable to open project=%s when trying to retrieve changeId=%s from NoteDb", + project, changeIds); + } + return Collections.emptyList(); + } + public ListMultimap<Project.NameKey, ChangeNotes> create(Predicate<ChangeNotes> predicate) throws IOException { ListMultimap<Project.NameKey, ChangeNotes> m = diff --git a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java index 6605c23da2..1012f4a54e 100644 --- a/java/com/google/gerrit/server/query/change/InternalChangeQuery.java +++ b/java/com/google/gerrit/server/query/change/InternalChangeQuery.java @@ -193,6 +193,7 @@ public class InternalChangeQuery extends InternalQuery<ChangeData, InternalChang List<ChangeNotes> notes = notesFactory.create( + repo, branch.project(), changeIds, cn -> { |