Adapt ProjectBranchesScreen to use REST for listing/deleting branches
This removes the old RPC for deleting branches which is now not used anymore. Change-Id: Ib50c61aa7aaff86f5dfe0244b2925d3532018f93 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
		@@ -1,142 +0,0 @@
 | 
			
		||||
// Copyright (C) 2009 The Android Open Source Project
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
// http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package com.google.gerrit.httpd.rpc.project;
 | 
			
		||||
 | 
			
		||||
import com.google.gerrit.common.ChangeHooks;
 | 
			
		||||
import com.google.gerrit.httpd.rpc.Handler;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Branch;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Project;
 | 
			
		||||
import com.google.gerrit.reviewdb.server.ReviewDb;
 | 
			
		||||
import com.google.gerrit.server.IdentifiedUser;
 | 
			
		||||
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 | 
			
		||||
import com.google.gerrit.server.git.GitRepositoryManager;
 | 
			
		||||
import com.google.gerrit.server.project.NoSuchProjectException;
 | 
			
		||||
import com.google.gerrit.server.project.ProjectControl;
 | 
			
		||||
import com.google.gwtorm.server.OrmException;
 | 
			
		||||
import com.google.inject.Inject;
 | 
			
		||||
import com.google.inject.assistedinject.Assisted;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.jgit.errors.RepositoryNotFoundException;
 | 
			
		||||
import org.eclipse.jgit.lib.RefUpdate;
 | 
			
		||||
import org.eclipse.jgit.lib.Repository;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
class DeleteBranches extends Handler<Set<Branch.NameKey>> {
 | 
			
		||||
  private static final Logger log =
 | 
			
		||||
      LoggerFactory.getLogger(DeleteBranches.class);
 | 
			
		||||
 | 
			
		||||
  interface Factory {
 | 
			
		||||
    DeleteBranches create(@Assisted Project.NameKey name,
 | 
			
		||||
        @Assisted Set<Branch.NameKey> toRemove);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private final ProjectControl.Factory projectControlFactory;
 | 
			
		||||
  private final GitRepositoryManager repoManager;
 | 
			
		||||
  private final GitReferenceUpdated gitRefUpdated;
 | 
			
		||||
  private final IdentifiedUser identifiedUser;
 | 
			
		||||
  private final ChangeHooks hooks;
 | 
			
		||||
  private final ReviewDb db;
 | 
			
		||||
 | 
			
		||||
  private final Project.NameKey projectName;
 | 
			
		||||
  private final Set<Branch.NameKey> toRemove;
 | 
			
		||||
 | 
			
		||||
  @Inject
 | 
			
		||||
  DeleteBranches(final ProjectControl.Factory projectControlFactory,
 | 
			
		||||
      final GitRepositoryManager repoManager,
 | 
			
		||||
      final GitReferenceUpdated gitRefUpdated,
 | 
			
		||||
      final IdentifiedUser identifiedUser,
 | 
			
		||||
      final ChangeHooks hooks,
 | 
			
		||||
      final ReviewDb db,
 | 
			
		||||
 | 
			
		||||
      @Assisted Project.NameKey name, @Assisted Set<Branch.NameKey> toRemove) {
 | 
			
		||||
    this.projectControlFactory = projectControlFactory;
 | 
			
		||||
    this.repoManager = repoManager;
 | 
			
		||||
    this.gitRefUpdated = gitRefUpdated;
 | 
			
		||||
    this.identifiedUser = identifiedUser;
 | 
			
		||||
    this.hooks = hooks;
 | 
			
		||||
    this.db = db;
 | 
			
		||||
 | 
			
		||||
    this.projectName = name;
 | 
			
		||||
    this.toRemove = toRemove;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public Set<Branch.NameKey> call() throws NoSuchProjectException,
 | 
			
		||||
      RepositoryNotFoundException, OrmException, IOException {
 | 
			
		||||
    final ProjectControl projectControl =
 | 
			
		||||
        projectControlFactory.controlFor(projectName);
 | 
			
		||||
 | 
			
		||||
    final Iterator<Branch.NameKey> branchIt = toRemove.iterator();
 | 
			
		||||
    while (branchIt.hasNext()) {
 | 
			
		||||
      final Branch.NameKey k = branchIt.next();
 | 
			
		||||
      if (!projectName.equals(k.getParentKey())) {
 | 
			
		||||
        throw new IllegalArgumentException("All keys must be from same project");
 | 
			
		||||
      }
 | 
			
		||||
      if (!projectControl.controlForRef(k).canDelete()) {
 | 
			
		||||
        throw new IllegalStateException("Cannot delete " + k.getShortName());
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (db.changes().byBranchOpenAll(k).iterator().hasNext()) {
 | 
			
		||||
        branchIt.remove();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    final Set<Branch.NameKey> deleted = new HashSet<Branch.NameKey>();
 | 
			
		||||
    final Repository r = repoManager.openRepository(projectName);
 | 
			
		||||
    try {
 | 
			
		||||
      for (final Branch.NameKey branchKey : toRemove) {
 | 
			
		||||
        final String refname = branchKey.get();
 | 
			
		||||
        final RefUpdate.Result result;
 | 
			
		||||
        final RefUpdate u;
 | 
			
		||||
        try {
 | 
			
		||||
          u = r.updateRef(refname);
 | 
			
		||||
          u.setForceUpdate(true);
 | 
			
		||||
          result = u.delete();
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
          log.error("Cannot delete " + branchKey, e);
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch (result) {
 | 
			
		||||
          case NEW:
 | 
			
		||||
          case NO_CHANGE:
 | 
			
		||||
          case FAST_FORWARD:
 | 
			
		||||
          case FORCED:
 | 
			
		||||
            deleted.add(branchKey);
 | 
			
		||||
            gitRefUpdated.fire(projectName, u);
 | 
			
		||||
            hooks.doRefUpdatedHook(branchKey, u, identifiedUser.getAccount());
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
          case REJECTED_CURRENT_BRANCH:
 | 
			
		||||
            log.warn("Cannot delete " + branchKey + ": " + result.name());
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
          default:
 | 
			
		||||
            log.error("Cannot delete " + branchKey + ": " + result.name());
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } finally {
 | 
			
		||||
      r.close();
 | 
			
		||||
    }
 | 
			
		||||
    return deleted;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -19,7 +19,6 @@ import com.google.gerrit.common.data.ListBranchesResult;
 | 
			
		||||
import com.google.gerrit.common.data.ProjectAccess;
 | 
			
		||||
import com.google.gerrit.common.data.ProjectAdminService;
 | 
			
		||||
import com.google.gerrit.common.data.ProjectDetail;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Branch;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Change;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Project;
 | 
			
		||||
import com.google.gwtjsonrpc.common.AsyncCallback;
 | 
			
		||||
@@ -28,13 +27,11 @@ import com.google.inject.Inject;
 | 
			
		||||
import org.eclipse.jgit.lib.ObjectId;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
class ProjectAdminServiceImpl implements ProjectAdminService {
 | 
			
		||||
  private final ChangeProjectAccess.Factory changeProjectAccessFactory;
 | 
			
		||||
  private final ReviewProjectAccess.Factory reviewProjectAccessFactory;
 | 
			
		||||
  private final ChangeProjectSettings.Factory changeProjectSettingsFactory;
 | 
			
		||||
  private final DeleteBranches.Factory deleteBranchesFactory;
 | 
			
		||||
  private final ListBranches.Factory listBranchesFactory;
 | 
			
		||||
  private final VisibleProjectDetails.Factory visibleProjectDetailsFactory;
 | 
			
		||||
  private final ProjectAccessFactory.Factory projectAccessFactory;
 | 
			
		||||
@@ -44,7 +41,6 @@ class ProjectAdminServiceImpl implements ProjectAdminService {
 | 
			
		||||
  ProjectAdminServiceImpl(final ChangeProjectAccess.Factory changeProjectAccessFactory,
 | 
			
		||||
      final ReviewProjectAccess.Factory reviewProjectAccessFactory,
 | 
			
		||||
      final ChangeProjectSettings.Factory changeProjectSettingsFactory,
 | 
			
		||||
      final DeleteBranches.Factory deleteBranchesFactory,
 | 
			
		||||
      final ListBranches.Factory listBranchesFactory,
 | 
			
		||||
      final VisibleProjectDetails.Factory visibleProjectDetailsFactory,
 | 
			
		||||
      final ProjectAccessFactory.Factory projectAccessFactory,
 | 
			
		||||
@@ -52,7 +48,6 @@ class ProjectAdminServiceImpl implements ProjectAdminService {
 | 
			
		||||
    this.changeProjectAccessFactory = changeProjectAccessFactory;
 | 
			
		||||
    this.reviewProjectAccessFactory = reviewProjectAccessFactory;
 | 
			
		||||
    this.changeProjectSettingsFactory = changeProjectSettingsFactory;
 | 
			
		||||
    this.deleteBranchesFactory = deleteBranchesFactory;
 | 
			
		||||
    this.listBranchesFactory = listBranchesFactory;
 | 
			
		||||
    this.visibleProjectDetailsFactory = visibleProjectDetailsFactory;
 | 
			
		||||
    this.projectAccessFactory = projectAccessFactory;
 | 
			
		||||
@@ -108,11 +103,4 @@ class ProjectAdminServiceImpl implements ProjectAdminService {
 | 
			
		||||
      final AsyncCallback<ListBranchesResult> callback) {
 | 
			
		||||
    listBranchesFactory.create(projectName).to(callback);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void deleteBranch(final Project.NameKey projectName,
 | 
			
		||||
      final Set<Branch.NameKey> toRemove,
 | 
			
		||||
      final AsyncCallback<Set<Branch.NameKey>> callback) {
 | 
			
		||||
    deleteBranchesFactory.create(projectName, toRemove).to(callback);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ public class ProjectModule extends RpcServletModule {
 | 
			
		||||
        factory(ChangeProjectAccess.Factory.class);
 | 
			
		||||
        factory(ReviewProjectAccess.Factory.class);
 | 
			
		||||
        factory(ChangeProjectSettings.Factory.class);
 | 
			
		||||
        factory(DeleteBranches.Factory.class);
 | 
			
		||||
        factory(ListBranches.Factory.class);
 | 
			
		||||
        factory(VisibleProjectDetails.Factory.class);
 | 
			
		||||
        factory(ProjectAccessFactory.Factory.class);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user