diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2022-03-16 13:42:41 +0000 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2022-03-17 09:02:56 +0000 |
commit | af9d0136709830fe4af735a4980d1e729660907d (patch) | |
tree | 3a99760bde86eec2a4481f294eebc4d61aeaeed2 | |
parent | 7ac5c8d19725cb0149223e4a66d795c86acd34d4 (diff) | |
parent | bf22fef492414882172cd153b02e692b29f34c36 (diff) |
Merge branch 'stable-3.3' into stable-3.4
* stable-3.3:
Show HTTP(S) message in Missing Change ID Error message
Update reload4j to 1.2.19 and slf4j to 1.7.36
Move SLF4J to nongoogle.bzl
Separate reviewer-recipients from project-watch-recipients
Restore Java 11 binary bytecode for releases to Maven
Release-Notes: skip
Change-Id: I194e44a9939a89fb06a37eacf780e0461100631c
-rw-r--r-- | WORKSPACE | 26 | ||||
-rw-r--r-- | java/com/google/gerrit/server/git/validators/CommitValidators.java | 22 | ||||
-rw-r--r-- | java/com/google/gerrit/server/mail/send/ChangeEmail.java | 28 | ||||
-rw-r--r-- | java/com/google/gerrit/server/mail/send/CreateChangeSender.java | 2 | ||||
-rw-r--r-- | java/com/google/gerrit/server/mail/send/NotificationEmail.java | 4 | ||||
-rw-r--r-- | javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java | 33 | ||||
-rwxr-xr-x | lib/nongoogle_test.sh | 4 | ||||
-rw-r--r-- | tools/maven/package.bzl | 2 | ||||
-rw-r--r-- | tools/nongoogle.bzl | 30 |
9 files changed, 94 insertions, 57 deletions
@@ -226,32 +226,6 @@ maven_jar( 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/java/com/google/gerrit/server/git/validators/CommitValidators.java b/java/com/google/gerrit/server/git/validators/CommitValidators.java index 1cb0beaadb..870667b155 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 @@ public class CommitValidators { "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 @@ public class CommitValidators { // 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 @@ public class CommitValidators { 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 a10021a215..81ce101599 100644 --- a/java/com/google/gerrit/server/mail/send/ChangeEmail.java +++ b/java/com/google/gerrit/server/mail/send/ChangeEmail.java @@ -399,15 +399,25 @@ public abstract class ChangeEmail extends NotificationEmail { @Override protected void add(RecipientType rt, Account.Id to) { - Optional<AccountState> accountState = args.accountCache.get(to); - if (!accountState.isPresent()) { - return; - } - if (emailOnlyAttentionSetIfEnabled - && 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 (emailOnlyAttentionSetIfEnabled + && 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 b78dc62ce7..2ab73a8484 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 @@ public class CreateChangeSender extends NewChangeSender { // 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 5ffd9284b7..91310ce094 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 @@ public abstract class NotificationEmail extends OutgoingEmail { /** 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/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java b/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java index d2a48be12f..efd27d093b 100644 --- a/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/change/AttentionSetIT.java @@ -1519,11 +1519,7 @@ public class AttentionSetIT extends AbstractDaemonTest { // 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()); @@ -1597,11 +1593,7 @@ public class AttentionSetIT extends AbstractDaemonTest { 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(); @@ -1758,6 +1750,27 @@ public class AttentionSetIT extends AbstractDaemonTest { .isEqualTo(Operation.REMOVE); } + @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/lib/nongoogle_test.sh b/lib/nongoogle_test.sh index bdd40fcbb3..a61be22719 100755 --- a/lib/nongoogle_test.sh +++ b/lib/nongoogle_test.sh @@ -27,12 +27,16 @@ guice-library guice-servlet httpasyncclient httpcore-nio +impl-log4j j2objc jackson-annotations jackson-core +jcl-over-slf4j jimfs jna jruby +log-api +log-ext log4j mina-core nekohtml diff --git a/tools/maven/package.bzl b/tools/maven/package.bzl index b25656da7f..eacb02b9f4 100644 --- a/tools/maven/package.bzl +++ b/tools/maven/package.bzl @@ -40,7 +40,7 @@ def maven_package( 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 f482e3d3ec..c6232896c3 100644 --- a/tools/nongoogle.bzl +++ b/tools/nongoogle.bzl @@ -18,8 +18,34 @@ def declare_nongoogle_deps(): 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( |