Merge branch 'stable-3.6'
* stable-3.6:
Update issue tracker URL in pom.xml files
polygerrit-ui/README.md: Update link to issues
Update issue numbers and links
Fix parsing legacy labels for users with comma
Change-Id: Iaf0f98a01481971069f90b5e8282f5ee530ae018
Forward-Compatible: checked
Release-Notes: skip
diff --git a/java/com/google/gerrit/server/comment/CommentContextLoader.java b/java/com/google/gerrit/server/comment/CommentContextLoader.java
index 8fbb259..9a1710d 100644
--- a/java/com/google/gerrit/server/comment/CommentContextLoader.java
+++ b/java/com/google/gerrit/server/comment/CommentContextLoader.java
@@ -200,7 +200,7 @@
Text src, Range commentRange, int contextPadding, String contentType) {
if (commentRange.start() < 1 || commentRange.end() - 1 > src.size()) {
// TODO(ghareeb): We should throw an exception in this case. See
- // https://bugs.chromium.org/p/gerrit/issues/detail?id=14102 which is an example where the
+ // https://issues.gerritcodereview.com/issues/40013461 which is an example where the
// diff contains an extra line not in the original file.
return CommentContext.empty();
}
diff --git a/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java b/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java
index e526a8b..178cf9b 100644
--- a/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java
+++ b/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java
@@ -24,6 +24,7 @@
import com.google.gson.Gson;
import com.google.inject.Inject;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -62,6 +63,7 @@
static final String GERRIT_USER_TEMPLATE = "Gerrit User %d";
private static final Gson gson = OutputFormat.JSON_COMPACT.newGson();
+ private static final String LABEL_VOTE_UUID_SEPARATOR = ", ";
private final ChangeNoteJson changeNoteJson;
private final String serverId;
@@ -305,65 +307,120 @@
}
/**
- * Parses {@link ParsedPatchSetApproval} from {@link #FOOTER_LABEL} line.
+ * Delegates parsing of {@link ParsedPatchSetApproval} from {@link #FOOTER_LABEL} line to
+ * dedicated methods: {@link #parseAddedApproval} and {@link #parseRemovedApproval}
+ * correspondingly.
+ */
+ public static ParsedPatchSetApproval parseApproval(String footerLine)
+ throws ConfigInvalidException {
+ try {
+ return footerLine.startsWith("-")
+ ? parseRemovedApproval(footerLine)
+ : parseAddedApproval(footerLine);
+ } catch (StringIndexOutOfBoundsException ex) {
+ throw parseException(FOOTER_LABEL, footerLine, ex);
+ }
+ }
+
+ /**
+ * Parses added {@link ParsedPatchSetApproval} from {@link #FOOTER_LABEL} line.
*
* <p>Valid added approval footer examples:
*
* <ul>
- * <li>Label: <LABEL>=VOTE
- * <li>Label: <LABEL>=VOTE <Gerrit Account>
- * <li>Label: <LABEL>=VOTE, <UUID>
- * <li>Label: <LABEL>=VOTE, <UUID> <Gerrit Account>
+ * <li>Label: <LABEL>=VOTE
+ * <li>Label: <LABEL>=VOTE <Gerrit Account>
+ * <li>Label: <LABEL>=VOTE, <UUID>
+ * <li>Label: <LABEL>=VOTE, <UUID> <Gerrit Account>
* </ul>
*
- * <p>Valid removed approval footer examples:
- *
- * <ul>
- * <li>-<LABEL>
- * <li>-<LABEL> <Gerrit Account>
- * </ul>
- *
- * <p><UUID> is optional, since the approval might have been granted before {@link
+ * <p><UUID> is optional, since the approval might have been granted before {@link
* com.google.gerrit.entities.PatchSetApproval.UUID} was introduced.
*
* <p><Gerrit Account> is only persisted in cases, when the account, that granted the vote does
* not match the account, that issued {@link ChangeUpdate} (created this NoteDB commit).
*/
- public static ParsedPatchSetApproval parseApproval(String footerLine)
+ private static ParsedPatchSetApproval parseAddedApproval(String footerLine)
throws ConfigInvalidException {
- try {
- ParsedPatchSetApproval.Builder rawPatchSetApproval =
- ParsedPatchSetApproval.builder().footerLine(footerLine);
- String labelVoteStr;
- boolean isRemoval = footerLine.startsWith("-");
- rawPatchSetApproval.isRemoval(isRemoval);
- int uuidStart = isRemoval ? -1 : footerLine.indexOf(", ");
- int reviewerStart = footerLine.indexOf(' ', uuidStart != -1 ? uuidStart + 2 : 0);
- int labelStart = isRemoval ? 1 : 0;
- checkFooter(!isRemoval || uuidStart == -1, FOOTER_LABEL, footerLine);
+ ParsedPatchSetApproval.Builder rawPatchSetApproval =
+ ParsedPatchSetApproval.builder().footerLine(footerLine);
+ rawPatchSetApproval.isRemoval(false);
+ // We need some additional logic to differentiate between labels that have a UUID and those that
+ // have a user with a comma. This allows us to separate the following cases (note that the
+ // leading `Label: ` has been elided at this point):
+ // Label: <LABEL>=VOTE, <UUID> <Gerrit Account>
+ // Label: <LABEL>=VOTE <Gerrit, Account>
+ int reviewerStartOffset = 0;
+ int scoreStart = footerLine.indexOf('=') + 1;
+ StringBuilder labelNameScore = new StringBuilder(footerLine.substring(0, scoreStart));
+ for (int i = scoreStart; i < footerLine.length(); i++) {
+ char currentChar = footerLine.charAt(i);
- if (uuidStart != -1) {
- String uuid =
- footerLine.substring(
- uuidStart + 2, reviewerStart > 0 ? reviewerStart : footerLine.length());
+ // If we hit ',' before ' ' we have a UUID
+ if (currentChar == ',') {
+ labelNameScore.append(footerLine, scoreStart, i);
+ int uuidStart = i + LABEL_VOTE_UUID_SEPARATOR.length();
+ int uuidEnd = footerLine.indexOf(' ', uuidStart);
+ String uuid = footerLine.substring(uuidStart, uuidEnd > 0 ? uuidEnd : footerLine.length());
checkFooter(!Strings.isNullOrEmpty(uuid), FOOTER_LABEL, footerLine);
- labelVoteStr = footerLine.substring(labelStart, uuidStart);
rawPatchSetApproval.uuid(Optional.of(uuid));
- } else if (reviewerStart != -1) {
- labelVoteStr = footerLine.substring(labelStart, reviewerStart);
- } else {
- labelVoteStr = footerLine.substring(labelStart);
+ reviewerStartOffset = uuidStart + uuid.length();
+ break;
}
- rawPatchSetApproval.labelVote(labelVoteStr);
- if (reviewerStart > 0) {
- String ident = footerLine.substring(reviewerStart + 1);
- rawPatchSetApproval.accountIdent(Optional.of(ident));
+ // Otherwise we don't
+ if (currentChar == ' ') {
+ labelNameScore.append(footerLine, scoreStart, i);
+ break;
}
- return rawPatchSetApproval.build();
- } catch (StringIndexOutOfBoundsException ex) {
- throw parseException(FOOTER_LABEL, footerLine, ex);
+
+ // If we hit neither we're defensive assign the whole line
+ if (i == footerLine.length() - 1) {
+ labelNameScore = new StringBuilder(footerLine);
+ break;
+ }
}
+
+ rawPatchSetApproval.labelVote(labelNameScore.toString());
+
+ int reviewerStart = footerLine.indexOf(' ', reviewerStartOffset);
+ if (reviewerStart > 0) {
+ String ident = footerLine.substring(reviewerStart + 1);
+ rawPatchSetApproval.accountIdent(Optional.of(ident));
+ }
+ return rawPatchSetApproval.build();
+ }
+
+ /**
+ * Parses removed {@link ParsedPatchSetApproval} from {@link #FOOTER_LABEL} line.
+ *
+ * <p>Valid removed approval footer examples:
+ *
+ * <ul>
+ * <li>-<LABEL>
+ * <li>-<LABEL> <Gerrit Account>
+ * </ul>
+ *
+ * <p><Gerrit Account> is only persisted in cases, when the account, that granted the vote
+ * does not match the account, that issued {@link ChangeUpdate} (created this NoteDB commit).
+ */
+ private static ParsedPatchSetApproval parseRemovedApproval(String footerLine) {
+ ParsedPatchSetApproval.Builder rawPatchSetApproval =
+ ParsedPatchSetApproval.builder().footerLine(footerLine);
+ rawPatchSetApproval.isRemoval(true);
+ int labelStart = 1;
+ int reviewerStart = footerLine.indexOf(' ', labelStart);
+
+ rawPatchSetApproval.labelVote(
+ reviewerStart != -1
+ ? footerLine.substring(labelStart, reviewerStart)
+ : footerLine.substring(labelStart));
+
+ if (reviewerStart > 0) {
+ String ident = footerLine.substring(reviewerStart + 1);
+ rawPatchSetApproval.accountIdent(Optional.of(ident));
+ }
+ return rawPatchSetApproval.build();
}
/**
@@ -396,8 +453,8 @@
boolean isRemoval = labelLine.startsWith("-");
rawPatchSetApproval.isRemoval(isRemoval);
int labelStart = isRemoval ? 1 : 0;
- int uuidStart = isRemoval ? -1 : labelLine.indexOf(", ");
int tagStart = isRemoval ? -1 : labelLine.indexOf(":\"");
+ int uuidStart = parseCopiedApprovalUuidStart(labelLine, tagStart);
checkFooter(!isRemoval || uuidStart == -1, FOOTER_LABEL, labelLine);
@@ -406,7 +463,9 @@
uuidStart = -1;
}
- int identitiesStart = labelLine.indexOf(' ', uuidStart != -1 ? uuidStart + 2 : 0);
+ int identitiesStart =
+ labelLine.indexOf(
+ ' ', uuidStart != -1 ? uuidStart + LABEL_VOTE_UUID_SEPARATOR.length() : 0);
checkFooter(
identitiesStart != -1 && identitiesStart < labelLine.length(),
FOOTER_COPIED_LABEL,
@@ -422,10 +481,9 @@
}
// The first account is the accountId, and second (if applicable) is the realAccountId.
List<String> identities =
- Splitter.on(',')
- .splitToList(
- labelLine.substring(
- identitiesStart + 1, tagStart == -1 ? labelLine.length() : tagStart));
+ parseIdentities(
+ labelLine.substring(
+ identitiesStart + 1, tagStart == -1 ? labelLine.length() : tagStart));
checkFooter(identities.size() >= 1, FOOTER_COPIED_LABEL, labelLine);
rawPatchSetApproval.accountIdent(Optional.of(identities.get(0)));
@@ -446,6 +504,41 @@
}
}
+ // Return the UUID start index or -1 if no UUID is present
+ private static int parseCopiedApprovalUuidStart(String line, int tagStart) {
+ int separatorIndex = line.indexOf(LABEL_VOTE_UUID_SEPARATOR);
+
+ // The first part of the condition checks whether the footer has the following format:
+ // Copied-Label: <LABEL>=VOTE <Gerrit Account>,<Gerrit Real Account> :"<TAG>"
+ // Weird tag that contains uuid delimiter. The uuid is actually not present.
+ if ((tagStart != -1 && separatorIndex > tagStart)
+ ||
+
+ // The second part of the condition allows us to distinguish the following two lines:
+ // Label2=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 1 <1@gerrit>
+ // Label2=+1 User Name (company_name, department) <2@gerrit>
+ (line.indexOf(' ') < separatorIndex)) {
+ return -1;
+ }
+ return separatorIndex;
+ }
+
+ // Splitting on "," breaks for identities containing commas. The below re-implements splitting on
+ // "(?<=>),", but it's 3-5x faster, as performance matters here.
+ private static List<String> parseIdentities(String line) {
+ List<String> idents = Splitter.on(',').splitToList(line);
+ List<String> identitiesList = new ArrayList<>();
+ for (int i = 0; i < idents.size(); i++) {
+ if (i == 0 || idents.get(i - 1).endsWith(">")) {
+ identitiesList.add(idents.get(i));
+ } else {
+ int lastIndex = identitiesList.size() - 1;
+ identitiesList.set(lastIndex, identitiesList.get(lastIndex) + "," + idents.get(i));
+ }
+ }
+ return identitiesList;
+ }
+
private static void checkFooter(boolean expr, FooterKey footer, String actual)
throws ConfigInvalidException {
if (!expr) {
diff --git a/java/com/google/gerrit/server/patch/DiffOperationsImpl.java b/java/com/google/gerrit/server/patch/DiffOperationsImpl.java
index 86f122e..b57ab60 100644
--- a/java/com/google/gerrit/server/patch/DiffOperationsImpl.java
+++ b/java/com/google/gerrit/server/patch/DiffOperationsImpl.java
@@ -315,7 +315,7 @@
DiffAlgorithm.HISTOGRAM_NO_FALLBACK,
// We don't enforce timeouts with the fallback algorithm. Timeouts were introduced
// because of a bug in JGit that happens only when the histogram algorithm uses
- // Myers as fallback. See https://bugs.chromium.org/p/gerrit/issues/detail?id=487
+ // Myers as fallback. See https://issues.gerritcodereview.com/issues/40000618
/* useTimeout= */ false,
key.whitespace());
fallbackKeys.add(fallbackKey);
diff --git a/java/com/google/gerrit/server/patch/PatchList.java b/java/com/google/gerrit/server/patch/PatchList.java
index b983fb8..4efbc69 100644
--- a/java/com/google/gerrit/server/patch/PatchList.java
+++ b/java/com/google/gerrit/server/patch/PatchList.java
@@ -55,7 +55,7 @@
* We use the ChangeType comparator for a rare case when PatchList contains two entries for the
* same file, e.g. {ADDED, DELETED}. We return a single entry according to the following order.
* Check the following bug for an example case:
- * https://bugs.chromium.org/p/gerrit/issues/detail?id=13914.
+ * https://issues.gerritcodereview.com/issues/40013315.
*/
@VisibleForTesting
static class ChangeTypeCmp implements Comparator<ChangeType> {
diff --git a/java/com/google/gerrit/server/patch/gitfilediff/GitFileDiffCacheImpl.java b/java/com/google/gerrit/server/patch/gitfilediff/GitFileDiffCacheImpl.java
index 2b856fb..0cfaa66 100644
--- a/java/com/google/gerrit/server/patch/gitfilediff/GitFileDiffCacheImpl.java
+++ b/java/com/google/gerrit/server/patch/gitfilediff/GitFileDiffCacheImpl.java
@@ -358,7 +358,7 @@
});
try {
// We employ the timeout because of a bug in Myers diff in JGit. See
- // bugs.chromium.org/p/gerrit/issues/detail?id=487 for more details. The bug may happen
+ // https://issues.gerritcodereview.com/issues/40000618 for more details. The bug may happen
// if the algorithm used in diffs is HISTOGRAM_WITH_FALLBACK_MYERS.
return fileDiffFuture.get(timeoutMillis, TimeUnit.MILLISECONDS);
} catch (InterruptedException | TimeoutException e) {
diff --git a/java/com/google/gerrit/server/restapi/change/Move.java b/java/com/google/gerrit/server/restapi/change/Move.java
index c1b36d7..57ce75a 100644
--- a/java/com/google/gerrit/server/restapi/change/Move.java
+++ b/java/com/google/gerrit/server/restapi/change/Move.java
@@ -113,7 +113,7 @@
throws RestApiException, UpdateException, PermissionBackendException, IOException {
if (!moveEnabled) {
// This will be removed with the above config once we reach consensus for the move change
- // behavior. See: https://bugs.chromium.org/p/gerrit/issues/detail?id=9877
+ // behavior. See: https://issues.gerritcodereview.com/issues/40009784
throw new MethodNotAllowedException("move changes endpoint is disabled");
}
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RevisionDiffIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RevisionDiffIT.java
index 1919810..f347e19 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RevisionDiffIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RevisionDiffIT.java
@@ -1035,7 +1035,7 @@
public void intralineEditsAreIdentified() throws Exception {
// In some corner cases, intra-line diffs produce wrong results. In this case, the algorithm
// falls back to a single edit covering the whole range.
- // See: bugs.chromium.org/p/gerrit/issues/detail?id=13563
+ // See: https://issues.gerritcodereview.com/issues/40013030
assume().that(intraline).isTrue();
diff --git a/javatests/com/google/gerrit/server/notedb/ChangeNotesParserTest.java b/javatests/com/google/gerrit/server/notedb/ChangeNotesParserTest.java
index 79a65fd..546bb18 100644
--- a/javatests/com/google/gerrit/server/notedb/ChangeNotesParserTest.java
+++ b/javatests/com/google/gerrit/server/notedb/ChangeNotesParserTest.java
@@ -139,6 +139,7 @@
+ "Label: Label2=1\n"
+ "Label: Label3=0\n"
+ "Label: Label4=-1\n"
+ + "Label: Label1=+1 Gerrit User 1 (name,with, comma) <1@gerrit>\n"
+ "Subject: This is a test change\n");
assertParseSucceeds(
"Update change\n"
@@ -168,6 +169,7 @@
+ "Label: Label1=+1, 577fb248e474018276351785930358ec0450e9f7\n"
+ "Label: Label1=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 2 <2@gerrit>\n"
+ "Label: Label1=0, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 2 <2@gerrit>\n"
+ + "Label: Label1=0, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 3 (name,with, comma) <3@gerrit>\n"
+ "Subject: This is a test change\n");
assertParseSucceeds(
@@ -207,6 +209,8 @@
+ "Copied-Label: Label4=+1 Account <1@gerrit> :\"tag with characters %^#@^( *::!\"\n"
+ "Copied-Label: -Label1 Account <1@gerrit>,Other Account <2@gerrit>\\n"
+ "Copied-Label: -Label1 Account <1@gerrit>\n"
+ + "Copied-Label: Label1=+1 Gerrit User 1 (name,with, comma) <1@gerrit>\n"
+ + "Copied-Label: Label2=+1 Gerrit User 1 (name,with, comma) <1@gerrit>,Gerrit User 2 (name,with, comma) <2@gerrit>\n"
+ "Subject: This is a test change\n");
assertParseFails("Update change\n\nPatch-set: 1\nCopied-Label: Label1=X\n");
@@ -241,6 +245,7 @@
+ "Copied-Label: Label4=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 1 <1@gerrit> :\"tag with uuid delimiter , \"\n"
+ "Copied-Label: Label4=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 1 <1@gerrit>,Gerrit User 2 <2@gerrit> :\"tag with characters %^#@^( *::!\"\n"
+ "Copied-Label: Label4=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 1 <1@gerrit>,Gerrit User 2 <2@gerrit> :\"tag with uuid delimiter , \"\n"
+ + "Copied-Label: Label4=+1, 577fb248e474018276351785930358ec0450e9f7 Gerrit User 1 (name,with, comma) <2@gerrit>,Gerrit User 3 (name,with, comma) <3@gerrit>\n"
+ "Subject: This is a test change\n");
assertParseSucceeds(
diff --git a/polygerrit-ui/README.md b/polygerrit-ui/README.md
index ac8712b..d599230 100644
--- a/polygerrit-ui/README.md
+++ b/polygerrit-ui/README.md
@@ -427,7 +427,9 @@
## Contributing
-Our users report bugs / feature requests related to the UI through [Monorail Issues - PolyGerrit](https://bugs.chromium.org/p/gerrit/issues/list?q=component%3APolyGerrit).
+Our users report bugs / feature requests related to the UI through the Gerrit
+Tracker on the [WebFrontend](https://issues.gerritcodereview.com/issues?q=componentid:1369968)
+component.
If you want to help, feel free to grab one from those `New` issues without
assignees and send us a change.
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
index 524578e..506e086 100644
--- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
@@ -1846,7 +1846,7 @@
}
// TODO(rmistry): Redo this after
- // https://bugs.chromium.org/p/gerrit/issues/detail?id=4671 is resolved.
+ // https://issues.gerritcodereview.com/issues/40004936 is resolved.
// private but used in test
setReviewOnRevert(newChangeId: NumericChangeId) {
const review = this.jsAPI.getReviewPostRevert(this.change);
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
index 9343fb9..e9ee340 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
@@ -616,7 +616,7 @@
// private but used in test
createHeaderLink(linkObj: TopMenuItemInfo): MainHeaderLink {
// Delete target property due to complications of
- // https://bugs.chromium.org/p/gerrit/issues/detail?id=5888
+ // https://issues.gerritcodereview.com/issues/40006107
//
// The server tries to guess whether URL is a view within the UI.
// If not, it sets target='_blank' on the menu item. The server
diff --git a/polygerrit-ui/app/elements/shared/gr-select/gr-select.ts b/polygerrit-ui/app/elements/shared/gr-select/gr-select.ts
index 083ec0b..0448a55 100644
--- a/polygerrit-ui/app/elements/shared/gr-select/gr-select.ts
+++ b/polygerrit-ui/app/elements/shared/gr-select/gr-select.ts
@@ -39,7 +39,7 @@
this.nativeSelect.value = String(this.bindValue);
// Async needed for firefox to populate value. It was trying to do it
// before options from a dom-repeat were rendered previously.
- // See https://bugs.chromium.org/p/gerrit/issues/detail?id=7735
+ // See https://issues.gerritcodereview.com/issues/40007948
setTimeout(() => {
this.nativeSelect.value = String(this.bindValue);
}, 1);
@@ -79,7 +79,7 @@
this.nativeSelect.value = this.convert(this.bindValue) ?? '';
// Async needed for firefox to populate value. It was trying to do it
// before options from a dom-repeat were rendered previously.
- // See https://bugs.chromium.org/p/gerrit/issues/detail?id=7735
+ // See https://g-issues.gerritcodereview.com/issues/40007948
setTimeout(() => {
this.nativeSelect.value = this.convert(this.bindValue) ?? '';
}, 1);
diff --git a/tools/maven/gerrit-acceptance-framework_pom.xml b/tools/maven/gerrit-acceptance-framework_pom.xml
index 56b1db2..3c94a67 100644
--- a/tools/maven/gerrit-acceptance-framework_pom.xml
+++ b/tools/maven/gerrit-acceptance-framework_pom.xml
@@ -104,7 +104,7 @@
</mailingLists>
<issueManagement>
- <url>https://bugs.chromium.org/p/gerrit/issues/list</url>
+ <url>https://issues.gerritcodereview.com/issues?q=is:open</url>
<system>Gerrit Issue Tracker</system>
</issueManagement>
</project>
diff --git a/tools/maven/gerrit-extension-api_pom.xml b/tools/maven/gerrit-extension-api_pom.xml
index 3caa6a9..239964b 100644
--- a/tools/maven/gerrit-extension-api_pom.xml
+++ b/tools/maven/gerrit-extension-api_pom.xml
@@ -104,7 +104,7 @@
</mailingLists>
<issueManagement>
- <url>https://bugs.chromium.org/p/gerrit/issues/list</url>
+ <url>https://issues.gerritcodereview.com/issues?q=is:open</url>
<system>Gerrit Issue Tracker</system>
</issueManagement>
</project>
diff --git a/tools/maven/gerrit-plugin-api_pom.xml b/tools/maven/gerrit-plugin-api_pom.xml
index 642f051..7cada14 100644
--- a/tools/maven/gerrit-plugin-api_pom.xml
+++ b/tools/maven/gerrit-plugin-api_pom.xml
@@ -104,7 +104,7 @@
</mailingLists>
<issueManagement>
- <url>https://bugs.chromium.org/p/gerrit/issues/list</url>
+ <url>https://issues.gerritcodereview.com/issues?q=is:open</url>
<system>Gerrit Issue Tracker</system>
</issueManagement>
</project>
diff --git a/tools/maven/gerrit-war_pom.xml b/tools/maven/gerrit-war_pom.xml
index 4f545e9..8d3fcf4 100644
--- a/tools/maven/gerrit-war_pom.xml
+++ b/tools/maven/gerrit-war_pom.xml
@@ -104,7 +104,7 @@
</mailingLists>
<issueManagement>
- <url>https://bugs.chromium.org/p/gerrit/issues/list</url>
+ <url>https://issues.gerritcodereview.com/issues?q=is:open</url>
<system>Gerrit Issue Tracker</system>
</issueManagement>
</project>