Merge changes from topic "fix-build-on-M1-mac" into stable-3.3
* changes:
Bazel: Bump rules_nodejs version to 5.1.0
Bump rules_nodejs to version 3.0.0
diff --git a/Documentation/dev-release-deploy-config.txt b/Documentation/dev-release-deploy-config.txt
index a4ccccf..db08da5 100644
--- a/Documentation/dev-release-deploy-config.txt
+++ b/Documentation/dev-release-deploy-config.txt
@@ -44,15 +44,13 @@
+
Generate and publish a PGP key as described in
link:http://central.sonatype.org/pages/working-with-pgp-signatures.html[
-Working with PGP Signatures,role=external,window=_blank]. In addition to the keyserver mentioned
-there it is recommended to also publish the key to the
-link:https://keyserver.ubuntu.com/[Ubuntu key server].
+Working with PGP Signatures,role=external,window=_blank].
+
Please be aware that after publishing your public key it may take a
while until it is visible to the Sonatype server.
+
Add an entry for the public key in the
-link:https://gerrit.googlesource.com/homepage/+/md-pages/releases/public-keys.md[key list,role=external,window=_blank]
+link:https://gerrit.googlesource.com/homepage/+/master/pages/site/releases/public-keys.md[key list,role=external,window=_blank]
on the homepage.
+
The PGP passphrase can be put in `~/.m2/settings.xml`:
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 2bfb5d5..32bfc6b 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -74,8 +74,8 @@
link:user-search.html#_search_operators[query string] must be provided
by the `q` parameter. The `n` parameter can be used to limit the
returned results. The `no-limit` parameter can be used remove the default
-limit on queries and return all results. This might not be supported by
-all index backends.
+limit on queries and return all results (does not apply to anonymous requests).
+This might not be supported by all index backends.
As result a list of link:#change-info[ChangeInfo] entries is returned.
The change output is sorted by the last update time, most recently
diff --git a/WORKSPACE b/WORKSPACE
index 882beed..b664fe0 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -258,32 +258,6 @@
sha1 = "28c59f58f5adcc307604602e2aa89e2aca14c554",
)
-SLF4J_VERS = "1.7.33"
-
-maven_jar(
- name = "log-api",
- artifact = "org.slf4j:slf4j-api:" + SLF4J_VERS,
- sha1 = "d375aa1b98d34d5ddf73a3f19eaad66e98975b12",
-)
-
-maven_jar(
- name = "log-ext",
- artifact = "org.slf4j:slf4j-ext:" + SLF4J_VERS,
- sha1 = "00da03640ae1ad57f964dcaa542fb5d804dce8a6",
-)
-
-maven_jar(
- name = "impl-log4j",
- artifact = "org.slf4j:slf4j-reload4j:" + SLF4J_VERS,
- sha1 = "ddc89144bfb56781936120b2334a70869b68db6d",
-)
-
-maven_jar(
- name = "jcl-over-slf4j",
- artifact = "org.slf4j:jcl-over-slf4j:" + SLF4J_VERS,
- sha1 = "28c441128bc81b6d95cc2857ae5bb46ae5bf658b",
-)
-
maven_jar(
name = "json-smart",
artifact = "net.minidev:json-smart:1.1.1",
diff --git a/antlr3/BUILD b/antlr3/BUILD
index 549946a..23641e3 100644
--- a/antlr3/BUILD
+++ b/antlr3/BUILD
@@ -22,6 +22,7 @@
srcs = [":query"],
visibility = [
"//java/com/google/gerrit/index:__subpackages__",
+ "//java/com/google/gerrit/server:__subpackages__",
"//javatests/com/google/gerrit:__subpackages__",
"//javatests/com/google/gerrit/index:__pkg__",
"//plugins:__pkg__",
diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java
index 93cf0de..904490c 100644
--- a/java/com/google/gerrit/server/StarredChangesUtil.java
+++ b/java/com/google/gerrit/server/StarredChangesUtil.java
@@ -389,18 +389,24 @@
TraceContext.newTimer(
"Read star labels", Metadata.builder().noteDbRefName(refName).build())) {
Ref ref = repo.exactRef(refName);
- if (ref == null) {
- return StarRef.MISSING;
- }
+ return readLabels(repo, ref);
+ }
+ }
- try (ObjectReader reader = repo.newObjectReader()) {
- ObjectLoader obj = reader.open(ref.getObjectId(), Constants.OBJ_BLOB);
- return StarRef.create(
- ref,
- Splitter.on(CharMatcher.whitespace())
- .omitEmptyStrings()
- .split(new String(obj.getCachedBytes(Integer.MAX_VALUE), UTF_8)));
- }
+ public static StarRef readLabels(Repository repo, Ref ref) throws IOException {
+ if (ref == null) {
+ return StarRef.MISSING;
+ }
+ try (TraceTimer traceTimer =
+ TraceContext.newTimer(
+ String.format("Read star labels from %s (without ref lookup)", ref.getName()));
+ ObjectReader reader = repo.newObjectReader()) {
+ ObjectLoader obj = reader.open(ref.getObjectId(), Constants.OBJ_BLOB);
+ return StarRef.create(
+ ref,
+ Splitter.on(CharMatcher.whitespace())
+ .omitEmptyStrings()
+ .split(new String(obj.getCachedBytes(Integer.MAX_VALUE), UTF_8)));
}
}
diff --git a/java/com/google/gerrit/server/account/AccountDeactivator.java b/java/com/google/gerrit/server/account/AccountDeactivator.java
index b12e585..ea327f8 100644
--- a/java/com/google/gerrit/server/account/AccountDeactivator.java
+++ b/java/com/google/gerrit/server/account/AccountDeactivator.java
@@ -117,7 +117,7 @@
return true;
}
} catch (ResourceConflictException e) {
- logger.atInfo().log("Account %s already deactivated, continuing...", userName);
+ logger.atInfo().withCause(e).log("Account %s already deactivated, continuing...", userName);
} catch (Exception e) {
logger.atSevere().withCause(e).log(
"Error deactivating account: %s (%s) %s",
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalId.java b/java/com/google/gerrit/server/account/externalids/ExternalId.java
index 1d31da9..71ce4d8 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalId.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalId.java
@@ -112,8 +112,10 @@
private static final String PASSWORD_KEY = "password";
/**
- * Scheme used for {@link AuthType#LDAP}, {@link AuthType#CLIENT_SSL_CERT_LDAP}, {@link
- * AuthType#HTTP_LDAP}, and {@link AuthType#LDAP_BIND} usernames.
+ * Scheme used to label accounts created, when using the LDAP-based authentication types {@link
+ * AuthType#LDAP}, {@link AuthType#CLIENT_SSL_CERT_LDAP}, {@link AuthType#HTTP_LDAP}, and {@link
+ * AuthType#LDAP_BIND}. The external ID stores the username. Accounts with such an external ID
+ * will be authenticated against the configured LDAP identity provider.
*
* <p>The name {@code gerrit:} was a very poor choice.
*
diff --git a/java/com/google/gerrit/server/change/ResetCherryPickOp.java b/java/com/google/gerrit/server/change/ResetCherryPickOp.java
new file mode 100644
index 0000000..d1177d4
--- /dev/null
+++ b/java/com/google/gerrit/server/change/ResetCherryPickOp.java
@@ -0,0 +1,37 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.change;
+
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.extensions.restapi.RestApiException;
+import com.google.gerrit.server.notedb.ChangeUpdate;
+import com.google.gerrit.server.update.BatchUpdateOp;
+import com.google.gerrit.server.update.ChangeContext;
+
+/** Reset cherryPickOf to an empty value. */
+public class ResetCherryPickOp implements BatchUpdateOp {
+
+ @Override
+ public boolean updateChange(ChangeContext ctx) throws RestApiException {
+ Change change = ctx.getChange();
+ if (change.getCherryPickOf() == null) {
+ return false;
+ }
+
+ ChangeUpdate update = ctx.getUpdate(change.currentPatchSetId());
+ update.resetCherryPickOf();
+ return true;
+ }
+}
diff --git a/java/com/google/gerrit/server/git/validators/CommitValidators.java b/java/com/google/gerrit/server/git/validators/CommitValidators.java
index c67df8b..f84b696 100644
--- a/java/com/google/gerrit/server/git/validators/CommitValidators.java
+++ b/java/com/google/gerrit/server/git/validators/CommitValidators.java
@@ -266,6 +266,12 @@
"multiple Change-Id lines in message footer";
private static final String INVALID_CHANGE_ID_MSG =
"invalid Change-Id line format in message footer";
+ private static final String HTTP_INSTALL_HOOK =
+ "f=\"$(git rev-parse --git-dir)/hooks/commit-msg\"; curl -o \"$f\""
+ + " %stools/hooks/commit-msg ; chmod +x \"$f\"";
+ private static final String SSH_INSTALL_HOOK =
+ "gitdir=$(git rev-parse --git-dir); scp -p -P %d %s@%s:hooks/commit-msg ${gitdir}/hooks/";
+ private static final String CHANGE_ID_MISSING_INSTALL_HOOKS = " %s\nor, for http(s):\n %s";
@VisibleForTesting
public static final String CHANGE_ID_MISMATCH_MSG =
@@ -372,14 +378,15 @@
// If there are no SSH keys, the commit-msg hook must be installed via
// HTTP(S)
Optional<String> webUrl = urlFormatter.getWebUrl();
+
+ String httpHook = String.format(HTTP_INSTALL_HOOK, webUrl.get());
+
if (hostKeys.isEmpty()) {
checkState(webUrl.isPresent());
- return String.format(
- " f=\"$(git rev-parse --git-dir)/hooks/commit-msg\"; curl -o \"$f\" %stools/hooks/commit-msg ; chmod +x \"$f\"",
- webUrl.get());
+ return httpHook;
}
- // SSH keys exist, so the hook can be installed with scp.
+ // SSH keys exist, so the hook might be able to be installed with scp.
String sshHost;
int sshPort;
String host = hostKeys.get(0).getHost();
@@ -397,9 +404,10 @@
sshPort = 22;
}
- return String.format(
- " gitdir=$(git rev-parse --git-dir); scp -p -P %d %s@%s:hooks/commit-msg ${gitdir}/hooks/",
- sshPort, user.getUserName().orElse("<USERNAME>"), sshHost);
+ String sshHook =
+ String.format(
+ SSH_INSTALL_HOOK, sshPort, user.getUserName().orElse("<USERNAME>"), sshHost);
+ return String.format(CHANGE_ID_MISSING_INSTALL_HOOKS, sshHook, httpHook);
}
}
diff --git a/java/com/google/gerrit/server/mail/send/ChangeEmail.java b/java/com/google/gerrit/server/mail/send/ChangeEmail.java
index 8d76e23..7890d35 100644
--- a/java/com/google/gerrit/server/mail/send/ChangeEmail.java
+++ b/java/com/google/gerrit/server/mail/send/ChangeEmail.java
@@ -397,14 +397,24 @@
@Override
protected void add(RecipientType rt, Account.Id to) {
- Optional<AccountState> accountState = args.accountCache.get(to);
- if (!accountState.isPresent()) {
- return;
- }
- if (accountState.get().generalPreferences().getEmailStrategy()
- == EmailStrategy.ATTENTION_SET_ONLY
- && !currentAttentionSet.contains(to)) {
- return;
+ addRecipient(rt, to, /* isWatcher= */ false);
+ }
+
+ /** This bypasses the EmailStrategy.ATTENTION_SET_ONLY strategy when adding the recipient. */
+ @Override
+ protected void addWatcher(RecipientType rt, Account.Id to) {
+ addRecipient(rt, to, /* isWatcher= */ true);
+ }
+
+ private void addRecipient(RecipientType rt, Account.Id to, boolean isWatcher) {
+ if (!isWatcher) {
+ Optional<AccountState> accountState = args.accountCache.get(to);
+ if (accountState.isPresent()
+ && accountState.get().generalPreferences().getEmailStrategy()
+ == EmailStrategy.ATTENTION_SET_ONLY
+ && !currentAttentionSet.contains(to)) {
+ return;
+ }
}
if (emailOnlyAuthors && !authors.contains(to)) {
return;
diff --git a/java/com/google/gerrit/server/mail/send/CreateChangeSender.java b/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
index b78dc62..2ab73a8 100644
--- a/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
+++ b/java/com/google/gerrit/server/mail/send/CreateChangeSender.java
@@ -60,7 +60,7 @@
// TODO(hiesel): Remove special handling for owners
StreamSupport.stream(matching.all().accounts.spliterator(), false)
.filter(this::isOwnerOfProjectOrBranch)
- .forEach(acc -> add(RecipientType.TO, acc));
+ .forEach(acc -> addWatcher(RecipientType.TO, acc));
// Add everyone else. Owners added above will not be duplicated.
add(RecipientType.TO, matching.to);
add(RecipientType.CC, matching.cc);
diff --git a/java/com/google/gerrit/server/mail/send/NotificationEmail.java b/java/com/google/gerrit/server/mail/send/NotificationEmail.java
index 5ffd928..91310ce 100644
--- a/java/com/google/gerrit/server/mail/send/NotificationEmail.java
+++ b/java/com/google/gerrit/server/mail/send/NotificationEmail.java
@@ -82,13 +82,15 @@
/** Add users or email addresses to the TO, CC, or BCC list. */
protected void add(RecipientType type, Watchers.List list) {
for (Account.Id user : list.accounts) {
- add(type, user);
+ addWatcher(type, user);
}
for (Address addr : list.emails) {
add(type, addr);
}
}
+ protected abstract void addWatcher(RecipientType type, Account.Id to);
+
public String getSshHost() {
String host = Iterables.getFirst(args.sshAddresses, null);
if (host == null) {
diff --git a/java/com/google/gerrit/server/notedb/ChangeNotesParser.java b/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
index 78ba243..6f9f7e8 100644
--- a/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
+++ b/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
@@ -55,6 +55,7 @@
import com.google.common.collect.Tables;
import com.google.common.flogger.FluentLogger;
import com.google.common.primitives.Ints;
+import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.Address;
import com.google.gerrit.entities.AttentionSetUpdate;
@@ -153,7 +154,10 @@
private ReviewerByEmailSet pendingReviewersByEmail;
private Change.Id revertOf;
private int updateCount;
- private PatchSet.Id cherryPickOf;
+ // Null indicates that the field was not parsed (yet).
+ // We only set the value once, based on the latest update (the actual value or Optional.empty() if
+ // the latest record unsets the field).
+ private Optional<PatchSet.Id> cherryPickOf;
ChangeNotesParser(
Change.Id changeId,
@@ -254,7 +258,7 @@
firstNonNull(workInProgress, false),
firstNonNull(hasReviewStarted, true),
revertOf,
- cherryPickOf,
+ cherryPickOf != null ? cherryPickOf.orElse(null) : null,
updateCount);
}
@@ -999,15 +1003,31 @@
return Change.id(revertOf);
}
- private PatchSet.Id parseCherryPickOf(ChangeNotesCommit commit) throws ConfigInvalidException {
- String cherryPickOf = parseOneFooter(commit, FOOTER_CHERRY_PICK_OF);
- if (cherryPickOf == null) {
+ /**
+ * Parses {@link ChangeNoteUtil#FOOTER_CHERRY_PICK_OF} of the commit.
+ *
+ * @param commit the commit to parse.
+ * @return {@link Optional} value of the parsed footer or {@code null} if the footer is missing in
+ * this commit.
+ * @throws ConfigInvalidException if the footer value could not be parsed as a valid {@link
+ * PatchSet.Id}.
+ */
+ @Nullable
+ private Optional<PatchSet.Id> parseCherryPickOf(ChangeNotesCommit commit)
+ throws ConfigInvalidException {
+ String footer = parseOneFooter(commit, FOOTER_CHERRY_PICK_OF);
+ if (footer == null) {
+ // The footer is missing, nothing to parse.
return null;
- }
- try {
- return PatchSet.Id.parse(cherryPickOf);
- } catch (IllegalArgumentException e) {
- throw new ConfigInvalidException("\"" + cherryPickOf + "\" is not a valid patchset", e);
+ } else if (footer.equals("")) {
+ // Empty footer value, cherryPickOf was unset at this commit.
+ return Optional.empty();
+ } else {
+ try {
+ return Optional.of(PatchSet.Id.parse(footer));
+ } catch (IllegalArgumentException e) {
+ throw new ConfigInvalidException("\"" + footer + "\" is not a valid patchset", e);
+ }
}
}
diff --git a/java/com/google/gerrit/server/notedb/ChangeUpdate.java b/java/com/google/gerrit/server/notedb/ChangeUpdate.java
index 3312d6c..52c551e 100644
--- a/java/com/google/gerrit/server/notedb/ChangeUpdate.java
+++ b/java/com/google/gerrit/server/notedb/ChangeUpdate.java
@@ -152,7 +152,9 @@
private Boolean isPrivate;
private Boolean workInProgress;
private Integer revertOf;
- private String cherryPickOf;
+ // If null, the update does not modify the field. Otherwise, it updates the field with the
+ // new value or resets if cherryPickOf == Optional.empty().
+ private Optional<String> cherryPickOf;
private ChangeDraftUpdate draftUpdate;
private RobotCommentUpdate robotCommentUpdate;
@@ -473,7 +475,12 @@
}
public void setCherryPickOf(String cherryPickOf) {
- this.cherryPickOf = cherryPickOf;
+ checkArgument(cherryPickOf != null, "use resetCherryPickOf");
+ this.cherryPickOf = Optional.of(cherryPickOf);
+ }
+
+ public void resetCherryPickOf() {
+ this.cherryPickOf = Optional.empty();
}
/** @return the tree id for the updated tree */
@@ -753,7 +760,12 @@
}
if (cherryPickOf != null) {
- addFooter(msg, FOOTER_CHERRY_PICK_OF, cherryPickOf);
+ if (cherryPickOf.isPresent()) {
+ addFooter(msg, FOOTER_CHERRY_PICK_OF, cherryPickOf.get());
+ } else {
+ // Update cherryPickOf with an empty value.
+ addFooter(msg, FOOTER_CHERRY_PICK_OF).append('\n');
+ }
}
if (plannedAttentionSetUpdates != null) {
diff --git a/java/com/google/gerrit/server/restapi/BUILD b/java/com/google/gerrit/server/restapi/BUILD
index 3f28a03..4c07d8a 100644
--- a/java/com/google/gerrit/server/restapi/BUILD
+++ b/java/com/google/gerrit/server/restapi/BUILD
@@ -8,6 +8,7 @@
name = "restapi",
srcs = glob(["**/*.java"]),
deps = [
+ "//antlr3:query_parser",
"//java/com/google/gerrit/common:annotations",
"//java/com/google/gerrit/common:server",
"//java/com/google/gerrit/entities",
@@ -31,6 +32,7 @@
"//lib:guava",
"//lib:jgit",
"//lib:servlet-api",
+ "//lib/antlr:java-runtime",
"//lib/auto:auto-value",
"//lib/auto:auto-value-annotations",
"//lib/commons:compress",
diff --git a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java
index c80bf57..17e31bd 100644
--- a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java
+++ b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java
@@ -14,12 +14,15 @@
package com.google.gerrit.server.restapi.account;
+import com.google.common.base.Strings;
import com.google.gerrit.entities.NotifyConfig.NotifyType;
import com.google.gerrit.extensions.client.ProjectWatchInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.index.query.QueryParseException;
+import com.google.gerrit.index.query.QueryParser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.UserInitiated;
import com.google.gerrit.server.account.AccountResource;
@@ -95,6 +98,17 @@
throw new BadRequestException("project name must be specified");
}
+ if (!Strings.isNullOrEmpty(info.filter)) {
+ try {
+ QueryParser.parse(info.filter);
+ } catch (QueryParseException e) {
+ throw new BadRequestException(
+ String.format(
+ "invalid filter expression for project %s: %s", info.project, e.getMessage()),
+ e);
+ }
+ }
+
ProjectWatchKey key =
ProjectWatchKey.create(projectsCollection.parse(info.project).getNameKey(), info.filter);
if (m.containsKey(key)) {
diff --git a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
index fdac552..6ee3284c 100644
--- a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
+++ b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
@@ -42,6 +42,7 @@
import com.google.gerrit.server.change.ChangeInserter;
import com.google.gerrit.server.change.NotifyResolver;
import com.google.gerrit.server.change.PatchSetInserter;
+import com.google.gerrit.server.change.ResetCherryPickOp;
import com.google.gerrit.server.change.SetCherryPickOp;
import com.google.gerrit.server.config.UrlFormatter;
import com.google.gerrit.server.git.CodeReviewCommit;
@@ -371,7 +372,7 @@
git,
destChanges.get(0).notes(),
cherryPickCommit,
- sourceChange.currentPatchSetId(),
+ sourceChange,
newTopic,
workInProgress);
} else {
@@ -456,7 +457,7 @@
Repository git,
ChangeNotes destNotes,
CodeReviewCommit cherryPickCommit,
- PatchSet.Id sourcePatchSetId,
+ @Nullable Change sourceChange,
String topic,
@Nullable Boolean workInProgress)
throws IOException {
@@ -469,7 +470,11 @@
inserter.setWorkInProgress(workInProgress);
}
bu.addOp(destChange.getId(), inserter);
- if (destChange.getCherryPickOf() == null
+ PatchSet.Id sourcePatchSetId = sourceChange == null ? null : sourceChange.currentPatchSetId();
+ // If sourceChange is not provided, reset cherryPickOf to avoid stale value.
+ if (sourcePatchSetId == null) {
+ bu.addOp(destChange.getId(), new ResetCherryPickOp());
+ } else if (destChange.getCherryPickOf() == null
|| !destChange.getCherryPickOf().equals(sourcePatchSetId)) {
SetCherryPickOp cherryPickOfUpdater = setCherryPickOfFactory.create(sourcePatchSetId);
bu.addOp(destChange.getId(), cherryPickOfUpdater);
diff --git a/java/com/google/gerrit/server/restapi/change/QueryChanges.java b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
index 3c8157b..7df74f8 100644
--- a/java/com/google/gerrit/server/restapi/change/QueryChanges.java
+++ b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
@@ -27,6 +27,7 @@
import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.index.query.QueryRequiresAuthException;
import com.google.gerrit.index.query.QueryResult;
+import com.google.gerrit.server.AnonymousUser;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.DynamicOptions;
import com.google.gerrit.server.change.ChangeJson;
@@ -95,7 +96,9 @@
this.start = start;
}
- @Option(name = "--no-limit", usage = "Return all results, overriding the default limit")
+ @Option(
+ name = "--no-limit",
+ usage = "Return all results, overriding the default limit. Ignored for anonymous users.")
public void setNoLimit(boolean on) {
this.noLimit = on;
}
@@ -168,7 +171,7 @@
if (start != null) {
queryProcessor.setStart(start);
}
- if (noLimit != null) {
+ if (noLimit != null && !AnonymousUser.class.isAssignableFrom(userProvider.get().getClass())) {
queryProcessor.setNoLimit(noLimit);
}
if (skipVisibility != null) {
diff --git a/java/com/google/gerrit/util/cli/CmdLineParser.java b/java/com/google/gerrit/util/cli/CmdLineParser.java
index 162f324..e002eeb 100644
--- a/java/com/google/gerrit/util/cli/CmdLineParser.java
+++ b/java/com/google/gerrit/util/cli/CmdLineParser.java
@@ -456,7 +456,7 @@
MyParser(Object bean) {
super(bean, ParserProperties.defaults().withAtSyntax(false));
- parseAdditionalOptions(bean, new HashSet<>());
+ parseAdditionalOptions("", bean, new HashSet<>());
addOptionsWithMetRequirements();
ensureOptionsInitialized();
}
@@ -527,7 +527,7 @@
}
}
- private void parseAdditionalOptions(Object bean, Set<Object> parsedBeans) {
+ private void parseAdditionalOptions(String prefix, Object bean, Set<Object> parsedBeans) {
for (Class<?> c = bean.getClass(); c != null; c = c.getSuperclass()) {
for (Field f : c.getDeclaredFields()) {
if (f.isAnnotationPresent(Options.class)) {
@@ -537,7 +537,8 @@
} catch (IllegalAccessException e) {
throw new IllegalAnnotationError(e);
}
- parseWithPrefix(f.getAnnotation(Options.class).prefix(), additionalBean, parsedBeans);
+ parseWithPrefix(
+ prefix + f.getAnnotation(Options.class).prefix(), additionalBean, parsedBeans);
}
}
}
diff --git a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
index 0c30ef5..7c504b8 100644
--- a/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -2618,7 +2618,7 @@
}
@Test
- public void queryChangesNoLimit() throws Exception {
+ public void queryChangesNoLimitRegisteredUser() throws Exception {
projectOperations
.allProjectsForUpdate()
.add(
@@ -2636,6 +2636,26 @@
}
@Test
+ public void queryChangesNoLimitIgnoredForAnonymousUser() throws Exception {
+ int limit = 2;
+ projectOperations
+ .allProjectsForUpdate()
+ .add(
+ allowCapability(GlobalCapability.QUERY_LIMIT)
+ .group(SystemGroupBackend.ANONYMOUS_USERS)
+ .range(0, limit))
+ .update();
+ for (int i = 0; i < 3; i++) {
+ createChange();
+ }
+ requestScopeOperations.setApiUserAnonymous();
+ List<ChangeInfo> resultsWithDefaultLimit = gApi.changes().query().get();
+ List<ChangeInfo> resultsWithNoLimit = gApi.changes().query().withNoLimit().get();
+ assertThat(resultsWithDefaultLimit).hasSize(limit);
+ assertThat(resultsWithNoLimit).hasSize(limit);
+ }
+
+ @Test
public void queryChangesStart() throws Exception {
PushOneCommit.Result r1 = createChange();
createChange();
diff --git a/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java b/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
index 2356327..3b5ac78 100644
--- a/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
@@ -24,6 +24,7 @@
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.NoHttpd;
+import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.acceptance.PushOneCommit.Result;
import com.google.gerrit.acceptance.TestAccount;
import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
@@ -147,77 +148,237 @@
}
@Test
- public void cherryPickWithoutMessage() throws Exception {
- String branch = "foo";
+ public void cherryPickWithoutMessageSameBranch() throws Exception {
+ String destBranch = "master";
// Create change to cherry-pick
- RevCommit revCommit = createChange().getCommit();
-
- // Create target branch to cherry-pick to.
- gApi.projects().name(project.get()).branch(branch).create(new BranchInput());
+ PushOneCommit.Result r = createChange();
+ ChangeInfo changeToCherryPick = info(r.getChangeId());
+ RevCommit commitToCherryPick = r.getCommit();
// Cherry-pick without message.
CherryPickInput input = new CherryPickInput();
- input.destination = branch;
- String changeId =
- gApi.projects().name(project.get()).commit(revCommit.name()).cherryPick(input).get().id;
+ input.destination = destBranch;
+ ChangeInfo cherryPickResult =
+ gApi.projects()
+ .name(project.get())
+ .commit(commitToCherryPick.name())
+ .cherryPick(input)
+ .get();
+ // Expect that the Change-Id of the cherry-picked commit was used for the cherry-pick change.
+ // New patch-set to existing change was uploaded.
+ assertThat(cherryPickResult._number).isEqualTo(changeToCherryPick._number);
+ assertThat(cherryPickResult.revisions).hasSize(2);
+ assertThat(cherryPickResult.changeId).isEqualTo(changeToCherryPick.changeId);
+ assertThat(cherryPickResult.messages).hasSize(2);
+
+ // Cherry-pick of is not set, because the source change was not provided.
+ assertThat(cherryPickResult.cherryPickOfChange).isNull();
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
// Expect that the message of the cherry-picked commit was used for the cherry-pick change.
- ChangeInfo changeInfo = gApi.changes().id(changeId).get();
- RevisionInfo revInfo = changeInfo.revisions.get(changeInfo.currentRevision);
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
assertThat(revInfo).isNotNull();
- assertThat(revInfo.commit.message).isEqualTo(revCommit.getFullMessage());
+ assertThat(revInfo.commit.message).isEqualTo(commitToCherryPick.getFullMessage());
}
@Test
- public void cherryPickCommitWithoutChangeId() throws Exception {
+ public void cherryPickWithoutMessageOtherBranch() throws Exception {
+ String destBranch = "foo";
+ createBranch(BranchNameKey.create(project, destBranch));
+
+ // Create change to cherry-pick
+ PushOneCommit.Result r = createChange();
+ ChangeInfo changeToCherryPick = info(r.getChangeId());
+ RevCommit commitToCherryPick = r.getCommit();
+
+ // Cherry-pick without message.
CherryPickInput input = new CherryPickInput();
- input.destination = "foo";
+ input.destination = destBranch;
+ ChangeInfo cherryPickResult =
+ gApi.projects()
+ .name(project.get())
+ .commit(commitToCherryPick.name())
+ .cherryPick(input)
+ .get();
+
+ // Expect that the Change-Id of the cherry-picked commit was used for the cherry-pick change.
+ // New change in destination branch was created.
+ assertThat(cherryPickResult._number).isGreaterThan(changeToCherryPick._number);
+ assertThat(cherryPickResult.revisions).hasSize(1);
+ assertThat(cherryPickResult.changeId).isEqualTo(changeToCherryPick.changeId);
+ assertThat(cherryPickResult.messages).hasSize(1);
+
+ // Cherry-pick of is not set, because the source change was not provided.
+ assertThat(cherryPickResult.cherryPickOfChange).isNull();
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
+ // Expect that the message of the cherry-picked commit was used for the cherry-pick change.
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
+ assertThat(revInfo).isNotNull();
+ assertThat(revInfo.commit.message).isEqualTo(commitToCherryPick.getFullMessage());
+ }
+
+ @Test
+ public void cherryPickCommitWithoutChangeIdCreateNewChange() throws Exception {
+ String destBranch = "foo";
+ createBranch(BranchNameKey.create(project, destBranch));
+
+ CherryPickInput input = new CherryPickInput();
+ input.destination = destBranch;
input.message = "it goes to foo branch";
- gApi.projects().name(project.get()).branch(input.destination).create(new BranchInput());
- RevCommit revCommit = createNewCommitWithoutChangeId("refs/heads/master", "a.txt", "content");
- ChangeInfo changeInfo =
- gApi.projects().name(project.get()).commit(revCommit.getName()).cherryPick(input).get();
+ RevCommit commitToCherryPick =
+ createNewCommitWithoutChangeId("refs/heads/master", "a.txt", "content");
+ ChangeInfo cherryPickResult =
+ gApi.projects()
+ .name(project.get())
+ .commit(commitToCherryPick.getName())
+ .cherryPick(input)
+ .get();
- assertThat(changeInfo.messages).hasSize(1);
- Iterator<ChangeMessageInfo> messageIterator = changeInfo.messages.iterator();
+ assertThat(cherryPickResult.messages).hasSize(1);
+ Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
String expectedMessage =
- String.format("Patch Set 1: Cherry Picked from commit %s.", revCommit.getName());
+ String.format("Patch Set 1: Cherry Picked from commit %s.", commitToCherryPick.getName());
assertThat(messageIterator.next().message).isEqualTo(expectedMessage);
- RevisionInfo revInfo = changeInfo.revisions.get(changeInfo.currentRevision);
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
assertThat(revInfo).isNotNull();
CommitInfo commitInfo = revInfo.commit;
assertThat(commitInfo.message)
- .isEqualTo(input.message + "\n\nChange-Id: " + changeInfo.changeId + "\n");
+ .isEqualTo(input.message + "\n\nChange-Id: " + cherryPickResult.changeId + "\n");
}
@Test
- public void cherryPickCommitWithChangeId() throws Exception {
- CherryPickInput input = new CherryPickInput();
- input.destination = "foo";
+ public void cherryPickCommitWithChangeIdCreateNewChange() throws Exception {
+ String destBranch = "foo";
+ createBranch(BranchNameKey.create(project, destBranch));
- RevCommit revCommit = createChange().getCommit();
- List<String> footers = revCommit.getFooterLines("Change-Id");
+ PushOneCommit.Result r = createChange();
+ ChangeInfo changeToCherryPick = info(r.getChangeId());
+ RevCommit commitToCherryPick = r.getCommit();
+ List<String> footers = commitToCherryPick.getFooterLines("Change-Id");
assertThat(footers).hasSize(1);
String changeId = footers.get(0);
- input.message = "it goes to foo branch\n\nChange-Id: " + changeId;
- gApi.projects().name(project.get()).branch(input.destination).create(new BranchInput());
+ CherryPickInput input = new CherryPickInput();
+ input.destination = destBranch;
+ input.message =
+ String.format(
+ "it goes to foo branch\n\nChange-Id: Ideadbeefdeadbeefdeadbeefdeadbeefdeadbeef\n\nChange-Id: %s\n",
+ changeId);
- ChangeInfo changeInfo =
- gApi.projects().name(project.get()).commit(revCommit.getName()).cherryPick(input).get();
+ ChangeInfo cherryPickResult =
+ gApi.projects()
+ .name(project.get())
+ .commit(commitToCherryPick.getName())
+ .cherryPick(input)
+ .get();
- assertThat(changeInfo.messages).hasSize(1);
- Iterator<ChangeMessageInfo> messageIterator = changeInfo.messages.iterator();
+ // No change was found in destination branch with the provided Change-Id.
+ assertThat(cherryPickResult._number).isGreaterThan(changeToCherryPick._number);
+ assertThat(cherryPickResult.changeId).isEqualTo(changeId);
+ assertThat(cherryPickResult.revisions).hasSize(1);
+ assertThat(cherryPickResult.messages).hasSize(1);
+ Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
String expectedMessage =
- String.format("Patch Set 1: Cherry Picked from commit %s.", revCommit.getName());
+ String.format("Patch Set 1: Cherry Picked from commit %s.", commitToCherryPick.getName());
assertThat(messageIterator.next().message).isEqualTo(expectedMessage);
- RevisionInfo revInfo = changeInfo.revisions.get(changeInfo.currentRevision);
+ // Cherry-pick of is not set, because the source change was not provided.
+ assertThat(cherryPickResult.cherryPickOfChange).isNull();
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
assertThat(revInfo).isNotNull();
- assertThat(revInfo.commit.message).isEqualTo(input.message + "\n");
+ assertThat(revInfo.commit.message).isEqualTo(input.message);
+ }
+
+ @Test
+ public void cherryPickCommitToExistingChange() throws Exception {
+ String destBranch = "foo";
+ createBranch(BranchNameKey.create(project, destBranch));
+
+ PushOneCommit.Result r = createChange("refs/for/" + destBranch);
+ ChangeInfo existingDestChange = info(r.getChangeId());
+
+ String commitToCherryPick = createChange().getCommit().getName();
+
+ CherryPickInput input = new CherryPickInput();
+ input.destination = destBranch;
+ input.message =
+ String.format(
+ "it goes to foo branch\n\nChange-Id: Ideadbeefdeadbeefdeadbeefdeadbeefdeadbeef\n\nChange-Id: %s\n",
+ existingDestChange.changeId);
+ input.allowConflicts = true;
+ input.allowEmpty = true;
+
+ ChangeInfo cherryPickResult =
+ gApi.projects().name(project.get()).commit(commitToCherryPick).cherryPick(input).get();
+
+ // New patch-set to existing change was uploaded.
+ assertThat(cherryPickResult._number).isEqualTo(existingDestChange._number);
+ assertThat(cherryPickResult.changeId).isEqualTo(existingDestChange.changeId);
+ assertThat(cherryPickResult.messages).hasSize(2);
+ assertThat(cherryPickResult.revisions).hasSize(2);
+ Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
+
+ assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 1.");
+ assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 2.");
+ // Cherry-pick of is not set, because the source change was not provided.
+ assertThat(cherryPickResult.cherryPickOfChange).isNull();
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
+ assertThat(revInfo).isNotNull();
+ assertThat(revInfo.commit.message).isEqualTo(input.message);
+ }
+
+ @Test
+ public void cherryPickCommitToExistingCherryPickedChange() throws Exception {
+ String destBranch = "foo";
+ createBranch(BranchNameKey.create(project, destBranch));
+
+ PushOneCommit.Result r = createChange("refs/for/" + destBranch);
+ ChangeInfo existingDestChange = info(r.getChangeId());
+
+ r = createChange();
+ ChangeInfo changeToCherryPick = info(r.getChangeId());
+ RevCommit commitToCherryPick = r.getCommit();
+
+ CherryPickInput input = new CherryPickInput();
+ input.destination = destBranch;
+ input.message =
+ String.format("it goes to foo branch\n\nChange-Id: %s\n", existingDestChange.changeId);
+ input.allowConflicts = true;
+ input.allowEmpty = true;
+ // Use RevisionAPI to submit initial cherryPick.
+ ChangeInfo cherryPickResult =
+ gApi.changes().id(changeToCherryPick.changeId).current().cherryPick(input).get();
+ assertThat(cherryPickResult.changeId).isEqualTo(existingDestChange.changeId);
+ // Cherry-pick was set.
+ assertThat(cherryPickResult.cherryPickOfChange).isEqualTo(changeToCherryPick._number);
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isEqualTo(1);
+ RevisionInfo revInfo = cherryPickResult.revisions.get(cherryPickResult.currentRevision);
+ assertThat(revInfo).isNotNull();
+ assertThat(revInfo.commit.message).isEqualTo(input.message);
+ // Use CommitApi to update the cherryPick change.
+ cherryPickResult =
+ gApi.projects()
+ .name(project.get())
+ .commit(commitToCherryPick.getName())
+ .cherryPick(input)
+ .get();
+
+ assertThat(cherryPickResult.changeId).isEqualTo(existingDestChange.changeId);
+ assertThat(cherryPickResult.messages).hasSize(3);
+ Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
+
+ assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 1.");
+ assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 2.");
+ assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 3.");
+ // Cherry-pick was reset to empty value.
+ assertThat(cherryPickResult._number).isEqualTo(existingDestChange._number);
+ assertThat(cherryPickResult.cherryPickOfChange).isNull();
+ assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
}
@Test
diff --git a/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java b/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java
index 61eef63..5c50949 100644
--- a/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java
@@ -1438,11 +1438,7 @@
// Add preference for the user such that they only receive an email on changes that require
// their attention.
- requestScopeOperations.setApiUser(user.id());
- GeneralPreferencesInfo prefs = gApi.accounts().self().getPreferences();
- prefs.emailStrategy = EmailStrategy.ATTENTION_SET_ONLY;
- gApi.accounts().self().setPreferences(prefs);
- requestScopeOperations.setApiUser(admin.id());
+ setEmailStrategyForUser(EmailStrategy.ATTENTION_SET_ONLY);
// Add user to attention set. They receive an email since they are in the attention set.
change(r).addReviewer(user.id().toString());
@@ -1464,17 +1460,34 @@
public void attentionSetWithEmailFilterImpactingOnlyChangeEmails() throws Exception {
// Add preference for the user such that they only receive an email on changes that require
// their attention.
- requestScopeOperations.setApiUser(user.id());
- GeneralPreferencesInfo prefs = gApi.accounts().self().getPreferences();
- prefs.emailStrategy = EmailStrategy.ATTENTION_SET_ONLY;
- gApi.accounts().self().setPreferences(prefs);
- requestScopeOperations.setApiUser(admin.id());
+ setEmailStrategyForUser(EmailStrategy.ATTENTION_SET_ONLY);
// Ensure emails that don't relate to changes are still sent.
gApi.accounts().id(user.id().get()).generateHttpPassword();
assertThat(sender.getMessages()).isNotEmpty();
}
+ @Test
+ public void outsideAttentionSet_watchProjectEmailReceived() throws Exception {
+ setEmailStrategyForUser(EmailStrategy.ATTENTION_SET_ONLY);
+
+ requestScopeOperations.setApiUser(user.id());
+ watch(project.get());
+
+ createChange();
+
+ assertThat(sender.getMessages()).isNotEmpty();
+ sender.clear();
+ }
+
+ private void setEmailStrategyForUser(EmailStrategy es) throws Exception {
+ requestScopeOperations.setApiUser(user.id());
+ GeneralPreferencesInfo prefs = gApi.accounts().self().getPreferences();
+ prefs.emailStrategy = es;
+ gApi.accounts().self().setPreferences(prefs);
+ requestScopeOperations.setApiUser(admin.id());
+ }
+
private List<AttentionSetUpdate> getAttentionSetUpdatesForUser(
PushOneCommit.Result r, TestAccount account) {
return getAttentionSetUpdates(r.getChange().getId()).stream()
diff --git a/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java b/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
index 938fffc..6b9859f4 100644
--- a/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
+++ b/javatests/com/google/gerrit/server/notedb/ChangeNotesTest.java
@@ -3146,6 +3146,34 @@
}
@Test
+ public void resetCherryPickOf() throws Exception {
+ Change destinationChange = newChange();
+ Change cherryPickChange = newChange();
+ assertThat(newNotes(destinationChange).getChange().getCherryPickOf()).isNull();
+
+ ChangeUpdate update = newUpdate(destinationChange, changeOwner);
+ update.setCherryPickOf(
+ cherryPickChange.currentPatchSetId().getCommaSeparatedChangeAndPatchSetId());
+ update.commit();
+ assertThat(newNotes(destinationChange).getChange().getCherryPickOf())
+ .isEqualTo(cherryPickChange.currentPatchSetId());
+
+ update = newUpdate(destinationChange, changeOwner);
+ update.resetCherryPickOf();
+ update.commit();
+ assertThat(newNotes(destinationChange).getChange().getCherryPickOf()).isNull();
+
+ // Can set again after reset.
+ cherryPickChange = newChange();
+ update = newUpdate(destinationChange, changeOwner);
+ update.setCherryPickOf(
+ cherryPickChange.currentPatchSetId().getCommaSeparatedChangeAndPatchSetId());
+ update.commit();
+ assertThat(newNotes(destinationChange).getChange().getCherryPickOf())
+ .isEqualTo(cherryPickChange.currentPatchSetId());
+ }
+
+ @Test
public void updateCount() throws Exception {
Change c = newChange();
assertThat(newNotes(c).getUpdateCount()).isEqualTo(1);
diff --git a/lib/nongoogle_test.sh b/lib/nongoogle_test.sh
index dc980c2..13e81f7 100755
--- a/lib/nongoogle_test.sh
+++ b/lib/nongoogle_test.sh
@@ -27,11 +27,15 @@
guice-servlet
httpasyncclient
httpcore-nio
+impl-log4j
j2objc
jackson-annotations
jackson-core
+jcl-over-slf4j
jna
jruby
+log-api
+log-ext
log4j
mina-core
nekohtml
diff --git a/plugins/replication b/plugins/replication
index bad55d9..6e04fc3 160000
--- a/plugins/replication
+++ b/plugins/replication
@@ -1 +1 @@
-Subproject commit bad55d97ac86f6b16b63a1c4870762aa101332d8
+Subproject commit 6e04fc32f87780e949c4213a6f028cc0d6a0c575
diff --git a/tools/maven/gerrit-acceptance-framework_pom.xml b/tools/maven/gerrit-acceptance-framework_pom.xml
index 5736e4d..226d571 100644
--- a/tools/maven/gerrit-acceptance-framework_pom.xml
+++ b/tools/maven/gerrit-acceptance-framework_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-acceptance-framework</artifactId>
- <version>3.3.10-SNAPSHOT</version>
+ <version>3.3.11-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Acceptance Test Framework</name>
<description>Framework for Gerrit's acceptance tests</description>
diff --git a/tools/maven/gerrit-extension-api_pom.xml b/tools/maven/gerrit-extension-api_pom.xml
index 09c7b55..c2f6d6d 100644
--- a/tools/maven/gerrit-extension-api_pom.xml
+++ b/tools/maven/gerrit-extension-api_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-extension-api</artifactId>
- <version>3.3.10-SNAPSHOT</version>
+ <version>3.3.11-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Extension API</name>
<description>API for Gerrit Extensions</description>
diff --git a/tools/maven/gerrit-plugin-api_pom.xml b/tools/maven/gerrit-plugin-api_pom.xml
index b7f1bab..056f25e 100644
--- a/tools/maven/gerrit-plugin-api_pom.xml
+++ b/tools/maven/gerrit-plugin-api_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-plugin-api</artifactId>
- <version>3.3.10-SNAPSHOT</version>
+ <version>3.3.11-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Plugin API</name>
<description>API for Gerrit Plugins</description>
diff --git a/tools/maven/gerrit-war_pom.xml b/tools/maven/gerrit-war_pom.xml
index 48d5f0b..0ed5dc5 100644
--- a/tools/maven/gerrit-war_pom.xml
+++ b/tools/maven/gerrit-war_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-war</artifactId>
- <version>3.3.10-SNAPSHOT</version>
+ <version>3.3.11-SNAPSHOT</version>
<packaging>war</packaging>
<name>Gerrit Code Review - WAR</name>
<description>Gerrit WAR</description>
diff --git a/tools/maven/package.bzl b/tools/maven/package.bzl
index b25656d..eacb02b 100644
--- a/tools/maven/package.bzl
+++ b/tools/maven/package.bzl
@@ -40,7 +40,7 @@
src = {},
doc = {},
war = {}):
- build_cmd = ["bazel_cmd", "build"]
+ build_cmd = ["bazel_cmd", "build", "--java_toolchain=//tools:error_prone_warnings_toolchain_java11"]
mvn_cmd = ["python", "tools/maven/mvn.py", "-v", version]
api_cmd = mvn_cmd[:]
api_targets = []
diff --git a/tools/nongoogle.bzl b/tools/nongoogle.bzl
index 5ae1f4c..3c4044b 100644
--- a/tools/nongoogle.bzl
+++ b/tools/nongoogle.bzl
@@ -11,8 +11,34 @@
maven_jar(
name = "log4j",
- artifact = "ch.qos.reload4j:reload4j:1.2.18.1",
- sha1 = "7075022a11e18c1ad230de5be074e0c691fed17b",
+ artifact = "ch.qos.reload4j:reload4j:1.2.19",
+ sha1 = "4eae9978468c5e885a6fb44df7e2bbc07a20e6ce",
+ )
+
+ SLF4J_VERS = "1.7.36"
+
+ maven_jar(
+ name = "log-api",
+ artifact = "org.slf4j:slf4j-api:" + SLF4J_VERS,
+ sha1 = "6c62681a2f655b49963a5983b8b0950a6120ae14",
+ )
+
+ maven_jar(
+ name = "log-ext",
+ artifact = "org.slf4j:slf4j-ext:" + SLF4J_VERS,
+ sha1 = "99f282aea4b6dbca04d00f0ade6e5ed61ee7091a",
+ )
+
+ maven_jar(
+ name = "impl-log4j",
+ artifact = "org.slf4j:slf4j-reload4j:" + SLF4J_VERS,
+ sha1 = "db708f7d959dee1857ac524636e85ecf2e1781c1",
+ )
+
+ maven_jar(
+ name = "jcl-over-slf4j",
+ artifact = "org.slf4j:jcl-over-slf4j:" + SLF4J_VERS,
+ sha1 = "d877e195a05aca4a2f1ad2ff14bfec1393af4b5e",
)
maven_jar(
diff --git a/version.bzl b/version.bzl
index 116ce2e..c753159 100644
--- a/version.bzl
+++ b/version.bzl
@@ -2,4 +2,4 @@
# Used by :api_install and :api_deploy targets
# when talking to the destination repository.
#
-GERRIT_VERSION = "3.3.10-SNAPSHOT"
+GERRIT_VERSION = "3.3.11-SNAPSHOT"