Do not fail on adding a user to a group that is already a member
Trying to add a user to a group that is already a member of the group currently fails with 'Not Found'. If multiple users are added in bulk, the users which are already a member of the group are ignored. Do the same on adding a single user to a group. If the user is already a member of the group do nothing, but also do not fail. Change-Id: I644af9876c8488d9bf80d2c4bec3cbd75b2ffead Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
@@ -14,17 +14,12 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.group;
|
package com.google.gerrit.server.group;
|
||||||
|
|
||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
|
||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
|
||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
|
||||||
import com.google.gerrit.extensions.restapi.RestReadView;
|
import com.google.gerrit.extensions.restapi.RestReadView;
|
||||||
import com.google.gerrit.server.group.MembersCollection.MemberInfo;
|
import com.google.gerrit.server.group.MembersCollection.MemberInfo;
|
||||||
|
|
||||||
public class GetMember implements RestReadView<MemberResource> {
|
public class GetMember implements RestReadView<MemberResource> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MemberInfo apply(final MemberResource resource) throws AuthException,
|
public MemberInfo apply(MemberResource resource) {
|
||||||
BadRequestException, ResourceConflictException, Exception {
|
|
||||||
return MembersCollection.parse(resource.getUser().getAccount());
|
return MembersCollection.parse(resource.getUser().getAccount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import static com.google.gerrit.server.group.MemberResource.MEMBER_KIND;
|
|||||||
import com.google.gerrit.extensions.registration.DynamicMap;
|
import com.google.gerrit.extensions.registration.DynamicMap;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiModule;
|
import com.google.gerrit.extensions.restapi.RestApiModule;
|
||||||
import com.google.gerrit.server.group.DeleteMembers.DeleteMember;
|
import com.google.gerrit.server.group.DeleteMembers.DeleteMember;
|
||||||
|
import com.google.gerrit.server.group.PutMembers.UpdateMember;
|
||||||
|
|
||||||
public class Module extends RestApiModule {
|
public class Module extends RestApiModule {
|
||||||
@Override
|
@Override
|
||||||
@@ -37,6 +38,7 @@ public class Module extends RestApiModule {
|
|||||||
get(MEMBER_KIND).to(GetMember.class);
|
get(MEMBER_KIND).to(GetMember.class);
|
||||||
post(GROUP_KIND, "members").to(PostMembers.class);
|
post(GROUP_KIND, "members").to(PostMembers.class);
|
||||||
put(GROUP_KIND, "members").to(PutMembers.class);
|
put(GROUP_KIND, "members").to(PutMembers.class);
|
||||||
|
put(MEMBER_KIND).to(UpdateMember.class);
|
||||||
delete(MEMBER_KIND).to(DeleteMember.class);
|
delete(MEMBER_KIND).to(DeleteMember.class);
|
||||||
|
|
||||||
child(GROUP_KIND, "groups").to(IncludedGroupsCollection.class);
|
child(GROUP_KIND, "groups").to(IncludedGroupsCollection.class);
|
||||||
|
|||||||
@@ -224,4 +224,27 @@ class PutMembers implements RestModifyView<GroupResource, Input> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class UpdateMember implements RestModifyView<MemberResource, PutMember.Input> {
|
||||||
|
static class Input {
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Provider<GetMember> get;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
UpdateMember(Provider<GetMember> get) {
|
||||||
|
this.get = get;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<PutMember.Input> inputType() {
|
||||||
|
return PutMember.Input.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object apply(MemberResource resource, PutMember.Input input) {
|
||||||
|
// Do nothing, the user is already a member.
|
||||||
|
return get.get().apply(resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user