Merge "Do not try to recreate non-local groups"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
index 8c72e11..384c089 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroup.java
@@ -14,11 +14,14 @@
package com.googlesource.gerrit.plugins.importer;
+import static com.google.gerrit.reviewdb.client.AccountGroup.isInternalGroup;
+
import com.google.gerrit.common.errors.NoSuchAccountException;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.PreconditionFailedException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.Response;
@@ -107,7 +110,8 @@
@Override
public Response<String> apply(ConfigResource rsrc, Input input)
throws ResourceConflictException, PreconditionFailedException,
- BadRequestException, NoSuchAccountException, OrmException, IOException {
+ BadRequestException, NoSuchAccountException, OrmException, IOException,
+ MethodNotAllowedException {
GroupInfo groupInfo;
this.api = apiFactory.create(input.from, input.user, input.pass);
groupInfo = api.getGroup(group.get());
@@ -119,7 +123,12 @@
private void validate(Input input, GroupInfo groupInfo) throws ResourceConflictException,
PreconditionFailedException, BadRequestException, IOException,
- OrmException, NoSuchAccountException {
+ OrmException, NoSuchAccountException, MethodNotAllowedException {
+ if (!isInternalGroup(new AccountGroup.UUID(groupInfo.id))) {
+ throw new MethodNotAllowedException(String.format(
+ "Group with name %s is not an internal group and cannot be imported",
+ groupInfo.name));
+ }
if (getGroupByName(groupInfo.name) != null) {
throw new ResourceConflictException(String.format(
"Group with name %s already exists", groupInfo.name));
@@ -197,7 +206,7 @@
private AccountGroup createGroup(Input input, GroupInfo info) throws OrmException,
ResourceConflictException, NoSuchAccountException, BadRequestException,
- IOException, PreconditionFailedException {
+ IOException, PreconditionFailedException, MethodNotAllowedException {
AccountGroup.Id groupId = new AccountGroup.Id(db.nextAccountGroupId());
AccountGroup.UUID uuid = new AccountGroup.UUID(info.id);
AccountGroup group =
@@ -218,14 +227,16 @@
if (!info.id.equals(info.ownerId)) {
if (getGroupByUUID(info.ownerId) == null) {
- String ownerGroupName = getGroupName(info.ownerId);
- if (input.importOwnerGroup) {
- importGroupFactory.create(new AccountGroup.NameKey(ownerGroupName))
- .apply(new ConfigResource(), input);
- } else {
- throw new IllegalStateException(String.format(
- "Cannot set non-existing group %s as owner of group %s.",
- ownerGroupName, info.name));
+ if (isInternalGroup(new AccountGroup.UUID(info.ownerId))) {
+ String ownerGroupName = getGroupName(info.ownerId);
+ if (input.importOwnerGroup) {
+ importGroupFactory.create(new AccountGroup.NameKey(ownerGroupName))
+ .apply(new ConfigResource(), input);
+ } else {
+ throw new IllegalStateException(String.format(
+ "Cannot set non-existing group %s as owner of group %s.",
+ ownerGroupName, info.name));
+ }
}
}
group.setOwnerGroupUUID(new AccountGroup.UUID(info.ownerId));
@@ -261,18 +272,21 @@
String groupName, List<GroupInfo> includedGroups)
throws BadRequestException, ResourceConflictException,
PreconditionFailedException, NoSuchAccountException, OrmException,
- IOException {
+ IOException, MethodNotAllowedException {
List<AccountGroupById> includeList = new ArrayList<>();
for (GroupInfo includedGroup : includedGroups) {
- if (getGroupByUUID(includedGroup.id) == null) {
- String includedGroupName = getGroupName(includedGroup.id);
- if (input.importIncludedGroups) {
- importGroupFactory.create(new AccountGroup.NameKey(includedGroupName))
- .apply(new ConfigResource(), input);
- } else {
- throw new IllegalStateException(String.format(
- "Cannot include non-existing group %s into group %s.",
- includedGroupName, groupName));
+ if (isInternalGroup(new AccountGroup.UUID(includedGroup.id))) {
+ if (getGroupByUUID(includedGroup.id) == null) {
+ String includedGroupName = getGroupName(includedGroup.id);
+ if (input.importIncludedGroups) {
+ importGroupFactory.create(
+ new AccountGroup.NameKey(includedGroupName)).apply(
+ new ConfigResource(), input);
+ } else {
+ throw new IllegalStateException(String.format(
+ "Cannot include non-existing group %s into group %s.",
+ includedGroupName, groupName));
+ }
}
}
AccountGroup.UUID memberUUID = new AccountGroup.UUID(includedGroup.id);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroupsStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroupsStep.java
index 0be6248..bcccf39 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroupsStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportGroupsStep.java
@@ -14,8 +14,11 @@
package com.googlesource.gerrit.plugins.importer;
+import static com.google.gerrit.reviewdb.client.AccountGroup.isInternalGroup;
+
import com.google.gerrit.common.errors.NoSuchAccountException;
import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.PreconditionFailedException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.reviewdb.client.AccountGroup;
@@ -79,20 +82,22 @@
Set<AccountGroup.UUID> groupUUIDs = projectConfig.getAllGroupUUIDs();
pm.beginTask("Import Groups", groupUUIDs.size());
for (AccountGroup.UUID groupUUID : groupUUIDs) {
- if (groupCache.get(groupUUID) == null) {
- ImportGroup.Input input = new ImportGroup.Input();
- input.from = fromGerrit;
- input.user = user;
- input.pass = password;
- input.importOwnerGroup = true;
- input.importIncludedGroups = true;
- try {
- importGroupFactory.create(
- new AccountGroup.NameKey(projectConfig.getGroup(groupUUID).getName()))
- .apply(new ConfigResource(), input);
- } catch (ResourceConflictException e) {
- // should not happen
- throw new IllegalStateException(e);
+ if (isInternalGroup(groupUUID)) {
+ if (groupCache.get(groupUUID) == null) {
+ ImportGroup.Input input = new ImportGroup.Input();
+ input.from = fromGerrit;
+ input.user = user;
+ input.pass = password;
+ input.importOwnerGroup = true;
+ input.importIncludedGroups = true;
+ try {
+ importGroupFactory.create(
+ new AccountGroup.NameKey(projectConfig.getGroup(groupUUID)
+ .getName())).apply(new ConfigResource(), input);
+ } catch (ResourceConflictException | MethodNotAllowedException e) {
+ // should not happen
+ throw new IllegalStateException(e);
+ }
}
}
pm.update(1);