[vcs-log] util method for getting details synchronously

This commit is contained in:
Julia Beliaeva
2016-12-08 21:05:57 +03:00
parent a6ae16c84d
commit 2524f49800
3 changed files with 30 additions and 14 deletions
@@ -3,9 +3,9 @@ package com.intellij.vcs.log.data;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.VcsFullCommitDetails;
import com.intellij.vcs.log.VcsLogProvider;
import com.intellij.vcs.log.impl.VcsLogUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -33,8 +33,6 @@ public class CommitDetailsGetter extends AbstractDataGetter<VcsFullCommitDetails
@Override
protected List<? extends VcsFullCommitDetails> readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root,
@NotNull List<String> hashes) throws VcsException {
List<VcsFullCommitDetails> result = ContainerUtil.newArrayList();
logProvider.readFullDetails(root, hashes, result::add);
return result;
return VcsLogUtil.getDetails(logProvider, root, hashes);
}
}
@@ -21,12 +21,13 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.LoadingDetails;
import com.intellij.vcs.log.data.VcsLogData;
import com.intellij.vcs.log.graph.VisibleGraph;
import com.intellij.vcs.log.ui.VcsLogUiImpl;
import org.jetbrains.annotations.NotNull;
@@ -36,6 +37,10 @@ import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import static com.intellij.util.ObjectUtils.notNull;
import static com.intellij.util.containers.ContainerUtil.getFirstItem;
import static java.util.Collections.singletonList;
public class VcsLogUtil {
public static final int MAX_SELECTED_COMMITS = 1000;
@@ -216,4 +221,19 @@ public class VcsLogUtil {
}
return false;
}
@NotNull
public static VcsFullCommitDetails getDetails(@NotNull VcsLogData data, @NotNull VirtualFile root, @NotNull Hash hash)
throws VcsException {
return notNull(getFirstItem(getDetails(data.getLogProvider(root), root, singletonList(hash.asString()))));
}
@NotNull
public static List<? extends VcsFullCommitDetails> getDetails(@NotNull VcsLogProvider logProvider,
@NotNull VirtualFile root,
@NotNull List<String> hashes) throws VcsException {
List<VcsFullCommitDetails> result = ContainerUtil.newArrayList();
logProvider.readFullDetails(root, hashes, result::add);
return result;
}
}
@@ -36,6 +36,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.*;
import com.intellij.vcs.log.impl.VcsLogUtil;
import git4idea.GitRemoteBranch;
import git4idea.GitUtil;
import git4idea.config.GitSharedSettings;
@@ -52,7 +53,6 @@ import static com.intellij.util.containers.ContainerUtil.getFirstItem;
import static git4idea.GitUtil.HEAD;
import static git4idea.GitUtil.getRepositoryManager;
import static git4idea.reset.GitResetMode.SOFT;
import static java.util.Collections.singletonList;
import static java.util.Collections.singletonMap;
public class GitUncommitAction extends DumbAwareAction {
@@ -172,11 +172,11 @@ public class GitUncommitAction extends DumbAwareAction {
GitSharedSettings settings = GitSharedSettings.getInstance(repository.getProject());
// protected branches hold patterns for branch names without remote names
return repository.getBranches().getRemoteBranches().stream().
filter(it -> settings.isBranchProtected(it.getNameForRemoteOperations())).
map(GitRemoteBranch::getNameForLocalOperations).
filter(branches::contains).
findAny().
orElse(null);
filter(it -> settings.isBranchProtected(it.getNameForRemoteOperations())).
map(GitRemoteBranch::getNameForLocalOperations).
filter(branches::contains).
findAny().
orElse(null);
}
private static void resetInBackground(@NotNull VcsLogData data,
@@ -218,9 +218,7 @@ public class GitUncommitAction extends DumbAwareAction {
VirtualFile root = commit.getRoot();
VcsFullCommitDetails details = getChangesFromCache(data, hash, root);
if (details == null) {
Ref<VcsFullCommitDetails> ref = new Ref<>();
data.getLogProvider(root).readFullDetails(root, singletonList(hash.asString()), ref::set);
details = ref.get();
details = VcsLogUtil.getDetails(data, root, hash);
}
return details.getChanges();
}