From bcf5f08ac14c2afa6444f7a46ec854f1fd818872 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 5 May 2016 19:31:31 +0300 Subject: [PATCH] IDEA-152241 don't fail if couldn't load commits for a branch This can happen for various reasons, e.g. if the branch doesn't have an upstream in one of remaining repositories. No need to fail everything in those cases. Also inline the history() method: it doesn't conform to other Git api methods. --- .../branch/GitDeleteBranchOperation.java | 17 +++++++++++++++-- plugins/git4idea/src/git4idea/commands/Git.java | 3 --- .../git4idea/src/git4idea/commands/GitImpl.java | 15 --------------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/plugins/git4idea/src/git4idea/branch/GitDeleteBranchOperation.java b/plugins/git4idea/src/git4idea/branch/GitDeleteBranchOperation.java index b7ea81dfb061..0b0ce76125e4 100644 --- a/plugins/git4idea/src/git4idea/branch/GitDeleteBranchOperation.java +++ b/plugins/git4idea/src/git4idea/branch/GitDeleteBranchOperation.java @@ -18,11 +18,13 @@ package git4idea.branch; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; +import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import git4idea.GitCommit; import git4idea.commands.*; +import git4idea.history.GitHistoryUtils; import git4idea.repo.GitRepository; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,6 +33,8 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static com.intellij.dvcs.DvcsUtil.getShortRepositoryName; + /** * Deletes a branch. * If branch is not fully merged to the current branch, shows a dialog with the list of unmerged commits and with a list of branches @@ -182,8 +186,17 @@ class GitDeleteBranchOperation extends GitBranchOperation { } @NotNull - private List getUnmergedCommits(@NotNull GitRepository repository, @NotNull String branchName, @NotNull String baseBranch) { - return myGit.history(repository, baseBranch + ".." + branchName); + private static List getUnmergedCommits(@NotNull GitRepository repository, + @NotNull String branchName, + @NotNull String baseBranch) { + String range = baseBranch + ".." + branchName; + try { + return GitHistoryUtils.history(repository.getProject(), repository.getRoot(), range); + } + catch (VcsException e) { + LOG.warn("Couldn't get `git log " + range + "` in " + getShortRepositoryName(repository), e); + } + return Collections.emptyList(); } @NotNull diff --git a/plugins/git4idea/src/git4idea/commands/Git.java b/plugins/git4idea/src/git4idea/commands/Git.java index d6ae90eece6d..37867db9ac81 100644 --- a/plugins/git4idea/src/git4idea/commands/Git.java +++ b/plugins/git4idea/src/git4idea/commands/Git.java @@ -152,9 +152,6 @@ public interface Git { @NotNull GitCommandResult stashPop(@NotNull GitRepository repository, @NotNull GitLineHandlerListener... listeners); - @NotNull - List history(@NotNull GitRepository repository, @NotNull String range); - @NotNull GitCommandResult fetch(@NotNull GitRepository repository, @NotNull GitRemote remote, diff --git a/plugins/git4idea/src/git4idea/commands/GitImpl.java b/plugins/git4idea/src/git4idea/commands/GitImpl.java index a3c6ff3aeb7c..9620eb00e52b 100644 --- a/plugins/git4idea/src/git4idea/commands/GitImpl.java +++ b/plugins/git4idea/src/git4idea/commands/GitImpl.java @@ -29,12 +29,9 @@ import com.intellij.util.Function; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcsUtil.VcsFileUtil; -import git4idea.GitCommit; -import git4idea.GitExecutionException; import git4idea.GitVcs; import git4idea.branch.GitRebaseParams; import git4idea.config.GitVersionSpecialty; -import git4idea.history.GitHistoryUtils; import git4idea.rebase.GitInteractiveRebaseEditorHandler; import git4idea.rebase.GitRebaseEditorService; import git4idea.rebase.GitRebaseResumeMode; @@ -224,18 +221,6 @@ public class GitImpl implements Git { return run(handler); } - @NotNull - @Override - public List history(@NotNull GitRepository repository, @NotNull String range) { - try { - return GitHistoryUtils.history(repository.getProject(), repository.getRoot(), range); - } - catch (VcsException e) { - // this is critical, because we need to show the list of unmerged commits, and it shouldn't happen => inform user and developer - throw new GitExecutionException("Couldn't get [git log " + range + "] on repository [" + repository.getRoot() + "]", e); - } - } - @Override @NotNull public GitCommandResult merge(@NotNull GitRepository repository, @NotNull String branchToMerge,