diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt
index 1db27d5a39..2f4c46c598 100644
--- a/Documentation/dev-plugins.txt
+++ b/Documentation/dev-plugins.txt
@@ -2241,7 +2241,8 @@ public class MyWeblinkPlugin implements PatchSetWebLink {
private String imageUrl = "http://placehold.it/16x16.gif";
@Override
- public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
+ public WebLinkInfo getPatchSetWebLink(String projectName, String commit,
+ String subject, String branchName) {
return new WebLinkInfo(name,
imageUrl,
String.format(placeHolderUrlProjectCommit, project, commit),
diff --git a/java/com/google/gerrit/extensions/webui/ParentWebLink.java b/java/com/google/gerrit/extensions/webui/ParentWebLink.java
index dfc970d5b0..2176e78090 100644
--- a/java/com/google/gerrit/extensions/webui/ParentWebLink.java
+++ b/java/com/google/gerrit/extensions/webui/ParentWebLink.java
@@ -30,10 +30,13 @@ public interface ParentWebLink extends WebLink {
*
*
*
- * @param projectName Name of the project
- * @param commit Commit sha1 of the parent revision
+ * @param projectName name of the project
+ * @param commit commit sha1 of the parent revision
+ * @param subject first line of the commit message
+ * @param branchName target branch of the change
* @return WebLinkInfo that links to parent commit in external service, null if there should be no
* link.
*/
- WebLinkInfo getParentWebLink(String projectName, String commit);
+ WebLinkInfo getParentWebLink(
+ String projectName, String commit, String subject, String branchName);
}
diff --git a/java/com/google/gerrit/extensions/webui/PatchSetWebLink.java b/java/com/google/gerrit/extensions/webui/PatchSetWebLink.java
index 93fe8e105c..b8ba5c4402 100644
--- a/java/com/google/gerrit/extensions/webui/PatchSetWebLink.java
+++ b/java/com/google/gerrit/extensions/webui/PatchSetWebLink.java
@@ -30,10 +30,13 @@ public interface PatchSetWebLink extends WebLink {
*
*
*
- * @param projectName Name of the project
- * @param commit Commit of the patch set
+ * @param projectName name of the project
+ * @param commit commit of the patch set
+ * @param subject first line of the commit message
+ * @param branchName target branch of the change
* @return WebLinkInfo that links to patch set in external service, null if there should be no
* link.
*/
- WebLinkInfo getPatchSetWebLink(String projectName, String commit);
+ WebLinkInfo getPatchSetWebLink(
+ String projectName, String commit, String subject, String branchName);
}
diff --git a/java/com/google/gerrit/server/WebLinks.java b/java/com/google/gerrit/server/WebLinks.java
index 88b0b215ad..47ba32556b 100644
--- a/java/com/google/gerrit/server/WebLinks.java
+++ b/java/com/google/gerrit/server/WebLinks.java
@@ -86,19 +86,29 @@ public class WebLinks {
/**
* @param project Project name.
* @param commit SHA1 of commit.
+ * @param subject subject of the commit.
+ * @param branchName branch of the commit.
* @return Links for patch sets.
*/
- public ImmutableList getPatchSetLinks(Project.NameKey project, String commit) {
- return filterLinks(patchSetLinks, webLink -> webLink.getPatchSetWebLink(project.get(), commit));
+ public ImmutableList getPatchSetLinks(
+ Project.NameKey project, String commit, String subject, String branchName) {
+ return filterLinks(
+ patchSetLinks,
+ webLink -> webLink.getPatchSetWebLink(project.get(), commit, subject, branchName));
}
/**
* @param project Project name.
* @param revision SHA1 of the parent revision.
+ * @param subject subject of the parent revision.
+ * @param branchName branch of the revision (and parent revision).
* @return Links for patch sets.
*/
- public ImmutableList getParentLinks(Project.NameKey project, String revision) {
- return filterLinks(parentLinks, webLink -> webLink.getParentWebLink(project.get(), revision));
+ public ImmutableList getParentLinks(
+ Project.NameKey project, String revision, String subject, String branchName) {
+ return filterLinks(
+ parentLinks,
+ webLink -> webLink.getParentWebLink(project.get(), revision, subject, branchName));
}
/**
diff --git a/java/com/google/gerrit/server/change/RevisionJson.java b/java/com/google/gerrit/server/change/RevisionJson.java
index 414107f16f..90caea0e7d 100644
--- a/java/com/google/gerrit/server/change/RevisionJson.java
+++ b/java/com/google/gerrit/server/change/RevisionJson.java
@@ -164,7 +164,12 @@ public class RevisionJson {
* RevWalk and assumes it is backed by an open repository.
*/
public CommitInfo getCommitInfo(
- Project.NameKey project, RevWalk rw, RevCommit commit, boolean addLinks, boolean fillCommit)
+ Project.NameKey project,
+ RevWalk rw,
+ RevCommit commit,
+ boolean addLinks,
+ boolean fillCommit,
+ String branchName)
throws IOException {
CommitInfo info = new CommitInfo();
if (fillCommit) {
@@ -177,7 +182,8 @@ public class RevisionJson {
info.message = commit.getFullMessage();
if (addLinks) {
- ImmutableList links = webLinks.getPatchSetLinks(project, commit.name());
+ ImmutableList links =
+ webLinks.getPatchSetLinks(project, commit.name(), commit.getShortMessage(), branchName);
info.webLinks = links.isEmpty() ? null : links;
}
@@ -187,7 +193,8 @@ public class RevisionJson {
i.commit = parent.name();
i.subject = parent.getShortMessage();
if (addLinks) {
- ImmutableList parentLinks = webLinks.getParentLinks(project, parent.name());
+ ImmutableList parentLinks =
+ webLinks.getParentLinks(project, parent.name(), parent.getShortMessage(), branchName);
i.webLinks = parentLinks.isEmpty() ? null : parentLinks;
}
info.parents.add(i);
@@ -288,11 +295,12 @@ public class RevisionJson {
String rev = in.commitId().name();
RevCommit commit = rw.parseCommit(ObjectId.fromString(rev));
rw.parseBody(commit);
+ String branchName = cd.change().getDest().branch();
if (setCommit) {
- out.commit = getCommitInfo(project, rw, commit, has(WEB_LINKS), fillCommit);
+ out.commit = getCommitInfo(project, rw, commit, has(WEB_LINKS), fillCommit, branchName);
}
if (addFooters) {
- Ref ref = repo.exactRef(cd.change().getDest().branch());
+ Ref ref = repo.exactRef(branchName);
RevCommit mergeTip = null;
if (ref != null) {
mergeTip = rw.parseCommit(ref.getObjectId());
diff --git a/java/com/google/gerrit/server/config/GitwebConfig.java b/java/com/google/gerrit/server/config/GitwebConfig.java
index b5f09fd772..3340a52292 100644
--- a/java/com/google/gerrit/server/config/GitwebConfig.java
+++ b/java/com/google/gerrit/server/config/GitwebConfig.java
@@ -327,8 +327,10 @@ public class GitwebConfig {
}
@Override
- public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
+ public WebLinkInfo getPatchSetWebLink(
+ String projectName, String commit, String subject, String branchName) {
if (revision != null) {
+ // subject and branchName are not needed, hence not used.
return link(
revision
.replace("project", encode(projectName))
@@ -339,9 +341,10 @@ public class GitwebConfig {
}
@Override
- public WebLinkInfo getParentWebLink(String projectName, String commit) {
+ public WebLinkInfo getParentWebLink(
+ String projectName, String commit, String subject, String branchName) {
// For Gitweb treat parent revision links the same as patch set links
- return getPatchSetWebLink(projectName, commit);
+ return getPatchSetWebLink(projectName, commit, subject, branchName);
}
@Override
diff --git a/java/com/google/gerrit/server/restapi/change/GetCommit.java b/java/com/google/gerrit/server/restapi/change/GetCommit.java
index 21a08dcd23..d76ce041f6 100644
--- a/java/com/google/gerrit/server/restapi/change/GetCommit.java
+++ b/java/com/google/gerrit/server/restapi/change/GetCommit.java
@@ -58,7 +58,13 @@ public class GetCommit implements RestReadView {
rw.parseBody(commit);
CommitInfo info =
json.create(ImmutableSet.of())
- .getCommitInfo(rsrc.getProject(), rw, commit, addLinks, true);
+ .getCommitInfo(
+ rsrc.getProject(),
+ rw,
+ commit,
+ addLinks,
+ /* fillCommit= */ true,
+ rsrc.getChange().getDest().branch());
Response r = Response.ok(info);
if (rsrc.isCacheable()) {
r.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
diff --git a/java/com/google/gerrit/server/restapi/change/GetMergeList.java b/java/com/google/gerrit/server/restapi/change/GetMergeList.java
index 0c67fd639c..f0639b51f8 100644
--- a/java/com/google/gerrit/server/restapi/change/GetMergeList.java
+++ b/java/com/google/gerrit/server/restapi/change/GetMergeList.java
@@ -81,7 +81,14 @@ public class GetMergeList implements RestReadView {
List result = new ArrayList<>(commits.size());
RevisionJson changeJson = json.create(ImmutableSet.of());
for (RevCommit c : commits) {
- result.add(changeJson.getCommitInfo(rsrc.getProject(), rw, c, addLinks, true));
+ result.add(
+ changeJson.getCommitInfo(
+ rsrc.getProject(),
+ rw,
+ c,
+ addLinks,
+ /* fillCommit= */ true,
+ rsrc.getChange().getDest().branch()));
}
return createResponse(rsrc, result);
}
diff --git a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
index f59fba04f3..d108fea137 100644
--- a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -91,6 +91,7 @@ import com.google.gerrit.common.data.GlobalCapability;
import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.AccountGroup;
import com.google.gerrit.entities.Address;
+import com.google.gerrit.entities.BranchNameKey;
import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.LabelFunction;
import com.google.gerrit.entities.LabelType;
@@ -154,6 +155,7 @@ import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.StarredChangesUtil;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.change.testing.TestChangeETagComputation;
+import com.google.gerrit.server.git.ChangeMessageModifier;
import com.google.gerrit.server.group.SystemGroupBackend;
import com.google.gerrit.server.index.change.ChangeIndex;
import com.google.gerrit.server.index.change.ChangeIndexCollection;
@@ -2922,14 +2924,19 @@ public class ChangeIT extends AbstractDaemonTest {
public void customCommitFooters() throws Exception {
PushOneCommit.Result change = createChange();
ChangeInfo actual;
- try (Registration registration =
- extensionRegistry
- .newRegistration()
- .add(
- (newCommitMessage, original, mergeTip, destination) -> {
- assertThat(original.getName()).isNotEqualTo(mergeTip.getName());
- return newCommitMessage + "Custom: " + destination.branch();
- })) {
+ ChangeMessageModifier link =
+ new ChangeMessageModifier() {
+ @Override
+ public String onSubmit(
+ String newCommitMessage,
+ RevCommit original,
+ RevCommit mergeTip,
+ BranchNameKey destination) {
+ assertThat(original.getName()).isNotEqualTo(mergeTip.getName());
+ return newCommitMessage + "Custom: " + destination.branch();
+ }
+ };
+ try (Registration registration = extensionRegistry.newRegistration().add(link)) {
actual = gApi.changes().id(change.getChangeId()).get(ALL_REVISIONS, COMMIT_FOOTERS);
}
List footers =
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
index 839b0519cf..7662a54618 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
@@ -1573,7 +1573,8 @@ public class RevisionIT extends AbstractDaemonTest {
PatchSetWebLink link =
new PatchSetWebLink() {
@Override
- public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
+ public WebLinkInfo getPatchSetWebLink(
+ String projectName, String commit, String subject, String branchName) {
return expectedWebLinkInfo;
}
};