From 2524f498006b56b352f5cafcdd0c26bf620c6f5f Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 8 Dec 2016 19:18:20 +0300 Subject: [PATCH] [vcs-log] util method for getting details synchronously --- .../vcs/log/data/CommitDetailsGetter.java | 6 ++--- .../com/intellij/vcs/log/impl/VcsLogUtil.java | 22 ++++++++++++++++++- .../src/git4idea/reset/GitUncommitAction.java | 16 ++++++-------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java index 5f3df9fe1cb1..0eafe2475cb0 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java @@ -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 readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root, @NotNull List hashes) throws VcsException { - List result = ContainerUtil.newArrayList(); - logProvider.readFullDetails(root, hashes, result::add); - return result; + return VcsLogUtil.getDetails(logProvider, root, hashes); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java index 4511a3056b38..1c3da74fc9d2 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java @@ -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 getDetails(@NotNull VcsLogProvider logProvider, + @NotNull VirtualFile root, + @NotNull List hashes) throws VcsException { + List result = ContainerUtil.newArrayList(); + logProvider.readFullDetails(root, hashes, result::add); + return result; + } } diff --git a/plugins/git4idea/src/git4idea/reset/GitUncommitAction.java b/plugins/git4idea/src/git4idea/reset/GitUncommitAction.java index 5ba7433398fa..86955d574196 100644 --- a/plugins/git4idea/src/git4idea/reset/GitUncommitAction.java +++ b/plugins/git4idea/src/git4idea/reset/GitUncommitAction.java @@ -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 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(); }