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;
 | 
			
		||||
 | 
			
		||||
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.server.group.MembersCollection.MemberInfo;
 | 
			
		||||
 | 
			
		||||
public class GetMember implements RestReadView<MemberResource> {
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public MemberInfo apply(final MemberResource resource) throws AuthException,
 | 
			
		||||
      BadRequestException, ResourceConflictException, Exception {
 | 
			
		||||
  public MemberInfo apply(MemberResource resource) {
 | 
			
		||||
    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.restapi.RestApiModule;
 | 
			
		||||
import com.google.gerrit.server.group.DeleteMembers.DeleteMember;
 | 
			
		||||
import com.google.gerrit.server.group.PutMembers.UpdateMember;
 | 
			
		||||
 | 
			
		||||
public class Module extends RestApiModule {
 | 
			
		||||
  @Override
 | 
			
		||||
@@ -37,6 +38,7 @@ public class Module extends RestApiModule {
 | 
			
		||||
    get(MEMBER_KIND).to(GetMember.class);
 | 
			
		||||
    post(GROUP_KIND, "members").to(PostMembers.class);
 | 
			
		||||
    put(GROUP_KIND, "members").to(PutMembers.class);
 | 
			
		||||
    put(MEMBER_KIND).to(UpdateMember.class);
 | 
			
		||||
    delete(MEMBER_KIND).to(DeleteMember.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