Fix links and file name in emails for patchset-level comments Currently, emails that include patchset-level comments will have links to the file /PATCHSET_LEVEL. This is changed in such way that all of those links will now link to the comments tab. Also, the name of the file in the email was /PATCHSET_LEVEL, but now it is "Patchset". There are currently no tests about links being valid, simply because it requires a brute-force string comparison. In my opinion, such a test won't add much value anyway. There is now a test about patchset level email notifications, that confirms that the name /PATCHSET_LEVEL was changed to Patchset Level, and also confirms that any links involving "/PATCHSET_LEVEL" were omitted. Change-Id: I08b6bcaff618ce4a645b1de936339f31d0fe0b15
diff --git a/java/com/google/gerrit/server/config/UrlFormatter.java b/java/com/google/gerrit/server/config/UrlFormatter.java index 6b2510e..8fc0d9e 100644 --- a/java/com/google/gerrit/server/config/UrlFormatter.java +++ b/java/com/google/gerrit/server/config/UrlFormatter.java
@@ -47,6 +47,11 @@ return getWebUrl().map(url -> url + "c/" + project.get() + "/+/" + id.get()); } + /** Returns the URL for viewing the comment tab view of a change. */ + default Optional<String> getCommentsTabView(Change change) { + return getChangeViewUrl(change.getProject(), change.getId()).map(url -> url + "?tab=comments"); + } + /** Returns the URL for viewing a file in a given patch set of a change. */ default Optional<String> getPatchFileView(Change change, int patchsetId, String filename) { return getChangeViewUrl(change.getProject(), change.getId())
diff --git a/java/com/google/gerrit/server/mail/send/CommentSender.java b/java/com/google/gerrit/server/mail/send/CommentSender.java index 48d342e..deaa926 100644 --- a/java/com/google/gerrit/server/mail/send/CommentSender.java +++ b/java/com/google/gerrit/server/mail/send/CommentSender.java
@@ -88,6 +88,11 @@ .orElse(null); } + /** @return a web link to the comment tab view of a change. */ + public String getCommentsTabLink() { + return args.urlFormatter.get().getCommentsTabView(change).orElse(null); + } + /** * @return A title for the group, i.e. "Commit Message", "Merge List", or "File [[filename]]". */ @@ -96,6 +101,8 @@ return "Commit Message"; } else if (Patch.MERGE_LIST.equals(filename)) { return "Merge List"; + } else if (Patch.PATCHSET_LEVEL.equals(filename)) { + return "Patchset"; } else { return "File " + filename; } @@ -379,7 +386,11 @@ for (CommentSender.FileCommentGroup group : getGroupedInlineComments(repo)) { Map<String, Object> groupData = new HashMap<>(); - groupData.put("link", group.getFileLink()); + if (group.filename.equals(Patch.PATCHSET_LEVEL)) { + groupData.put("link", group.getCommentsTabLink()); + } else { + groupData.put("link", group.getFileLink()); + } groupData.put("title", group.getTitle()); groupData.put("patchSetId", group.patchSetId); @@ -407,7 +418,10 @@ commentData.put("startLine", startLine); // Set the comment link. - if (comment.lineNbr == 0) { + + if (comment.key.filename.equals(Patch.PATCHSET_LEVEL)) { + commentData.put("link", group.getCommentsTabLink()); + } else if (comment.lineNbr == 0) { commentData.put("link", group.getFileLink()); } else { commentData.put("link", group.getCommentLink(comment.side, startLine));
diff --git a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java index 4fac821..e48c9d5 100644 --- a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java +++ b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
@@ -212,6 +212,20 @@ } @Test + public void patchsetLevelCommentEmailNotification() throws Exception { + PushOneCommit.Result result = createChange(); + String changeId = result.getChangeId(); + String ps1 = result.getCommit().name(); + + CommentInput comment = newCommentWithOnlyMandatoryFields(PATCHSET_LEVEL, "comment"); + addComments(changeId, ps1, comment); + + String emailBody = Iterables.getOnlyElement(email.getMessages()).body(); + assertThat(emailBody).contains("Patchset"); + assertThat(emailBody).doesNotContain("/PATCHSET_LEVEL"); + } + + @Test public void patchsetLevelCommentCantHaveLine() throws Exception { PushOneCommit.Result result = createChange(); String changeId = result.getChangeId();
diff --git a/polygerrit-ui/app/constants/constants.js b/polygerrit-ui/app/constants/constants.js index 74ebebd..ff34442 100644 --- a/polygerrit-ui/app/constants/constants.js +++ b/polygerrit-ui/app/constants/constants.js
@@ -21,6 +21,9 @@ */ export const PrimaryTab = { FILES: 'files', + /** + * When renaming this, the links in UrlFormatter must be updated. + */ COMMENT_THREADS: 'comments', FINDINGS: 'findings', };