Return project in GetRelated
This commit adds project as a mandatory return field in
RelatedChangeAndCommitInfo returned by GetRelated to fix a bug where
links to related changes would have 'undefined' as the project component.
Since we now always want to have the project along the change number it
seems to be a good practice to also return the project along with a
change number in the API similar to ChangeInfo.
Bug: Issue 6876
Change-Id: I64ac0d1b30a3b8034cf16afe96c9d1168cbde193
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index b307efa..50565f8 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -3548,6 +3548,7 @@
{
"changes": [
{
+ "project": "gerrit",
"change_id": "Ic62ae3103fca2214904dbf2faf4c861b5f0ae9b5",
"commit": {
"commit": "78847477532e386f5a2185a4e8c90b2509e354e3",
@@ -3570,6 +3571,7 @@
"status": "NEW"
},
{
+ "project": "gerrit",
"change_id": "I5e4fc08ce34d33c090c9e0bf320de1b17309f774",
"commit": {
"commit": "b1cb4caa6be46d12b94c25aa68aebabcbb3f53fe",
@@ -6577,6 +6579,7 @@
[options="header",cols="1,^1,5"]
|===========================
|Field Name ||Description
+|`project` ||The project of the change or commit.
|`change_id` |optional|The Change-Id of the change.
|`commit` ||The commit as a
link:#commit-info[CommitInfo] entity.
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java
index be3d17f..d4019ec34 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java
@@ -563,9 +563,10 @@
return Iterables.getOnlyElement(queryProvider.get().byCommit(c));
}
- private static ChangeAndCommit changeAndCommit(
+ private ChangeAndCommit changeAndCommit(
PatchSet.Id psId, ObjectId commitId, int currentRevisionNum) {
ChangeAndCommit result = new ChangeAndCommit();
+ result.project = project.get();
result._changeNumber = psId.getParentKey().get();
result.commit = new CommitInfo();
result.commit.commit = commitId.name();
@@ -599,6 +600,7 @@
String name = "index " + i + " related to " + psId;
ChangeAndCommit a = actual.get(i);
ChangeAndCommit e = expected[i];
+ assertThat(a.project).named("project of " + name).isEqualTo(e.project);
assertThat(a._changeNumber).named("change ID of " + name).isEqualTo(e._changeNumber);
// Don't bother checking changeId; assume _changeNumber is sufficient.
assertThat(a._revisionNumber).named("revision of " + name).isEqualTo(e._revisionNumber);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
index 10c7a5a..a6ed806 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
@@ -21,6 +21,7 @@
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CommonConverters;
import com.google.gerrit.server.PatchSetUtil;
@@ -102,7 +103,7 @@
} else {
commit = d.commit();
}
- result.add(new ChangeAndCommit(d.data().change(), ps, commit));
+ result.add(new ChangeAndCommit(rsrc.getProject(), d.data().change(), ps, commit));
}
if (result.size() == 1) {
@@ -137,6 +138,7 @@
}
public static class ChangeAndCommit {
+ public String project;
public String changeId;
public CommitInfo commit;
public Integer _changeNumber;
@@ -146,7 +148,10 @@
public ChangeAndCommit() {}
- ChangeAndCommit(@Nullable Change change, @Nullable PatchSet ps, RevCommit c) {
+ ChangeAndCommit(
+ Project.NameKey project, @Nullable Change change, @Nullable PatchSet ps, RevCommit c) {
+ this.project = project.get();
+
if (change != null) {
changeId = change.getKey().get();
_changeNumber = change.getChangeId();
@@ -171,6 +176,7 @@
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
+ .add("project", project)
.add("changeId", changeId)
.add("commit", toString(commit))
.add("_changeNumber", _changeNumber)