Move ExternalId::toByteArray to AccountField::serializeExternalId.
This method should not be used outside the indexing logic.
This is a part of a series of changes intended to add support for
different account storage systems.
Bug: Google b/274585632
Change-Id: I3c13367d96e4a2c5204351cfa7a3b700d5ec3c21
Release-Notes: skip
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalId.java b/java/com/google/gerrit/server/account/externalids/ExternalId.java
index 9196db8..ef1781e 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalId.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalId.java
@@ -27,7 +27,6 @@
import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Account;
import com.google.gerrit.extensions.client.AuthType;
-import com.google.gerrit.git.ObjectIds;
import java.io.Serializable;
import java.util.Collection;
import java.util.Locale;
@@ -294,15 +293,6 @@
return key().isScheme(scheme);
}
- public byte[] toByteArray() {
- checkState(blobId() != null, "Missing blobId in external ID %s", key().get());
- byte[] b = new byte[2 * ObjectIds.STR_LEN + 1];
- key().sha1().copyTo(b, 0);
- b[ObjectIds.STR_LEN] = ':';
- blobId().copyTo(b, ObjectIds.STR_LEN + 1);
- return b;
- }
-
/**
* For checking if two external IDs are equals the blobId is excluded and external IDs that have
* different blob IDs but identical other fields are considered equal. This way an external ID
diff --git a/java/com/google/gerrit/server/index/account/AccountField.java b/java/com/google/gerrit/server/index/account/AccountField.java
index e675003..f87fbf5 100644
--- a/java/com/google/gerrit/server/index/account/AccountField.java
+++ b/java/com/google/gerrit/server/index/account/AccountField.java
@@ -14,13 +14,16 @@
package com.google.gerrit.server.index.account;
+import static com.google.common.base.Preconditions.checkState;
import static java.util.stream.Collectors.toSet;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.gerrit.common.data.GlobalCapability;
import com.google.gerrit.entities.RefNames;
+import com.google.gerrit.git.ObjectIds;
import com.google.gerrit.index.IndexedField;
import com.google.gerrit.index.RefState;
import com.google.gerrit.index.SchemaUtil;
@@ -237,12 +240,22 @@
a ->
a.externalIds().stream()
.filter(e -> e.blobId() != null)
- .map(ExternalId::toByteArray)
+ .map(AccountField::serializeExternalId)
.collect(toSet()));
public static final IndexedField<AccountState, Iterable<byte[]>>.SearchSpec
EXTERNAL_ID_STATE_SPEC = EXTERNAL_ID_STATE_FIELD.storedOnly("external_id_state");
+ @VisibleForTesting
+ public static byte[] serializeExternalId(ExternalId extId) {
+ checkState(extId.blobId() != null, "Missing blobId in external ID %s", extId.key().get());
+ byte[] b = new byte[2 * ObjectIds.STR_LEN + 1];
+ extId.key().sha1().copyTo(b, 0);
+ b[ObjectIds.STR_LEN] = ':';
+ extId.blobId().copyTo(b, ObjectIds.STR_LEN + 1);
+ return b;
+ }
+
private static final Set<String> getNameParts(AccountState a, Iterable<String> emails) {
String fullName = a.account().fullName();
Set<String> parts = SchemaUtil.getNameParts(fullName, emails);
diff --git a/javatests/com/google/gerrit/server/query/account/AbstractQueryAccountsTest.java b/javatests/com/google/gerrit/server/query/account/AbstractQueryAccountsTest.java
index aea4b95..c530c79 100644
--- a/javatests/com/google/gerrit/server/query/account/AbstractQueryAccountsTest.java
+++ b/javatests/com/google/gerrit/server/query/account/AbstractQueryAccountsTest.java
@@ -705,7 +705,7 @@
for (AccountExternalIdInfo info : externalIdInfos) {
Optional<ExternalId> extId = externalIds.get(externalIdKeyFactory.parse(info.identity));
assertThat(extId).isPresent();
- blobs.add(new ByteArrayWrapper(extId.get().toByteArray()));
+ blobs.add(new ByteArrayWrapper(AccountField.serializeExternalId(extId.get())));
}
// Some installations do not store EXTERNAL_ID_STATE_SPEC
diff --git a/javatests/com/google/gerrit/server/query/account/BUILD b/javatests/com/google/gerrit/server/query/account/BUILD
index c781d8b..2c31aef 100644
--- a/javatests/com/google/gerrit/server/query/account/BUILD
+++ b/javatests/com/google/gerrit/server/query/account/BUILD
@@ -16,6 +16,7 @@
"//java/com/google/gerrit/common:annotations",
"//java/com/google/gerrit/entities",
"//java/com/google/gerrit/extensions:api",
+ "//java/com/google/gerrit/git",
"//java/com/google/gerrit/index",
"//java/com/google/gerrit/lifecycle",
"//java/com/google/gerrit/server",