You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2023/03/31 16:48:36 UTC
[sling-org-apache-sling-committer-cli] 01/01: SLING-11816 - Transliterated project member names break the vote counting algorithm
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch issues/SLING-11816
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git
commit 8cb5decec9d4403b7308c7f01218473067fd354b
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Mar 31 18:46:47 2023 +0200
SLING-11816 - Transliterated project member names break the vote counting algorithm
* added support for transliterated names in the MembersFinder
---
pom.xml | 6 ++++++
src/main/features/app.json | 3 +++
src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java | 5 ++++-
.../java/org/apache/sling/cli/impl/release/TallyVotesCommand.java | 2 ++
.../org/apache/sling/cli/impl/release/TallyVotesCommandTest.java | 4 +++-
5 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5576286..eeea3d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -279,6 +279,12 @@
<version>1.62</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.ibm.icu</groupId>
+ <artifactId>icu4j</artifactId>
+ <version>72.1</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
diff --git a/src/main/features/app.json b/src/main/features/app.json
index 9f1693b..f8fc1d9 100644
--- a/src/main/features/app.json
+++ b/src/main/features/app.json
@@ -91,6 +91,9 @@
},
{
"id": "commons-io:commons-io:2.6"
+ },
+ {
+ "id": "com.ibm.icu:icu4j:72.1"
}
]
}
diff --git a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
index 86639bf..3962eaa 100644
--- a/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java
@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+import com.ibm.icu.text.Transliterator;
@Component(service = MembersFinder.class)
public class MembersFinder {
@@ -50,6 +51,7 @@ public class MembersFinder {
private static final String PEOPLE_ENDPOINT = "https://whimsy.apache.org/public/public_ldap_people.json";
private static final String PROJECTS_ENDPOINT = "https://whimsy.apache.org/public/public_ldap_projects.json";
private static final int STALENESS_IN_HOURS = 3;
+ private static final Transliterator TRANSLITERATOR = Transliterator.getInstance("de-ASCII");
private Set<Member> members = Collections.emptySet();
private long lastCheck = 0;
@@ -120,7 +122,8 @@ public class MembersFinder {
Collator collator = Collator.getInstance(Locale.US);
collator.setDecomposition(Collator.NO_DECOMPOSITION);
for (Member member : findMembers()) {
- if (email.equals(member.getEmail()) || (name != null && collator.compare(name, member.getName()) == 0)) {
+ if (email.equals(member.getEmail()) || (name != null && collator.compare(TRANSLITERATOR.transliterate(name),
+ TRANSLITERATOR.transliterate(member.getName())) == 0)) {
return member;
}
}
diff --git a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
index 7463882..6a7120f 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/TallyVotesCommand.java
@@ -167,6 +167,8 @@ public class TallyVotesCommand implements Command {
} else {
LOGGER.info("Release {} does not have at least 3 binding votes.", releaseFullName);
LOGGER.info("Binding votes: {}.", bindingVoters.isEmpty() ? "none" : String.join(", ", bindingVoters));
+ LOGGER.info("Non-binding votes: {}.", nonBindingVoters.isEmpty() ? "none" : String.join(", ",
+ bindingVoters));
return CommandLine.ExitCode.USAGE;
}
}
diff --git a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
index c96835c..d58e73d 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/TallyVotesCommandTest.java
@@ -93,6 +93,7 @@ public class TallyVotesCommandTest {
add(mockEmail("charlie@apache.org", "Charlie"));
add(mockEmail("daniel@apache.org", "Daniel"));
add(mockEmail("johndoe@apache.org", "John Doe"));
+ add(mockEmail("jhoh228@googlemail.com.INVALID", "Jörg Hoh"));
}};
prepareExecution(mock(Mailer.class), thread);
TallyVotesCommand tallyVotesCommand = spy(new TallyVotesCommand());
@@ -116,7 +117,7 @@ public class TallyVotesCommandTest {
"\n" +
"The vote has passed with the following result:\n" +
"\n" +
- "+1 (binding): Alice, Bob, Charlie, John Doe\n" +
+ "+1 (binding): Alice, Bob, Charlie, John Doe, Joerg Hoh\n" +
"+1 (non-binding): Daniel\n" +
"\n" +
"I will copy this release to the Sling dist directory and\n" +
@@ -219,6 +220,7 @@ public class TallyVotesCommandTest {
add(new Member("bob", "Bob", true));
add(new Member("charlie", "Charlie", true));
add(new Member("daniel", "Daniel", false));
+ add(new Member("joerghoh", "Joerg Hoh", true));
}};
Whitebox.setInternalState(membersFinder, "members", members);
Whitebox.setInternalState(membersFinder, "lastCheck", System.currentTimeMillis());