git: get rid of GitPlatformFacade as not valuable anymore

The interface was introduce as an attempt to separate git (dvcs) module
from the rest of the platform, to be able to write module tests
(faster and more reliable than the full-platform one).

However, the idea didn't proove itself: it appeared to be too tedious
to substitute all platform references by the facade methods, while
the platform tests became faster and used now pretty well.

Substitute the usages by actual calls to the platform methods.
Remove GPF usages and methods, or deprecate those which are called
by 3-party plugins.
This commit is contained in:
Kirill Likhodedov
2016-05-02 16:16:11 +03:00
parent e7fed368e5
commit d5223f0f78
57 changed files with 257 additions and 536 deletions
@@ -1,102 +0,0 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* 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.intellij.dvcs;
import com.intellij.ide.SaveAndSyncHandler;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.AbstractVcsHelper;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* IntelliJ code provides a lot of statical bindings to the interested pieces of data. For example we need to execute code
* like below to get list of modules for the target project:
* <pre>
* ModuleManager.getInstance(project).getModules()
* </pre>
* That means that it's not possible to test target classes in isolation if corresponding infrastructure is not set up.
* However, we don't want to set it up if we execute a simple standalone test.
* <p/>
* This interface is intended to encapsulate access to the underlying IntelliJ functionality.
* <p/>
* Implementations of this interface are expected to be thread-safe.
*
* @author Kirill Likhodedov
*/
public interface DvcsPlatformFacade {
@NotNull
AbstractVcs getVcs(@NotNull Project project);
@NotNull
ProjectLevelVcsManager getVcsManager(@NotNull Project project);
void showDialog(@NotNull DialogWrapper dialog);
@NotNull
ProjectRootManager getProjectRootManager(@NotNull Project project);
/**
* Invokes {@link com.intellij.openapi.application.Application#runReadAction(Computable)}.
*/
<T> T runReadAction(@NotNull Computable<T> computable);
void runReadAction(@NotNull Runnable runnable);
void runWriteAction(@NotNull Runnable runnable);
void invokeAndWait(@NotNull Runnable runnable, @NotNull ModalityState modalityState);
void executeOnPooledThread(@NotNull Runnable runnable);
ChangeListManagerEx getChangeListManager(@NotNull Project project);
LocalFileSystem getLocalFileSystem();
@NotNull
AbstractVcsHelper getVcsHelper(@NotNull Project project);
@Nullable
IdeaPluginDescriptor getPluginByClassName(@NotNull String name);
/**
* Gets line separator of the given virtual file.
* If {@code detect} is set {@code true}, and the information about line separator wasn't retrieved yet, loads the file and detects.
*/
@Nullable
String getLineSeparator(@NotNull VirtualFile file, boolean detect);
void saveAllDocuments();
@NotNull
ProjectManagerEx getProjectManager();
@NotNull
SaveAndSyncHandler getSaveAndSyncHandler();
void hardRefresh(@NotNull VirtualFile root);
}
@@ -1,139 +0,0 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* 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.intellij.dvcs;
import com.intellij.ide.SaveAndSyncHandler;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vcs.AbstractVcsHelper;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.openapi.application.ModalityState.defaultModalityState;
/**
* @author Kirill Likhodedov
*/
public abstract class DvcsPlatformFacadeImpl implements DvcsPlatformFacade {
@NotNull
@Override
public ProjectLevelVcsManager getVcsManager(@NotNull Project project) {
return ProjectLevelVcsManager.getInstance(project);
}
@Override
public void showDialog(@NotNull DialogWrapper dialog) {
dialog.show();
}
@NotNull
@Override
public ProjectRootManager getProjectRootManager(@NotNull Project project) {
return ProjectRootManager.getInstance(project);
}
@Override
public <T> T runReadAction(@NotNull Computable<T> computable) {
return ApplicationManager.getApplication().runReadAction(computable);
}
@Override
public void runReadAction(@NotNull Runnable runnable) {
ApplicationManager.getApplication().runReadAction(runnable);
}
@Override
public void runWriteAction(@NotNull Runnable runnable) {
ApplicationManager.getApplication().runWriteAction(runnable);
}
@Override
public void invokeAndWait(@NotNull Runnable runnable, @NotNull ModalityState modalityState) {
ApplicationManager.getApplication().invokeAndWait(runnable, modalityState);
}
@Override
public void executeOnPooledThread(@NotNull Runnable runnable) {
ApplicationManager.getApplication().executeOnPooledThread(runnable);
}
@Override
public ChangeListManagerEx getChangeListManager(@NotNull Project project) {
return (ChangeListManagerEx)ChangeListManager.getInstance(project);
}
@Override
public LocalFileSystem getLocalFileSystem() {
return LocalFileSystem.getInstance();
}
@NotNull
@Override
public AbstractVcsHelper getVcsHelper(@NotNull Project project) {
return AbstractVcsHelper.getInstance(project);
}
@Nullable
@Override
public IdeaPluginDescriptor getPluginByClassName(@NotNull String name) {
return PluginManager.getPlugin(PluginManager.getPluginByClassName(name));
}
@Nullable
@Override
public String getLineSeparator(@NotNull VirtualFile file, boolean detect) {
return LoadTextUtil.detectLineSeparator(file, detect);
}
@Override
public void saveAllDocuments() {
ApplicationManager.getApplication().invokeAndWait(() -> FileDocumentManager.getInstance().saveAllDocuments(), defaultModalityState());
}
@NotNull
@Override
public ProjectManagerEx getProjectManager() {
return ProjectManagerEx.getInstanceEx();
}
@NotNull
@Override
public SaveAndSyncHandler getSaveAndSyncHandler() {
return SaveAndSyncHandler.getInstance();
}
@Override
public void hardRefresh(@NotNull VirtualFile root) {
VfsUtil.markDirtyAndRefresh(false, true, false, root);
}
}
@@ -24,7 +24,6 @@ import com.intellij.remoteServer.runtime.deployment.DeploymentLogManager;
import com.intellij.remoteServer.runtime.deployment.DeploymentTask;
import com.intellij.util.ArrayUtil;
import com.intellij.util.concurrency.Semaphore;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.actions.GitInit;
import git4idea.commands.*;
@@ -161,8 +160,7 @@ public class CloudGitDeploymentRuntime extends CloudDeploymentRuntime {
if (myGit == null) {
throw new ServerRuntimeException("Can't initialize GIT");
}
GitPlatformFacade gitPlatformFacade = ServiceManager.getService(GitPlatformFacade.class);
myChangeListManager = gitPlatformFacade.getChangeListManager(project);
myChangeListManager = ChangeListManagerImpl.getInstanceImpl(project);
}
@Override
@@ -15,18 +15,30 @@
*/
package git4idea;
import com.intellij.dvcs.DvcsPlatformFacade;
import com.intellij.dvcs.repo.RepositoryManager;
import com.intellij.openapi.project.Project;
import git4idea.config.GitVcsSettings;
import git4idea.repo.GitRepository;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
public interface GitPlatformFacade extends DvcsPlatformFacade {
/**
* @deprecated To remove in IDEA 2017. Use direct instance or ServiceManager methods to access platform structures.
*/
@Deprecated
public interface GitPlatformFacade {
@NotNull
<T extends RepositoryManager<GitRepository>> T getRepositoryManager(@NotNull Project project);
/**
* @deprecated To remove in IDEA 2017. Use {@link ChangeListManager#getInstance(Project)}.
*/
@SuppressWarnings("unused")
@Deprecated
ChangeListManagerEx getChangeListManager(@NotNull Project project);
@NotNull
GitVcsSettings getSettings(Project project);
/**
* @deprecated To remove in IDEA 2017. Use {@link VfsUtil#markDirtyAndRefresh(boolean, boolean, boolean, VirtualFile...)}.
*/
@SuppressWarnings("unused")
@Deprecated
void hardRefresh(@NotNull VirtualFile root);
}
@@ -15,32 +15,22 @@
*/
package git4idea;
import com.intellij.dvcs.DvcsPlatformFacadeImpl;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import git4idea.config.GitVcsSettings;
import git4idea.repo.GitRepositoryManager;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
class GitPlatformFacadeImpl extends DvcsPlatformFacadeImpl implements GitPlatformFacade {
public class GitPlatformFacadeImpl implements GitPlatformFacade {
@NotNull
@Override
public AbstractVcs getVcs(@NotNull Project project) {
return ProjectLevelVcsManager.getInstance(project).findVcsByName(GitVcs.NAME);
public ChangeListManagerEx getChangeListManager(@NotNull Project project) {
return (ChangeListManagerEx)ChangeListManager.getInstance(project);
}
@NotNull
@Override
public GitRepositoryManager getRepositoryManager(@NotNull Project project) {
return ServiceManager.getService(project, GitRepositoryManager.class);
}
@NotNull
@Override
public GitVcsSettings getSettings(@NotNull Project project) {
return GitVcsSettings.getInstance(project);
public void hardRefresh(@NotNull VirtualFile root) {
VfsUtil.markDirtyAndRefresh(false, true, false, root);
}
}
@@ -17,12 +17,11 @@ package git4idea.actions;
import com.intellij.dvcs.DvcsUtil;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.commands.GitHandlerUtil;
import git4idea.commands.GitLineHandler;
import git4idea.i18n.GitBundle;
@@ -61,7 +60,7 @@ public class GitStash extends GitRepositoryAction {
finally {
DvcsUtil.workingTreeChangeFinished(project, token);
}
ServiceManager.getService(project, GitPlatformFacade.class).hardRefresh(root);
VfsUtil.markDirtyAndRefresh(false, true, false, root);
}
/**
@@ -15,7 +15,6 @@
*/
package git4idea.branch;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
@@ -23,9 +22,9 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.ArrayUtil;
import com.intellij.xml.util.XmlStringUtil;
import git4idea.DialogManager;
import git4idea.GitBranch;
import git4idea.GitCommit;
import git4idea.GitPlatformFacade;
import git4idea.i18n.GitBundle;
import git4idea.repo.GitRepository;
import git4idea.ui.GitCommitListWithDiffPanel;
@@ -78,7 +77,7 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper {
@NotNull List<String> mergedToBranches,
@Nullable String baseBranch) {
GitBranchIsNotFullyMergedDialog dialog = new GitBranchIsNotFullyMergedDialog(project, commits, branchToDelete, baseBranch, mergedToBranches);
ServiceManager.getService(project, GitPlatformFacade.class).showDialog(dialog);
DialogManager.show(dialog);
return dialog.isOK();
}
@@ -16,7 +16,9 @@
package git4idea.branch;
import com.intellij.dvcs.DvcsUtil;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
@@ -24,6 +26,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
@@ -40,6 +43,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
import static com.intellij.openapi.application.ModalityState.defaultModalityState;
import static com.intellij.openapi.util.text.StringUtil.pluralize;
/**
@@ -51,21 +55,19 @@ abstract class GitBranchOperation {
protected static final Logger LOG = Logger.getInstance(GitBranchOperation.class);
@NotNull protected final Project myProject;
@NotNull protected final GitPlatformFacade myFacade;
@NotNull protected final Git myGit;
@NotNull protected final GitBranchUiHandler myUiHandler;
@NotNull private final Collection<GitRepository> myRepositories;
@NotNull protected final Map<GitRepository, String> myCurrentHeads;
private final GitVcsSettings mySettings;
@NotNull private final GitVcsSettings mySettings;
@NotNull private final Collection<GitRepository> mySuccessfulRepositories;
@NotNull private final Collection<GitRepository> mySkippedRepositories;
@NotNull private final Collection<GitRepository> myRemainingRepositories;
protected GitBranchOperation(@NotNull Project project, @NotNull GitPlatformFacade facade, @NotNull Git git,
protected GitBranchOperation(@NotNull Project project, @NotNull Git git,
@NotNull GitBranchUiHandler uiHandler, @NotNull Collection<GitRepository> repositories) {
myProject = project;
myFacade = facade;
myGit = git;
myUiHandler = uiHandler;
myRepositories = repositories;
@@ -79,7 +81,7 @@ abstract class GitBranchOperation {
mySuccessfulRepositories = new ArrayList<GitRepository>();
mySkippedRepositories = new ArrayList<GitRepository>();
myRemainingRepositories = new ArrayList<GitRepository>(myRepositories);
mySettings = myFacade.getSettings(myProject);
mySettings = GitVcsSettings.getInstance(myProject);
}
protected abstract void execute();
@@ -187,7 +189,7 @@ abstract class GitBranchOperation {
}
protected final void saveAllDocuments() {
myFacade.saveAllDocuments();
ApplicationManager.getApplication().invokeAndWait(() -> FileDocumentManager.getInstance().saveAllDocuments(), defaultModalityState());
}
/**
@@ -294,7 +296,7 @@ abstract class GitBranchOperation {
protected void refreshRoot(@NotNull GitRepository repository) {
// marking all files dirty, because sometimes FileWatcher is unable to process such a large set of changes that can happen during
// checkout on a large repository: IDEA-89944
myFacade.hardRefresh(repository.getRoot());
VfsUtil.markDirtyAndRefresh(false, true, false, repository.getRoot());
}
protected void fatalLocalChangesError(@NotNull String reference) {
@@ -47,13 +47,11 @@ public class GitBranchUiHandlerImpl implements GitBranchUiHandler {
@NotNull private final Project myProject;
@NotNull private final Git myGit;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final ProgressIndicator myProgressIndicator;
public GitBranchUiHandlerImpl(@NotNull Project project, @NotNull GitPlatformFacade facade, @NotNull Git git, @NotNull ProgressIndicator indicator) {
public GitBranchUiHandlerImpl(@NotNull Project project, @NotNull Git git, @NotNull ProgressIndicator indicator) {
myProject = project;
myGit = git;
myFacade = facade;
myProgressIndicator = indicator;
}
@@ -90,7 +88,7 @@ public class GitBranchUiHandlerImpl implements GitBranchUiHandler {
setMergeDescription(String.format("The following files have unresolved conflicts. You need to resolve them before %s.",
operationName)).
setErrorNotificationTitle("Unresolved files remain.");
new GitConflictResolver(myProject, myGit, myFacade, GitUtil.getRootsFromRepositories(repositories), params).merge();
new GitConflictResolver(myProject, myGit, GitUtil.getRootsFromRepositories(repositories), params).merge();
}
}
}
@@ -27,7 +27,6 @@ import com.intellij.util.containers.ContainerUtil;
import git4idea.GitCommit;
import git4idea.GitExecutionException;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.changes.GitChangeUtils;
import git4idea.commands.Git;
import git4idea.history.GitHistoryUtils;
@@ -46,21 +45,17 @@ import java.util.Map;
* Executes the logic of git branch operations.
* All operations are run in the current thread.
* All UI interaction is done via the {@link GitBranchUiHandler} passed to the constructor.
*
* @author Kirill Likhodedov
*/
public final class GitBranchWorker {
private static final Logger LOG = Logger.getInstance(GitBranchWorker.class);
@NotNull private final Project myProject;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final Git myGit;
@NotNull private final GitBranchUiHandler myUiHandler;
public GitBranchWorker(@NotNull Project project, @NotNull GitPlatformFacade facade, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler) {
public GitBranchWorker(@NotNull Project project, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler) {
myProject = project;
myFacade = facade;
myGit = git;
myUiHandler = uiHandler;
}
@@ -75,7 +70,7 @@ public final class GitBranchWorker {
}
});
if (!repositories.isEmpty()) {
new GitCheckoutNewBranchOperation(myProject, myFacade, myGit, myUiHandler, repositories, name).execute();
new GitCheckoutNewBranchOperation(myProject, myGit, myUiHandler, repositories, name).execute();
}
else {
LOG.error("Creating new branch the same as current in all repositories: " + name);
@@ -92,23 +87,23 @@ public final class GitBranchWorker {
public void checkoutNewBranchStartingFrom(@NotNull String newBranchName, @NotNull String startPoint,
@NotNull List<GitRepository> repositories) {
updateInfo(repositories);
new GitCheckoutOperation(myProject, myFacade, myGit, myUiHandler, repositories, startPoint, false, true, newBranchName).execute();
new GitCheckoutOperation(myProject, myGit, myUiHandler, repositories, startPoint, false, true, newBranchName).execute();
}
public void checkout(@NotNull final String reference, boolean detach, @NotNull List<GitRepository> repositories) {
updateInfo(repositories);
new GitCheckoutOperation(myProject, myFacade, myGit, myUiHandler, repositories, reference, detach, false, null).execute();
new GitCheckoutOperation(myProject, myGit, myUiHandler, repositories, reference, detach, false, null).execute();
}
public void deleteBranch(@NotNull final String branchName, @NotNull final List<GitRepository> repositories) {
updateInfo(repositories);
new GitDeleteBranchOperation(myProject, myFacade, myGit, myUiHandler, repositories, branchName).execute();
new GitDeleteBranchOperation(myProject, myGit, myUiHandler, repositories, branchName).execute();
}
public void deleteRemoteBranch(@NotNull final String branchName, @NotNull final List<GitRepository> repositories) {
updateInfo(repositories);
new GitDeleteRemoteBranchOperation(myProject, myFacade, myGit, myUiHandler, repositories, branchName).execute();
new GitDeleteRemoteBranchOperation(myProject, myGit, myUiHandler, repositories, branchName).execute();
}
public void merge(@NotNull final String branchName, @NotNull final GitBrancher.DeleteOnMergeOption deleteOnMerge,
@@ -118,7 +113,7 @@ public final class GitBranchWorker {
for (GitRepository repository : repositories) {
revisions.put(repository, repository.getCurrentRevision());
}
new GitMergeOperation(myProject, myFacade, myGit, myUiHandler, repositories, branchName, deleteOnMerge, revisions).execute();
new GitMergeOperation(myProject, myGit, myUiHandler, repositories, branchName, deleteOnMerge, revisions).execute();
}
public void rebase(@NotNull List<GitRepository> repositories, @NotNull String branchName) {
@@ -134,7 +129,7 @@ public final class GitBranchWorker {
public void renameBranch(@NotNull String currentName, @NotNull String newName, @NotNull List<GitRepository> repositories) {
updateInfo(repositories);
new GitRenameBranchOperation(myProject, myFacade, myGit, myUiHandler, currentName, newName, repositories).execute();
new GitRenameBranchOperation(myProject, myGit, myUiHandler, currentName, newName, repositories).execute();
}
public void compare(@NotNull final String branchName, @NotNull final List<GitRepository> repositories,
@@ -21,7 +21,6 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import git4idea.GitVcs;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import git4idea.repo.GitRepository;
import org.jetbrains.annotations.NotNull;
@@ -36,12 +35,10 @@ class GitBrancherImpl implements GitBrancher {
@NotNull private final Project myProject;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final Git myGit;
GitBrancherImpl(@NotNull Project project, @NotNull GitPlatformFacade facade, @NotNull Git git) {
GitBrancherImpl(@NotNull Project project, @NotNull Git git) {
myProject = project;
myFacade = facade;
myGit = git;
}
@@ -55,7 +52,7 @@ class GitBrancherImpl implements GitBrancher {
}
private GitBranchWorker newWorker(ProgressIndicator indicator) {
return new GitBranchWorker(myProject, myFacade, myGit, new GitBranchUiHandlerImpl(myProject, myFacade, myGit, indicator));
return new GitBranchWorker(myProject, myGit, new GitBranchUiHandlerImpl(myProject, myGit, indicator));
}
@Override
@@ -18,7 +18,6 @@ package git4idea.branch;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.VcsNotifier;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
import git4idea.commands.GitCompoundResult;
@@ -38,9 +37,9 @@ class GitCheckoutNewBranchOperation extends GitBranchOperation {
@NotNull private final Project myProject;
@NotNull private final String myNewBranchName;
GitCheckoutNewBranchOperation(@NotNull Project project, GitPlatformFacade facade, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
GitCheckoutNewBranchOperation(@NotNull Project project, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
@NotNull Collection<GitRepository> repositories, @NotNull String newBranchName) {
super(project, facade, git, uiHandler, repositories);
super(project, git, uiHandler, repositories);
myNewBranchName = newBranchName;
myProject = project;
}
@@ -26,7 +26,6 @@ import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.commands.*;
import git4idea.config.GitVcsSettings;
@@ -61,7 +60,6 @@ class GitCheckoutOperation extends GitBranchOperation {
@Nullable private final String myNewBranch;
GitCheckoutOperation(@NotNull Project project,
GitPlatformFacade facade,
@NotNull Git git,
@NotNull GitBranchUiHandler uiHandler,
@NotNull Collection<GitRepository> repositories,
@@ -69,7 +67,7 @@ class GitCheckoutOperation extends GitBranchOperation {
boolean detach,
boolean refShouldBeValid,
@Nullable String newBranch) {
super(project, facade, git, uiHandler, repositories);
super(project, git, uiHandler, repositories);
myStartPointReference = startPointReference;
myDetach = detach;
myRefShouldBeValid = refShouldBeValid;
@@ -253,7 +251,7 @@ class GitCheckoutOperation extends GitBranchOperation {
private boolean smartCheckout(@NotNull final List<GitRepository> repositories, @NotNull final String reference,
@Nullable final String newBranch, @NotNull ProgressIndicator indicator) {
final AtomicBoolean result = new AtomicBoolean();
GitPreservingProcess preservingProcess = new GitPreservingProcess(myProject, myFacade, myGit,
GitPreservingProcess preservingProcess = new GitPreservingProcess(myProject, myGit,
GitUtil.getRootsFromRepositories(repositories), "checkout", reference,
GitVcsSettings.UpdateChangesPolicy.STASH, indicator,
new Runnable() {
@@ -22,7 +22,6 @@ import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import git4idea.GitCommit;
import git4idea.GitPlatformFacade;
import git4idea.commands.*;
import git4idea.repo.GitRepository;
import org.jetbrains.annotations.NotNull;
@@ -36,8 +35,6 @@ import java.util.regex.Pattern;
* 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
* current branch are merged to, and makes force delete, if wanted.
*
* @author Kirill Likhodedov
*/
class GitDeleteBranchOperation extends GitBranchOperation {
@@ -45,9 +42,9 @@ class GitDeleteBranchOperation extends GitBranchOperation {
private final String myBranchName;
GitDeleteBranchOperation(@NotNull Project project, GitPlatformFacade facade, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
GitDeleteBranchOperation(@NotNull Project project, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
@NotNull Collection<GitRepository> repositories, @NotNull String branchName) {
super(project, facade, git, uiHandler, repositories);
super(project, git, uiHandler, repositories);
myBranchName = branchName;
}
@@ -23,7 +23,6 @@ import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.util.ui.UIUtil;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
import git4idea.commands.GitCompoundResult;
@@ -42,10 +41,10 @@ import java.util.concurrent.atomic.AtomicReference;
class GitDeleteRemoteBranchOperation extends GitBranchOperation {
private final String myBranchName;
public GitDeleteRemoteBranchOperation(@NotNull Project project, @NotNull GitPlatformFacade facade, @NotNull Git git,
public GitDeleteRemoteBranchOperation(@NotNull Project project, @NotNull Git git,
@NotNull GitBranchUiHandler handler, @NotNull List<GitRepository> repositories,
@NotNull String name) {
super(project, facade, git, handler, repositories);
super(project, git, handler, repositories);
myBranchName = name;
}
@@ -77,7 +76,7 @@ class GitDeleteRemoteBranchOperation extends GitBranchOperation {
if (decision.get().deleteTracking()) {
for (final String branch : trackingBranches) {
getIndicator().setText("Deleting " + branch);
new GitDeleteBranchOperation(myProject, myFacade, myGit, myUiHandler, repositories, branch) {
new GitDeleteBranchOperation(myProject, myGit, myUiHandler, repositories, branch) {
@Override
protected void notifySuccess(@NotNull String message) {
// do nothing - will display a combo notification for all deleted branches below
@@ -29,7 +29,6 @@ import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ui.UIUtil;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.commands.*;
import git4idea.config.GitVcsSettings;
@@ -58,15 +57,15 @@ class GitMergeOperation extends GitBranchOperation {
@NotNull private final Map<GitRepository, Boolean> myConflictedRepositories = new HashMap<GitRepository, Boolean>();
private GitPreservingProcess myPreservingProcess;
GitMergeOperation(@NotNull Project project, GitPlatformFacade facade, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
GitMergeOperation(@NotNull Project project, @NotNull Git git, @NotNull GitBranchUiHandler uiHandler,
@NotNull Collection<GitRepository> repositories,
@NotNull String branchToMerge, GitBrancher.DeleteOnMergeOption deleteOnMerge,
@NotNull Map<GitRepository, String> currentRevisionsBeforeMerge) {
super(project, facade, git, uiHandler, repositories);
super(project, git, uiHandler, repositories);
myBranchToMerge = branchToMerge;
myDeleteOnMerge = deleteOnMerge;
myCurrentRevisionsBeforeMerge = currentRevisionsBeforeMerge;
myChangeListManager = myFacade.getChangeListManager(myProject);
myChangeListManager = ChangeListManager.getInstance(myProject);
}
@Override
@@ -216,9 +215,9 @@ class GitMergeOperation extends GitBranchOperation {
private boolean doSmartMerge(@NotNull final Collection<GitRepository> repositories) {
final AtomicBoolean success = new AtomicBoolean();
myPreservingProcess = new GitPreservingProcess(myProject, myFacade, myGit, GitUtil.getRootsFromRepositories(repositories), "merge",
myPreservingProcess = new GitPreservingProcess(myProject, myGit, GitUtil.getRootsFromRepositories(repositories), "merge",
myBranchToMerge, GitVcsSettings.UpdateChangesPolicy.STASH, getIndicator(),
new Runnable() {
new Runnable() {
@Override
public void run() {
success.set(doMerge(repositories));
@@ -312,10 +311,10 @@ class GitMergeOperation extends GitBranchOperation {
LOG.info("Starting smart rollback...");
final GitCompoundResult result = new GitCompoundResult(myProject);
Collection<VirtualFile> roots = GitUtil.getRootsFromRepositories(repositories);
GitPreservingProcess preservingProcess = new GitPreservingProcess(myProject, myFacade, myGit, roots, "merge",
GitPreservingProcess preservingProcess = new GitPreservingProcess(myProject, myGit, roots, "merge",
myBranchToMerge, GitVcsSettings.UpdateChangesPolicy.STASH,
getIndicator(),
new Runnable() {
new Runnable() {
@Override public void run() {
for (GitRepository repository : repositories) {
result.append(repository, rollback(repository));
@@ -33,13 +33,12 @@ public class GitRenameBranchOperation extends GitBranchOperation {
@NotNull private final String myNewName;
public GitRenameBranchOperation(@NotNull Project project,
@NotNull GitPlatformFacade facade,
@NotNull Git git,
@NotNull GitBranchUiHandler uiHandler,
@NotNull String currentName,
@NotNull String newName,
@NotNull List<GitRepository> repositories) {
super(project, facade, git, uiHandler, repositories);
super(project, git, uiHandler, repositories);
myCurrentName = currentName;
myNewName = newName;
myNotifier = VcsNotifier.getInstance(myProject);
@@ -16,13 +16,12 @@
package git4idea.branch;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.ui.UIUtil;
import git4idea.GitPlatformFacade;
import git4idea.DialogManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -57,7 +56,7 @@ public class GitSmartOperationDialog extends DialogWrapper {
@Override
public void run() {
GitSmartOperationDialog dialog = new GitSmartOperationDialog(project, fileBrowser, operationTitle, forceButtonTitle);
ServiceManager.getService(project, GitPlatformFacade.class).showDialog(dialog);
DialogManager.show(dialog);
exitCode.set(dialog.getExitCode());
}
});
@@ -42,7 +42,6 @@ import com.intellij.util.PairConsumer;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.xml.util.XmlStringUtil;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.commands.Git;
@@ -118,7 +117,6 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory {
return ReturnResult.COMMIT;
}
final GitPlatformFacade platformFacade = ServiceManager.getService(myProject, GitPlatformFacade.class);
final Git git = ServiceManager.getService(Git.class);
final Collection<VirtualFile> files = myPanel.getVirtualFiles(); // deleted files aren't included, but for them we don't care about CRLFs.
@@ -128,7 +126,7 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory {
@Override
public void run(@NotNull ProgressIndicator indicator) {
crlfHelper.set(GitCrlfProblemsDetector.detect(GitCheckinHandlerFactory.MyCheckinHandler.this.myProject,
platformFacade, git, files));
git, files));
}
});
@@ -20,11 +20,13 @@ import com.intellij.dvcs.cherrypick.VcsCherryPicker;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationListener;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.AbstractVcsHelper;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.VcsKey;
import com.intellij.openapi.vcs.VcsNotifier;
@@ -32,6 +34,7 @@ import com.intellij.openapi.vcs.changes.*;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vcs.merge.MergeDialogCustomizer;
import com.intellij.openapi.vcs.update.RefreshVFsSynchronously;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Consumer;
import com.intellij.util.Function;
@@ -41,7 +44,7 @@ import com.intellij.vcs.log.VcsFullCommitDetails;
import com.intellij.vcs.log.VcsLog;
import com.intellij.vcs.log.util.VcsUserUtil;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
@@ -50,6 +53,7 @@ import git4idea.commands.GitUntrackedFilesOverwrittenByOperationDetector;
import git4idea.config.GitVcsSettings;
import git4idea.merge.GitConflictResolver;
import git4idea.repo.GitRepository;
import git4idea.repo.GitRepositoryManager;
import git4idea.util.GitUntrackedFilesHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -78,19 +82,18 @@ public class GitCherryPicker extends VcsCherryPicker {
@NotNull private final Project myProject;
@NotNull private final Git myGit;
@NotNull private final GitPlatformFacade myPlatformFacade;
@NotNull private final ChangeListManager myChangeListManager;
@NotNull private final GitRepositoryManager myRepositoryManager;
public GitCherryPicker(@NotNull Project project, @NotNull Git git, @NotNull GitPlatformFacade platformFacade) {
public GitCherryPicker(@NotNull Project project, @NotNull Git git) {
myProject = project;
myGit = git;
myPlatformFacade = platformFacade;
myChangeListManager = myPlatformFacade.getChangeListManager(myProject);
myChangeListManager = ChangeListManager.getInstance(myProject);
myRepositoryManager = GitUtil.getRepositoryManager(myProject);
}
public void cherryPick(@NotNull List<VcsFullCommitDetails> commits) {
Map<GitRepository, List<VcsFullCommitDetails>> commitsInRoots =
DvcsUtil.<GitRepository>groupCommitsByRoots(myPlatformFacade.getRepositoryManager(myProject), commits);
Map<GitRepository, List<VcsFullCommitDetails>> commitsInRoots = DvcsUtil.groupCommitsByRoots(myRepositoryManager, commits);
LOG.info("Cherry-picking commits: " + toString(commitsInRoots));
List<GitCommitWrapper> successfulCommits = ContainerUtil.newArrayList();
List<GitCommitWrapper> alreadyPicked = ContainerUtil.newArrayList();
@@ -153,7 +156,7 @@ public class GitCherryPicker extends VcsCherryPicker {
}
}
else if (conflictDetector.hasHappened()) {
boolean mergeCompleted = new CherryPickConflictResolver(myProject, myGit, myPlatformFacade, repository.getRoot(),
boolean mergeCompleted = new CherryPickConflictResolver(myProject, myGit, repository.getRoot(),
commit.getId().asString(), VcsUserUtil.getShortPresentation(commit.getAuthor()),
commit.getSubject()).merge();
@@ -226,7 +229,7 @@ public class GitCherryPicker extends VcsCherryPicker {
private void notifyConflictWarning(@NotNull GitRepository repository, @NotNull GitCommitWrapper commit,
@NotNull List<GitCommitWrapper> successfulCommits) {
NotificationListener resolveLinkListener = new ResolveLinkListener(myProject, myGit, myPlatformFacade, repository.getRoot(),
NotificationListener resolveLinkListener = new ResolveLinkListener(myProject, myGit, repository.getRoot(),
commit.getCommit().getId().toShortString(),
VcsUserUtil.getShortPresentation(commit.getCommit().getAuthor()),
commit.getSubject());
@@ -261,7 +264,7 @@ public class GitCherryPicker extends VcsCherryPicker {
@NotNull final String commitMessage) {
final CountDownLatch waiter = new CountDownLatch(1);
final AtomicReference<LocalChangeList> changeList = new AtomicReference<LocalChangeList>();
myPlatformFacade.invokeAndWait(new Runnable() {
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
@Override
public void run() {
myChangeListManager.invokeAfterUpdate(new Runnable() {
@@ -300,13 +303,13 @@ public class GitCherryPicker extends VcsCherryPicker {
@NotNull final LocalChangeList changeList, @NotNull final String commitMessage) {
final AtomicBoolean commitSucceeded = new AtomicBoolean();
final Semaphore sem = new Semaphore(0);
myPlatformFacade.invokeAndWait(new Runnable() {
ApplicationManager.getApplication().invokeAndWait(new Runnable() {
@Override
public void run() {
try {
cancelCherryPick(repository);
Collection<Change> changes = commit.getCommit().getChanges();
boolean commitNotCancelled = myPlatformFacade.getVcsHelper(myProject).commitChanges(changes, changeList, commitMessage,
boolean commitNotCancelled = AbstractVcsHelper.getInstance(myProject).commitChanges(changes, changeList, commitMessage,
new CommitResultHandler() {
@Override
public void onSuccess(@NotNull String commitMessage) {
@@ -357,10 +360,10 @@ public class GitCherryPicker extends VcsCherryPicker {
private void removeCherryPickHead(@NotNull GitRepository repository) {
File cherryPickHeadFile = repository.getRepositoryFiles().getCherryPickHead();
final VirtualFile cherryPickHead = myPlatformFacade.getLocalFileSystem().refreshAndFindFileByIoFile(cherryPickHeadFile);
final VirtualFile cherryPickHead = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(cherryPickHeadFile);
if (cherryPickHead != null && cherryPickHead.exists()) {
myPlatformFacade.runWriteAction(new Runnable() {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
try {
@@ -548,7 +551,7 @@ public class GitCherryPicker extends VcsCherryPicker {
}
for (VirtualFile root : commits.keySet()) {
GitRepository repository = myPlatformFacade.getRepositoryManager(myProject).getRepositoryForRoot(root);
GitRepository repository = myRepositoryManager.getRepositoryForRoot(root);
if (repository == null) {
return false;
}
@@ -576,9 +579,13 @@ public class GitCherryPicker extends VcsCherryPicker {
private static class CherryPickConflictResolver extends GitConflictResolver {
public CherryPickConflictResolver(@NotNull Project project, @NotNull Git git, @NotNull GitPlatformFacade facade, @NotNull VirtualFile root,
@NotNull String commitHash, @NotNull String commitAuthor, @NotNull String commitMessage) {
super(project, git, facade, Collections.singleton(root), makeParams(commitHash, commitAuthor, commitMessage));
public CherryPickConflictResolver(@NotNull Project project,
@NotNull Git git,
@NotNull VirtualFile root,
@NotNull String commitHash,
@NotNull String commitAuthor,
@NotNull String commitMessage) {
super(project, git, Collections.singleton(root), makeParams(commitHash, commitAuthor, commitMessage));
}
private static Params makeParams(String commitHash, String commitAuthor, String commitMessage) {
@@ -598,18 +605,16 @@ public class GitCherryPicker extends VcsCherryPicker {
private static class ResolveLinkListener implements NotificationListener {
@NotNull private final Project myProject;
@NotNull private final Git myGit;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final VirtualFile myRoot;
@NotNull private final String myHash;
@NotNull private final String myAuthor;
@NotNull private final String myMessage;
public ResolveLinkListener(@NotNull Project project, @NotNull Git git, @NotNull GitPlatformFacade facade, @NotNull VirtualFile root,
public ResolveLinkListener(@NotNull Project project, @NotNull Git git, @NotNull VirtualFile root,
@NotNull String commitHash, @NotNull String commitAuthor, @NotNull String commitMessage) {
myProject = project;
myGit = git;
myFacade = facade;
myRoot = root;
myHash = commitHash;
myAuthor = commitAuthor;
@@ -621,7 +626,7 @@ public class GitCherryPicker extends VcsCherryPicker {
@NotNull HyperlinkEvent event) {
if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (event.getDescription().equals("resolve")) {
new CherryPickConflictResolver(myProject, myGit, myFacade, myRoot, myHash, myAuthor, myMessage).mergeNoProceed();
new CherryPickConflictResolver(myProject, myGit, myRoot, myHash, myAuthor, myMessage).mergeNoProceed();
}
}
}
@@ -16,11 +16,11 @@
package git4idea.crlf;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.attributes.GitAttribute;
import git4idea.attributes.GitCheckAttrParser;
@@ -28,6 +28,7 @@ import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
import git4idea.config.GitConfigUtil;
import git4idea.repo.GitRepository;
import git4idea.repo.GitRepositoryManager;
import org.jetbrains.annotations.NotNull;
import java.util.*;
@@ -55,21 +56,20 @@ public class GitCrlfProblemsDetector {
private static final String CRLF = "\r\n";
@NotNull private final Project myProject;
@NotNull private final GitPlatformFacade myPlatformFacade;
@NotNull private final Git myGit;
@NotNull private final GitRepositoryManager myRepositoryManager;
private final boolean myShouldWarn;
@NotNull
public static GitCrlfProblemsDetector detect(@NotNull Project project, @NotNull GitPlatformFacade platformFacade,
@NotNull Git git, @NotNull Collection<VirtualFile> files) {
return new GitCrlfProblemsDetector(project, platformFacade, git, files);
public static GitCrlfProblemsDetector detect(@NotNull Project project, @NotNull Git git, @NotNull Collection<VirtualFile> files) {
return new GitCrlfProblemsDetector(project, git, files);
}
private GitCrlfProblemsDetector(@NotNull Project project, @NotNull GitPlatformFacade platformFacade, @NotNull Git git,
private GitCrlfProblemsDetector(@NotNull Project project, @NotNull Git git,
@NotNull Collection<VirtualFile> files) {
myProject = project;
myPlatformFacade = platformFacade;
myRepositoryManager = GitUtil.getRepositoryManager(project);
myGit = git;
Map<VirtualFile, List<VirtualFile>> filesByRoots = sortFilesByRoots(files);
@@ -101,7 +101,7 @@ public class GitCrlfProblemsDetector {
@NotNull
private Collection<VirtualFile> findFilesWithoutAttrs(@NotNull VirtualFile root, @NotNull Collection<VirtualFile> files) {
GitRepository repository = myPlatformFacade.getRepositoryManager(myProject).getRepositoryForRoot(root);
GitRepository repository = myRepositoryManager.getRepositoryForRoot(root);
if (repository == null) {
LOG.warn("Repository is null for " + root);
return Collections.emptyList();
@@ -148,7 +148,7 @@ public class GitCrlfProblemsDetector {
Collection<VirtualFile> filesWithCrlf = new ArrayList<VirtualFile>();
for (VirtualFile file : files) {
ProgressIndicatorProvider.checkCanceled();
String separator = myPlatformFacade.getLineSeparator(file, true);
String separator = LoadTextUtil.detectLineSeparator(file, true);
if (CRLF.equals(separator)) {
filesWithCrlf.add(file);
}
@@ -170,7 +170,7 @@ public class GitCrlfProblemsDetector {
}
private boolean isAutoCrlfSetRight(@NotNull VirtualFile root) {
GitRepository repository = myPlatformFacade.getRepositoryManager(myProject).getRepositoryForRoot(root);
GitRepository repository = myRepositoryManager.getRepositoryForRoot(root);
if (repository == null) {
LOG.warn("Repository is null for " + root);
return true;
@@ -47,7 +47,6 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.data.VcsLogTabsProperties;
import com.intellij.vcs.log.impl.VcsLogContentProvider;
import com.intellij.vcs.log.impl.VcsLogManager;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.config.GitVersion;
@@ -125,7 +124,6 @@ public class GitShowExternalLogAction extends DumbAwareAction {
@NotNull final List<VirtualFile> roots,
@Nullable String tabName) {
final GitRepositoryManager repositoryManager = ServiceManager.getService(project, GitRepositoryManager.class);
GitPlatformFacade facade = ServiceManager.getService(GitPlatformFacade.class);
for (VirtualFile root : roots) {
repositoryManager.addExternalRepository(root, GitRepositoryImpl.getInstance(root, project, true));
}
@@ -47,24 +47,23 @@ import java.util.*;
import static com.intellij.dvcs.DvcsUtil.findVirtualFilesWithRefresh;
import static com.intellij.dvcs.DvcsUtil.sortVirtualFilesByPresentation;
import static com.intellij.util.ObjectUtils.assertNotNull;
/**
*
* The class is highly customizable, since the procedure of resolving conflicts is very common in Git operations.
* @author Kirill Likhodedov
*/
public class GitConflictResolver {
private static final Logger LOG = Logger.getInstance(GitConflictResolver.class);
@NotNull private final Collection<VirtualFile> myRoots;
@NotNull private final Params myParams;
@NotNull protected final Project myProject;
@NotNull private final Git myGit;
@NotNull private final GitPlatformFacade myPlatformFacade;
private final Collection<VirtualFile> myRoots;
private final Params myParams;
@NotNull private final GitRepositoryManager myRepositoryManager;
private final AbstractVcsHelper myVcsHelper;
@NotNull private final AbstractVcsHelper myVcsHelper;
@NotNull private final GitVcs myVcs;
/**
* Customizing parameters - mostly String notification texts, etc.
@@ -110,15 +109,24 @@ public class GitConflictResolver {
}
public GitConflictResolver(@NotNull Project project, @NotNull Git git, @NotNull GitPlatformFacade platformFacade,
/**
* @deprecated To remove in IDEA 2017. Use {@link #GitConflictResolver(Project, Git, Collection, Params)}.
*/
@SuppressWarnings("UnusedParameters")
@Deprecated
public GitConflictResolver(@NotNull Project project, @NotNull Git git, @NotNull GitPlatformFacade facade,
@NotNull Collection<VirtualFile> roots, @NotNull Params params) {
this(project, git, roots, params);
}
public GitConflictResolver(@NotNull Project project, @NotNull Git git, @NotNull Collection<VirtualFile> roots, @NotNull Params params) {
myProject = project;
myGit = git;
myPlatformFacade = platformFacade;
myRoots = roots;
myParams = params;
myRepositoryManager = myPlatformFacade.getRepositoryManager(myProject);
myVcsHelper = myPlatformFacade.getVcsHelper(project);
myRepositoryManager = GitUtil.getRepositoryManager(myProject);
myVcsHelper = AbstractVcsHelper.getInstance(project);
myVcs = assertNotNull(GitVcs.getInstance(myProject));
}
/**
@@ -215,7 +223,7 @@ public class GitConflictResolver {
}
}
} catch (VcsException e) {
if (((GitVcs)myPlatformFacade.getVcs(myProject)).getExecutableValidator().checkExecutableAndNotifyIfNeeded()) {
if (myVcs.getExecutableValidator().checkExecutableAndNotifyIfNeeded()) {
notifyException(e);
}
}
@@ -15,11 +15,9 @@
*/
package git4idea.merge;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import org.jetbrains.annotations.NotNull;
@@ -37,7 +35,7 @@ public class GitMergeCommittingConflictResolver extends GitConflictResolver {
public GitMergeCommittingConflictResolver(Project project, @NotNull Git git, GitMerger merger, Collection<VirtualFile> mergingRoots,
Params params, boolean refreshAfterCommit) {
super(project, git, ServiceManager.getService(GitPlatformFacade.class), mergingRoots, params);
super(project, git, mergingRoots, params);
myMerger = merger;
myMergingRoots = mergingRoots;
myRefreshAfterCommit = refreshAfterCommit;
@@ -80,7 +80,6 @@ public class GitPushOperation {
private final Git myGit;
private final ProgressIndicator myProgressIndicator;
private final GitVcsSettings mySettings;
private final GitPlatformFacade myPlatformFacade;
private final GitRepositoryManager myRepositoryManager;
public GitPushOperation(@NotNull Project project,
@@ -96,7 +95,6 @@ public class GitPushOperation {
myGit = ServiceManager.getService(Git.class);
myProgressIndicator = ObjectUtils.notNull(ProgressManager.getInstance().getProgressIndicator(), new EmptyProgressIndicator());
mySettings = GitVcsSettings.getInstance(myProject);
myPlatformFacade = ServiceManager.getService(project, GitPlatformFacade.class);
myRepositoryManager = ServiceManager.getService(myProject, GitRepositoryManager.class);
Map<GitRepository, GitRevisionNumber> currentHeads = ContainerUtil.newHashMap();
@@ -437,7 +435,7 @@ public class GitPushOperation {
protected GitUpdateResult update(@NotNull Collection<GitRepository> rootsToUpdate,
@NotNull UpdateMethod updateMethod,
boolean checkForRebaseOverMergeProblem) {
GitUpdateResult updateResult = new GitUpdateProcess(myProject, myPlatformFacade, myProgressIndicator,
GitUpdateResult updateResult = new GitUpdateProcess(myProject, myProgressIndicator,
new HashSet<GitRepository>(rootsToUpdate), UpdatedFiles.create(),
checkForRebaseOverMergeProblem).update(updateMethod);
for (GitRepository repository : rootsToUpdate) {
@@ -28,7 +28,6 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.util.containers.ContainerUtil;
import git4idea.DialogManager;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
@@ -146,7 +145,7 @@ class GitAbortRebaseProcess {
}
private void doAbort(final boolean rollback) {
new GitFreezingProcess(myProject, ServiceManager.getService(GitPlatformFacade.class), "rebase", new Runnable() {
new GitFreezingProcess(myProject, "rebase", new Runnable() {
public void run() {
AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject);
List<GitRepository> repositoriesToRefresh = ContainerUtil.newArrayList();
@@ -38,7 +38,6 @@ import com.intellij.util.ExceptionUtil;
import com.intellij.util.Function;
import com.intellij.util.ThreeState;
import com.intellij.util.containers.MultiMap;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.branch.GitRebaseParams;
import git4idea.commands.Git;
@@ -81,7 +80,6 @@ public class GitRebaseProcess {
@NotNull private final Git myGit;
@NotNull private final ChangeListManager myChangeListManager;
@NotNull private final VcsNotifier myNotifier;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final GitRepositoryManager myRepositoryManager;
@NotNull private final GitRebaseSpec myRebaseSpec;
@@ -98,13 +96,12 @@ public class GitRebaseProcess {
myGit = ServiceManager.getService(Git.class);
myChangeListManager = ChangeListManager.getInstance(myProject);
myNotifier = VcsNotifier.getInstance(myProject);
myFacade = ServiceManager.getService(GitPlatformFacade.class);
myRepositoryManager = GitUtil.getRepositoryManager(myProject);
myProgressManager = ProgressManager.getInstance();
}
public void rebase() {
new GitFreezingProcess(myProject, myFacade, "rebase", new Runnable() {
new GitFreezingProcess(myProject, "rebase", new Runnable() {
public void run() {
doRebase();
}
@@ -400,8 +397,7 @@ public class GitRebaseProcess {
@NotNull
private ResolveConflictResult showConflictResolver(@NotNull GitRepository conflicting, boolean calledFromNotification) {
GitConflictResolver.Params params = new GitConflictResolver.Params().setReverse(true);
RebaseConflictResolver conflictResolver = new RebaseConflictResolver(myProject, myGit, myFacade, conflicting, params,
calledFromNotification);
RebaseConflictResolver conflictResolver = new RebaseConflictResolver(myProject, myGit, conflicting, params, calledFromNotification);
boolean allResolved = conflictResolver.merge();
if (conflictResolver.myWasNothingToMerge) return ResolveConflictResult.NOTHING_TO_MERGE;
if (allResolved) return ResolveConflictResult.ALL_RESOLVED;
@@ -494,10 +490,9 @@ public class GitRebaseProcess {
RebaseConflictResolver(@NotNull Project project,
@NotNull Git git,
@NotNull GitPlatformFacade platformFacade,
@NotNull GitRepository repository,
@NotNull Params params, boolean calledFromNotification) {
super(project, git, platformFacade, singleton(repository.getRoot()), params);
super(project, git, singleton(repository.getRoot()), params);
myCalledFromNotification = calledFromNotification;
}
@@ -27,7 +27,6 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.Hash;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.branch.GitRebaseParams;
import git4idea.commands.Git;
@@ -169,8 +168,7 @@ public class GitRebaseSpec {
@NotNull
private static GitStashChangesSaver newSaver(@NotNull Project project, @NotNull ProgressIndicator indicator) {
Git git = ServiceManager.getService(Git.class);
GitPlatformFacade facade = ServiceManager.getService(GitPlatformFacade.class);
return new GitStashChangesSaver(project, facade, git, indicator, "Uncommitted changes before rebase");
return new GitStashChangesSaver(project, git, indicator, "Uncommitted changes before rebase");
}
@NotNull
@@ -17,7 +17,6 @@ package git4idea.rebase;
import com.intellij.dvcs.DvcsUtil;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -27,7 +26,6 @@ import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.commands.*;
@@ -250,7 +248,7 @@ public class GitRebaser {
private boolean handleRebaseFailure(final VirtualFile root, final GitLineHandler h, GitRebaseProblemDetector rebaseConflictDetector) {
if (rebaseConflictDetector.isMergeConflict()) {
LOG.info("handleRebaseFailure merge conflict");
return new GitConflictResolver(myProject, myGit, ServiceManager.getService(GitPlatformFacade.class), Collections.singleton(root), makeParamsForRebaseConflict()) {
return new GitConflictResolver(myProject, myGit, Collections.singleton(root), makeParamsForRebaseConflict()) {
@Override protected boolean proceedIfNothingToMerge() {
return continueRebase(root, "--continue");
}
@@ -356,7 +354,7 @@ public class GitRebaser {
@NotNull private final VirtualFile myRoot;
public ConflictResolver(@NotNull Project project, @NotNull Git git, @NotNull VirtualFile root, @NotNull GitRebaser rebaser) {
super(project, git, ServiceManager.getService(GitPlatformFacade.class), Collections.singleton(root), makeParams());
super(project, git, Collections.singleton(root), makeParams());
myRebaser = rebaser;
myRoot = root;
}
@@ -16,6 +16,8 @@
package git4idea.repo;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
@@ -24,7 +26,6 @@ import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.GitRemoteBranch;
import git4idea.branch.GitBranchUtil;
import org.ini4j.Ini;
@@ -119,7 +120,7 @@ public class GitConfig {
* If some section is invalid, it is skipped, and a warning is reported.
*/
@NotNull
static GitConfig read(@NotNull GitPlatformFacade platformFacade, @NotNull File configFile) {
static GitConfig read(@NotNull File configFile) {
GitConfig emptyConfig = new GitConfig(Collections.<Remote>emptyList(), Collections.<Url>emptyList(),
Collections.<BranchConfig>emptyList());
if (!configFile.exists()) {
@@ -138,7 +139,7 @@ public class GitConfig {
return emptyConfig;
}
IdeaPluginDescriptor plugin = platformFacade.getPluginByClassName(GitConfig.class.getName());
IdeaPluginDescriptor plugin = PluginManager.getPlugin(PluginManagerCore.getPluginByClassName(GitConfig.class.getName()));
ClassLoader classLoader = plugin == null ?
GitConfig.class.getClassLoader() : // null e.g. if IDEA is started from IDEA
plugin.getPluginClassLoader();
@@ -15,7 +15,6 @@
*/
package git4idea.repo;
import git4idea.GitPlatformFacade;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -38,7 +37,7 @@ import java.util.List;
* There are also some rules about url substitution, like {@code url.<base>.insteadOf}.
* </p>
* <p>
* GitRemote instance constructed by {@link GitConfig#read(GitPlatformFacade, File)}} has all these rules applied.
* GitRemote instance constructed by {@link #read(File)}} has all these rules applied.
* Thus, for example, if only one {@code url} and no {@code pushUrls} are defined for the remote,
* both {@link #getUrls()} and {@link #getPushUrls()} will return this url. <br/>
* This is made to avoid urls transformation logic from the code using GitRemote, leaving it all in GitConfig parsing.
@@ -20,7 +20,6 @@ import com.intellij.dvcs.repo.VcsRepositoryCreator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.VcsKey;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import org.jetbrains.annotations.NotNull;
@@ -28,11 +27,9 @@ import org.jetbrains.annotations.Nullable;
public class GitRepositoryCreator extends VcsRepositoryCreator {
@NotNull private final Project myProject;
@NotNull private final GitPlatformFacade myPlatformFacade;
public GitRepositoryCreator(@NotNull Project project, @NotNull GitPlatformFacade platformFacade) {
public GitRepositoryCreator(@NotNull Project project) {
myProject = project;
myPlatformFacade = platformFacade;
}
@Override
@@ -18,13 +18,11 @@ package git4idea.repo;
import com.intellij.dvcs.repo.RepositoryImpl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.branch.GitBranchesCollection;
@@ -38,7 +36,6 @@ import static com.intellij.util.ObjectUtils.assertNotNull;
public class GitRepositoryImpl extends RepositoryImpl implements GitRepository {
@NotNull private final GitPlatformFacade myPlatformFacade;
@NotNull private final GitVcs myVcs;
@NotNull private final GitRepositoryReader myReader;
@NotNull private final VirtualFile myGitDir;
@@ -50,12 +47,10 @@ public class GitRepositoryImpl extends RepositoryImpl implements GitRepository {
private GitRepositoryImpl(@NotNull VirtualFile rootDir,
@NotNull VirtualFile gitDir,
@NotNull GitPlatformFacade facade,
@NotNull Project project,
@NotNull Disposable parentDisposable,
final boolean light) {
super(project, rootDir, parentDisposable);
myPlatformFacade = facade;
myVcs = assertNotNull(GitVcs.getInstance(project));
myGitDir = gitDir;
myRepositoryFiles = GitRepositoryFiles.getInstance(gitDir);
@@ -82,8 +77,7 @@ public class GitRepositoryImpl extends RepositoryImpl implements GitRepository {
@NotNull VirtualFile gitDir,
@NotNull Project project,
boolean listenToRepoChanges) {
GitPlatformFacade platformFacade = ServiceManager.getService(project, GitPlatformFacade.class);
GitRepositoryImpl repository = new GitRepositoryImpl(root, gitDir, platformFacade, project, project, !listenToRepoChanges);
GitRepositoryImpl repository = new GitRepositoryImpl(root, gitDir, project, project, !listenToRepoChanges);
if (listenToRepoChanges) {
repository.getUntrackedFilesHolder().setupVfsListener(project);
repository.setupUpdater();
@@ -203,7 +197,7 @@ public class GitRepositoryImpl extends RepositoryImpl implements GitRepository {
@NotNull
private GitRepoInfo readRepoInfo() {
File configFile = myRepositoryFiles.getConfigFile();
GitConfig config = GitConfig.read(myPlatformFacade, configFile);
GitConfig config = GitConfig.read(configFile);
Collection<GitRemote> remotes = config.parseRemotes();
GitBranchState state = myReader.readState(remotes);
Collection<GitBranchTrackInfo> trackInfos = config.parseTrackInfos(state.getLocalBranches().keySet(), state.getRemoteBranches().keySet());
@@ -21,6 +21,8 @@ import com.intellij.dvcs.repo.VcsRepositoryManager;
import com.intellij.openapi.project.Project;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.config.GitVcsSettings;
import git4idea.rebase.GitRebaseSpec;
import git4idea.ui.branch.GitMultiRootBranchConfig;
import org.jetbrains.annotations.NotNull;
@@ -28,24 +30,31 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import static com.intellij.util.ObjectUtils.assertNotNull;
public class GitRepositoryManager extends AbstractRepositoryManager<GitRepository> {
@NotNull private final GitPlatformFacade myPlatformFacade;
@NotNull private final Project myProject;
@NotNull private final GitVcsSettings mySettings;
@Nullable private volatile GitRebaseSpec myOngoingRebaseSpec;
/**
* @deprecated To remove in IDEA 2017. Use {@link #GitRepositoryManager(Project, VcsRepositoryManager)}.
*/
@SuppressWarnings("UnusedParameters")
@Deprecated
public GitRepositoryManager(@NotNull Project project, @NotNull GitPlatformFacade platformFacade,
@NotNull VcsRepositoryManager vcsRepositoryManager) {
super(vcsRepositoryManager, platformFacade.getVcs(project), GitUtil.DOT_GIT);
myProject = project;
myPlatformFacade = platformFacade;
this(project, vcsRepositoryManager);
}
public GitRepositoryManager(@NotNull Project project, @NotNull VcsRepositoryManager vcsRepositoryManager) {
super(vcsRepositoryManager, assertNotNull(GitVcs.getInstance(project)), GitUtil.DOT_GIT);
mySettings = GitVcsSettings.getInstance(project);
}
@Override
public boolean isSyncEnabled() {
return myPlatformFacade.getSettings(myProject).getSyncSetting() == DvcsSyncSettings.Value.SYNC &&
!new GitMultiRootBranchConfig(getRepositories()).diverged();
return mySettings.getSyncSetting() == DvcsSyncSettings.Value.SYNC && !new GitMultiRootBranchConfig(getRepositories()).diverged();
}
@NotNull
@@ -33,7 +33,6 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.ui.UIUtil;
import com.intellij.vcs.log.VcsFullCommitDetails;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.branch.GitBranchUiHandlerImpl;
import git4idea.branch.GitSmartOperationDialog;
@@ -60,7 +59,6 @@ public class GitResetOperation {
@NotNull private final ProgressIndicator myIndicator;
@NotNull private final Git myGit;
@NotNull private final VcsNotifier myNotifier;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final GitBranchUiHandlerImpl myUiHandler;
public GitResetOperation(@NotNull Project project, @NotNull Map<GitRepository, VcsFullCommitDetails> targetCommits,
@@ -71,8 +69,7 @@ public class GitResetOperation {
myIndicator = indicator;
myGit = ServiceManager.getService(Git.class);
myNotifier = VcsNotifier.getInstance(project);
myFacade = ServiceManager.getService(GitPlatformFacade.class);
myUiHandler = new GitBranchUiHandlerImpl(myProject, myFacade, myGit, indicator);
myUiHandler = new GitBranchUiHandlerImpl(myProject, myGit, indicator);
}
public void execute() {
@@ -112,7 +109,7 @@ public class GitResetOperation {
int choice = myUiHandler.showSmartOperationDialog(myProject, affectedChanges, absolutePaths, "reset", "&Hard Reset");
if (choice == GitSmartOperationDialog.SMART_EXIT_CODE) {
final Ref<GitCommandResult> result = Ref.create();
new GitPreservingProcess(myProject, myFacade, myGit, Collections.singleton(repository.getRoot()), "reset", target,
new GitPreservingProcess(myProject, myGit, Collections.singleton(repository.getRoot()), "reset", target,
GitVcsSettings.UpdateChangesPolicy.STASH, myIndicator,
new Runnable() {
@Override
@@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.openapi.vcs.changes.ChangeListManagerImpl;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
@@ -45,7 +46,6 @@ public abstract class GitChangesSaver {
private static final Logger LOG = Logger.getInstance(GitChangesSaver.class);
@NotNull protected final Project myProject;
@NotNull protected final GitPlatformFacade myPlatformFacade;
@NotNull protected final ChangeListManagerEx myChangeManager;
@NotNull protected final Git myGit;
@NotNull protected final ProgressIndicator myProgressIndicator;
@@ -59,25 +59,23 @@ public abstract class GitChangesSaver {
*/
@NotNull
public static GitChangesSaver getSaver(@NotNull Project project,
@NotNull GitPlatformFacade platformFacade,
@NotNull Git git,
@NotNull ProgressIndicator progressIndicator,
@NotNull String stashMessage,
@NotNull GitVcsSettings.UpdateChangesPolicy saveMethod) {
if (saveMethod == GitVcsSettings.UpdateChangesPolicy.SHELVE) {
return new GitShelveChangesSaver(project, platformFacade, git, progressIndicator, stashMessage);
return new GitShelveChangesSaver(project, git, progressIndicator, stashMessage);
}
return new GitStashChangesSaver(project, platformFacade, git, progressIndicator, stashMessage);
return new GitStashChangesSaver(project, git, progressIndicator, stashMessage);
}
protected GitChangesSaver(@NotNull Project project, @NotNull GitPlatformFacade platformFacade, @NotNull Git git,
protected GitChangesSaver(@NotNull Project project, @NotNull Git git,
@NotNull ProgressIndicator indicator, @NotNull String stashMessage) {
myProject = project;
myPlatformFacade = platformFacade;
myGit = git;
myProgressIndicator = indicator;
myStashMessage = stashMessage;
myChangeManager = platformFacade.getChangeListManager(project);
myChangeManager = ChangeListManagerImpl.getInstanceImpl(project);
}
/**
@@ -18,6 +18,7 @@ package git4idea.stash;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager;
@@ -25,7 +26,6 @@ import com.intellij.openapi.vcs.changes.shelf.ShelvedChangeList;
import com.intellij.openapi.vcs.changes.shelf.ShelvedChangesViewManager;
import com.intellij.openapi.vcs.impl.LocalChangesUnderRoots;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import git4idea.i18n.GitBundle;
import git4idea.rollback.GitRollbackEnvironment;
@@ -35,22 +35,25 @@ import java.util.*;
public class GitShelveChangesSaver extends GitChangesSaver {
private static final Logger LOG = Logger.getInstance(GitShelveChangesSaver.class);
private final ShelveChangesManager myShelveManager;
private final ShelvedChangesViewManager myShelveViewManager;
private final ProjectLevelVcsManager myVcsManager;
private Map<String, ShelvedChangeList> myShelvedLists;
public GitShelveChangesSaver(@NotNull Project project, GitPlatformFacade platformFacade, @NotNull Git git,
@NotNull ProgressIndicator indicator, String stashMessage) {
super(project, platformFacade, git, indicator, stashMessage);
public GitShelveChangesSaver(@NotNull Project project, @NotNull Git git, @NotNull ProgressIndicator indicator, String stashMessage) {
super(project, git, indicator, stashMessage);
myShelveManager = ShelveChangesManager.getInstance(myProject);
myShelveViewManager = ShelvedChangesViewManager.getInstance(myProject);
myVcsManager = ProjectLevelVcsManager.getInstance(myProject);
}
@Override
protected void save(@NotNull Collection<VirtualFile> rootsToSave) throws VcsException {
LOG.info("save " + rootsToSave);
final Map<String, Map<VirtualFile, Collection<Change>>> lists =
new LocalChangesUnderRoots(myChangeManager, myPlatformFacade.getVcsManager(myProject)).getChangesByLists(rootsToSave);
new LocalChangesUnderRoots(myChangeManager, myVcsManager).getChangesByLists(rootsToSave);
String oldProgressTitle = myProgressIndicator.getText();
myProgressIndicator.setText(GitBundle.getString("update.shelving.changes"));
@@ -28,7 +28,7 @@ import com.intellij.openapi.vcs.merge.MergeDialogCustomizer;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.commands.Git;
import git4idea.commands.GitCommandResult;
import git4idea.commands.GitHandlerUtil;
@@ -55,12 +55,11 @@ public class GitStashChangesSaver extends GitChangesSaver {
@NotNull private final Set<VirtualFile> myStashedRoots = ContainerUtil.newHashSet(); // save stashed roots to unstash only them
public GitStashChangesSaver(@NotNull Project project,
@NotNull GitPlatformFacade platformFacade,
@NotNull Git git,
@NotNull ProgressIndicator progressIndicator,
@NotNull String stashMessage) {
super(project, platformFacade, git, progressIndicator, stashMessage);
myRepositoryManager = platformFacade.getRepositoryManager(project);
super(project, git, progressIndicator, stashMessage);
myRepositoryManager = GitUtil.getRepositoryManager(project);
}
@Override
@@ -106,7 +105,7 @@ public class GitStashChangesSaver extends GitChangesSaver {
loadRoot(root);
}
boolean conflictsResolved = new UnstashConflictResolver(myProject, myPlatformFacade, myGit, myStashedRoots, myParams).merge();
boolean conflictsResolved = new UnstashConflictResolver(myProject, myGit, myStashedRoots, myParams).merge();
LOG.info("load: conflicts resolved status is " + conflictsResolved + " in roots " + myStashedRoots);
}
@@ -170,9 +169,9 @@ public class GitStashChangesSaver extends GitChangesSaver {
private final Set<VirtualFile> myStashedRoots;
public UnstashConflictResolver(@NotNull Project project, GitPlatformFacade platformFacade, @NotNull Git git,
public UnstashConflictResolver(@NotNull Project project, @NotNull Git git,
@NotNull Set<VirtualFile> stashedRoots, @Nullable Params params) {
super(project, git, platformFacade, stashedRoots, makeParamsOrUse(params));
super(project, git, stashedRoots, makeParamsOrUse(params));
myStashedRoots = stashedRoots;
}
@@ -38,10 +38,10 @@ import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.VcsNotifier;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vcs.merge.MergeDialogCustomizer;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.DocumentAdapter;
import com.intellij.util.Consumer;
import git4idea.GitPlatformFacade;
import git4idea.GitRevisionNumber;
import git4idea.GitUtil;
import git4idea.GitVcs;
@@ -53,8 +53,8 @@ import git4idea.merge.GitConflictResolver;
import git4idea.repo.GitRepository;
import git4idea.stash.GitStashUtils;
import git4idea.util.GitUIUtil;
import git4idea.util.LocalChangesWouldBeOverwrittenHelper;
import git4idea.util.GitUntrackedFilesHelper;
import git4idea.util.LocalChangesWouldBeOverwrittenHelper;
import git4idea.validators.GitBranchNameValidator;
import org.jetbrains.annotations.NotNull;
@@ -373,7 +373,7 @@ public class GitUnstashDialog extends DialogWrapper {
if (!completed) return;
ServiceManager.getService(myProject, GitPlatformFacade.class).hardRefresh(root);
VfsUtil.markDirtyAndRefresh(false, true, false, root);
GitCommandResult res = result.get();
if (conflict.get()) {
boolean conflictsResolved = new UnstashConflictResolver(myProject, root, getSelectedStash()).merge();
@@ -404,7 +404,7 @@ public class GitUnstashDialog extends DialogWrapper {
private final StashInfo myStashInfo;
public UnstashConflictResolver(Project project, VirtualFile root, StashInfo stashInfo) {
super(project, ServiceManager.getService(Git.class), ServiceManager.getService(GitPlatformFacade.class),
super(project, ServiceManager.getService(Git.class),
Collections.singleton(root), makeParams(stashInfo));
myRoot = root;
myStashInfo = stashInfo;
@@ -21,11 +21,8 @@ import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.RefsModel;
import git4idea.GitPlatformFacade;
import git4idea.config.GitVcsSettings;
import git4idea.log.GitRefManager;
import git4idea.repo.GitRepository;
@@ -90,7 +87,7 @@ public class GitLogBranchOperationsActionGroup extends ActionGroup implements Du
if (vcsRefs.isEmpty()) return AnAction.EMPTY_ARRAY;
GitVcsSettings settings = ServiceManager.getService(project, GitPlatformFacade.class).getSettings(project);
GitVcsSettings settings = GitVcsSettings.getInstance(project);
boolean showBranchesPopup = vcsRefs.size() > MAX_BRANCH_GROUPS;
List<AnAction> branchActionGroups = new ArrayList<AnAction>();
@@ -275,7 +275,7 @@ public class GitMergeUpdater extends GitUpdater {
private final VirtualFile myRoot;
public MyConflictResolver(Project project, @NotNull Git git, GitMerger merger, VirtualFile root) {
super(project, git, ServiceManager.getService(git4idea.GitPlatformFacade.class), Collections.singleton(root), makeParams());
super(project, git, Collections.singleton(root), makeParams());
myMerger = merger;
myRoot = root;
}
@@ -15,7 +15,6 @@
*/
package git4idea.update;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -27,7 +26,6 @@ import com.intellij.openapi.vcs.update.UpdateEnvironment;
import com.intellij.openapi.vcs.update.UpdateSession;
import com.intellij.openapi.vcs.update.UpdatedFiles;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.config.GitVcsSettings;
import git4idea.repo.GitRepositoryManager;
import org.jetbrains.annotations.NotNull;
@@ -42,12 +40,10 @@ import static git4idea.GitUtil.*;
public class GitUpdateEnvironment implements UpdateEnvironment {
private final Project myProject;
private final GitVcsSettings mySettings;
@NotNull private final GitPlatformFacade myPlatformFacade;
public GitUpdateEnvironment(@NotNull Project project, @NotNull GitVcsSettings settings) {
myProject = project;
mySettings = settings;
myPlatformFacade = ServiceManager.getService(project, GitPlatformFacade.class);
}
public void fillGroups(UpdatedFiles updatedFiles) {
@@ -58,7 +54,7 @@ public class GitUpdateEnvironment implements UpdateEnvironment {
public UpdateSession updateDirectories(@NotNull FilePath[] filePaths, UpdatedFiles updatedFiles, ProgressIndicator progressIndicator, @NotNull Ref<SequentialUpdatesContext> sequentialUpdatesContextRef) throws ProcessCanceledException {
Set<VirtualFile> roots = gitRoots(Arrays.asList(filePaths));
GitRepositoryManager repositoryManager = getRepositoryManager(myProject);
final GitUpdateProcess gitUpdateProcess = new GitUpdateProcess(myProject, myPlatformFacade,
final GitUpdateProcess gitUpdateProcess = new GitUpdateProcess(myProject,
progressIndicator, getRepositoriesFromRoots(repositoryManager, roots),
updatedFiles, true);
boolean result = gitUpdateProcess.update(mySettings.getUpdateType()).isSuccess();
@@ -35,7 +35,6 @@ import com.intellij.util.Function;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import git4idea.GitLocalBranch;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.branch.GitBranchPair;
import git4idea.branch.GitBranchUtil;
@@ -68,7 +67,6 @@ public class GitUpdateProcess {
@NotNull private final Project myProject;
@NotNull private final Git myGit;
@NotNull private final GitPlatformFacade myPlatformFacade;
@NotNull private final Collection<GitRepository> myRepositories;
private final boolean myCheckRebaseOverMergeProblem;
private final UpdatedFiles myUpdatedFiles;
@@ -78,13 +76,11 @@ public class GitUpdateProcess {
private final Map<VirtualFile, GitBranchPair> myTrackedBranches = new HashMap<VirtualFile, GitBranchPair>();
public GitUpdateProcess(@NotNull Project project,
@NotNull GitPlatformFacade platformFacade,
@Nullable ProgressIndicator progressIndicator,
@NotNull Collection<GitRepository> repositories,
@NotNull UpdatedFiles updatedFiles,
boolean checkRebaseOverMergeProblem) {
myProject = project;
myPlatformFacade = platformFacade;
myRepositories = repositories;
myCheckRebaseOverMergeProblem = checkRebaseOverMergeProblem;
myGit = ServiceManager.getService(Git.class);
@@ -193,7 +189,7 @@ public class GitUpdateProcess {
final Ref<GitUpdateResult> compoundResult = Ref.create();
final Map<VirtualFile, GitUpdater> finalUpdaters = updaters;
new GitPreservingProcess(myProject, myPlatformFacade, myGit, myRootsToSave, "Update", "Remote",
new GitPreservingProcess(myProject, myGit, myRootsToSave, "Update", "Remote",
GitVcsSettings.getInstance(myProject).updateChangesPolicy(), myProgressIndicator, new Runnable() {
@Override
public void run() {
@@ -387,7 +383,7 @@ public class GitUpdateProcess {
params.setMergeDescription("You have unfinished rebase process. These conflicts must be resolved before update.");
params.setErrorNotificationAdditionalDescription("Then you may <b>continue rebase</b>. <br/> You also may <b>abort rebase</b> to restore the original branch and stop rebasing.");
params.setReverse(true);
return !new GitConflictResolver(myProject, myGit, ServiceManager.getService(GitPlatformFacade.class), rebasingRoots, params) {
return !new GitConflictResolver(myProject, myGit, rebasingRoots, params) {
@Override protected boolean proceedIfNothingToMerge() {
return rebaser.continueRebase(rebasingRoots);
}
@@ -15,13 +15,20 @@
*/
package git4idea.util;
import com.intellij.ide.SaveAndSyncHandler;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ChangeListManagerEx;
import com.intellij.util.ui.UIUtil;
import git4idea.GitPlatformFacade;
import org.jetbrains.annotations.NotNull;
import static com.intellij.openapi.application.ModalityState.defaultModalityState;
/**
* Executes an action surrounding it with freezing-unfreezing of the ChangeListManager
* and blocking/unblocking save/sync on frame de/activation.
@@ -30,17 +37,22 @@ public class GitFreezingProcess {
private static final Logger LOG = Logger.getInstance(GitFreezingProcess.class);
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final String myOperationTitle;
@NotNull private final Runnable myRunnable;
@NotNull private final ChangeListManagerEx myChangeListManager;
public GitFreezingProcess(@NotNull Project project, @NotNull GitPlatformFacade facade,
@NotNull String operationTitle, @NotNull Runnable runnable) {
myFacade = facade;
@NotNull private final Application myApplication;
@NotNull private final ChangeListManagerEx myChangeListManager;
@NotNull private final ProjectManagerEx myProjectManager;
@NotNull private final SaveAndSyncHandler mySaveAndSyncHandler;
public GitFreezingProcess(@NotNull Project project, @NotNull String operationTitle, @NotNull Runnable runnable) {
myOperationTitle = operationTitle;
myRunnable = runnable;
myChangeListManager = myFacade.getChangeListManager(project);
myApplication = ApplicationManager.getApplication();
myChangeListManager = (ChangeListManagerEx)ChangeListManager.getInstance(project);
myProjectManager = ProjectManagerEx.getInstanceEx();
mySaveAndSyncHandler = SaveAndSyncHandler.getInstance();
}
public void execute() {
@@ -67,17 +79,17 @@ public class GitFreezingProcess {
LOG.debug("finished.");
}
public static void saveAndBlock(@NotNull GitPlatformFacade platformFacade) {
platformFacade.getProjectManager().blockReloadingProjectOnExternalChanges();
platformFacade.saveAllDocuments();
platformFacade.getSaveAndSyncHandler().blockSaveOnFrameDeactivation();
platformFacade.getSaveAndSyncHandler().blockSyncOnFrameActivation();
public void saveAndBlock() {
myProjectManager.blockReloadingProjectOnExternalChanges();
myApplication.invokeAndWait(() -> FileDocumentManager.getInstance().saveAllDocuments(), defaultModalityState());
mySaveAndSyncHandler.blockSaveOnFrameDeactivation();
mySaveAndSyncHandler.blockSyncOnFrameActivation();
}
private void saveAndBlockInAwt() {
RethrowingRunnable rethrowingRunnable = new RethrowingRunnable(new Runnable() {
@Override public void run() {
saveAndBlock(myFacade);
saveAndBlock();
}
});
UIUtil.invokeAndWaitIfNeeded(rethrowingRunnable);
@@ -87,17 +99,17 @@ public class GitFreezingProcess {
private void unblockInAwt() {
RethrowingRunnable rethrowingRunnable = new RethrowingRunnable(new Runnable() {
@Override public void run() {
unblock(myFacade);
unblock();
}
});
UIUtil.invokeAndWaitIfNeeded(rethrowingRunnable);
rethrowingRunnable.rethrowIfHappened();
}
public static void unblock(@NotNull GitPlatformFacade platformFacade) {
platformFacade.getProjectManager().unblockReloadingProjectOnExternalChanges();
platformFacade.getSaveAndSyncHandler().unblockSaveOnFrameDeactivation();
platformFacade.getSaveAndSyncHandler().unblockSyncOnFrameActivation();
public void unblock() {
myProjectManager.unblockReloadingProjectOnExternalChanges();
mySaveAndSyncHandler.unblockSaveOnFrameDeactivation();
mySaveAndSyncHandler.unblockSyncOnFrameActivation();
}
private void freeze() {
@@ -27,7 +27,6 @@ import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vcs.merge.MergeDialogCustomizer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.text.DateFormatUtil;
import git4idea.GitPlatformFacade;
import git4idea.commands.Git;
import git4idea.config.GitVcsSettings;
import git4idea.merge.GitConflictResolver;
@@ -49,7 +48,6 @@ public class GitPreservingProcess {
private static final Logger LOG = Logger.getInstance(GitPreservingProcess.class);
@NotNull private final Project myProject;
@NotNull private final GitPlatformFacade myFacade;
@NotNull private final Git myGit;
@NotNull private final Collection<VirtualFile> myRootsToSave;
@NotNull private final String myOperationTitle;
@@ -62,7 +60,6 @@ public class GitPreservingProcess {
@NotNull private final AtomicBoolean myLoaded = new AtomicBoolean();
public GitPreservingProcess(@NotNull Project project,
@NotNull GitPlatformFacade facade,
@NotNull Git git,
@NotNull Collection<VirtualFile> rootsToSave,
@NotNull String operationTitle,
@@ -71,7 +68,6 @@ public class GitPreservingProcess {
@NotNull ProgressIndicator indicator,
@NotNull Runnable operation) {
myProject = project;
myFacade = facade;
myGit = git;
myRootsToSave = rootsToSave;
myOperationTitle = operationTitle;
@@ -114,7 +110,7 @@ public class GitPreservingProcess {
}
};
new GitFreezingProcess(myProject, myFacade, myOperationTitle, operation).execute();
new GitFreezingProcess(myProject, myOperationTitle, operation).execute();
}
/**
@@ -122,7 +118,7 @@ public class GitPreservingProcess {
*/
@NotNull
private GitChangesSaver configureSaver(@NotNull GitVcsSettings.UpdateChangesPolicy saveMethod) {
GitChangesSaver saver = GitChangesSaver.getSaver(myProject, myFacade, myGit, myProgressIndicator, myStashMessage, saveMethod);
GitChangesSaver saver = GitChangesSaver.getSaver(myProject, myGit, myProgressIndicator, myStashMessage, saveMethod);
MergeDialogCustomizer mergeDialogCustomizer = new MergeDialogCustomizer() {
@Override
public String getMultipleFileMergeDescription(@NotNull Collection<VirtualFile> files) {
@@ -29,6 +29,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import static git4idea.GitCucumberWorld.myProject;
import static git4idea.GitCucumberWorld.myRepositoryManager;
import static git4idea.test.GitExecutor.cd;
import static git4idea.test.GitExecutor.git;
import static org.junit.Assert.assertNotNull;
@@ -63,7 +64,7 @@ public class GitAddSteps {
public void file_should_become_ADDED(String filePath) throws Throwable {
VirtualFile vf = GitCucumberWorld.myProjectDir.findFileByRelativePath(filePath);
assertNotNull(vf);
GitRepository repo = GitCucumberWorld.myPlatformFacade.getRepositoryManager(GitCucumberWorld.myProject).getRepositoryForFile(vf);
GitRepository repo = myRepositoryManager.getRepositoryForFile(vf);
String status = git(repo, "status --porcelain " + vf.getPath());
assertTrue("File status is not-changed: " + status, !status.isEmpty());
assertTrue("File status is not added: " + status, 'A' == status.charAt(0));
@@ -46,16 +46,12 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
/**
* @author Kirill Likhodedov
*/
public class GitCherryPickStepdefs {
@Given("^(enabled|disabled) auto-commit in the settings$")
public void auto_commit_in_the_settings(String state) {
boolean enabled = state.equals("enabled");
myPlatformFacade.getSettings(myProject).setAutoCommitOnCherryPick(enabled);
mySettings.setAutoCommitOnCherryPick(enabled);
}
@When("^I cherry-pick the commit (\\w+)$")
@@ -240,7 +236,7 @@ public class GitCherryPickStepdefs {
return virtualCommits.getRealCommit(virtualHash).getHash();
}
}), myProjectDir);
new GitCherryPicker(myProject, myGit, myPlatformFacade).cherryPick(commits);
new GitCherryPicker(myProject, myGit).cherryPick(commits);
}
private static List<VcsFullCommitDetails> loadDetails(List<String> hashes, @NotNull VirtualFile root) throws VcsException {
@@ -37,6 +37,7 @@ import git4idea.commands.Git;
import git4idea.commands.GitHttpAuthService;
import git4idea.config.GitVcsSettings;
import git4idea.repo.GitRepository;
import git4idea.repo.GitRepositoryManager;
import git4idea.test.GitExecutor;
import git4idea.test.GitHttpAuthTestService;
import git4idea.test.GitTestUtil;
@@ -74,11 +75,11 @@ public class GitCucumberWorld {
public static VirtualFile myProjectDir;
public static Project myProject;
public static GitPlatformFacade myPlatformFacade;
public static Git myGit;
public static GitRepository myRepository;
public static GitVcsSettings mySettings;
public static ChangeListManagerImpl myChangeListManager;
public static GitRepositoryManager myRepositoryManager;
public static GitVcs myVcs;
public static MockVcsHelper myVcsHelper;
@@ -114,17 +115,17 @@ public class GitCucumberWorld {
myProjectDir = myProject.getBaseDir();
myTestRoot = myProjectRoot;
myPlatformFacade = ServiceManager.getService(myProject, GitPlatformFacade.class);
myGit = ServiceManager.getService(myProject, Git.class);
mySettings = myPlatformFacade.getSettings(myProject);
mySettings = GitVcsSettings.getInstance(myProject);
mySettings.getAppSettings().setPathToGit(GitExecutor.PathHolder.GIT_EXECUTABLE);
// dynamic overriding is used instead of making it in plugin.xml,
// because MockVcsHelper is not ready to be a full featured implementation for all tests.
myVcsHelper = GitTestUtil.overrideService(myProject, AbstractVcsHelper.class, MockVcsHelper.class);
myChangeListManager = (ChangeListManagerImpl)myPlatformFacade.getChangeListManager(myProject);
myChangeListManager = ChangeListManagerImpl.getInstanceImpl(myProject);
myNotificator = (TestVcsNotifier)ServiceManager.getService(myProject, VcsNotifier.class);
myVcs = GitVcs.getInstance(myProject);
myRepositoryManager = GitUtil.getRepositoryManager(myProject);
virtualCommits = new GitTestVirtualCommitsHolder();
myAsyncTasks = new ArrayList<Future>();
@@ -498,7 +498,7 @@ public class GitBranchWorkerTest extends GitPlatformTest {
// IDEA-99849
prepareLocalChangesOverwrittenBy(myUltimate);
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, new TestUiHandler() {
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, new TestUiHandler() {
@Override
public int showSmartOperationDialog(@NotNull Project project,
@NotNull List<Change> changes,
@@ -526,7 +526,7 @@ public class GitBranchWorkerTest extends GitPlatformTest {
unmergedFiles(myCommunity);
final Ref<Boolean> rollbackProposed = Ref.create(false);
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, new TestUiHandler() {
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, new TestUiHandler() {
@Override
public boolean showUnmergedFilesMessageWithRollback(@NotNull String operationName, @NotNull String rollbackProposal) {
rollbackProposed.set(true);
@@ -695,7 +695,7 @@ public class GitBranchWorkerTest extends GitPlatformTest {
// delete feature fully merged to current HEAD, but not to the upstream
final Ref<Boolean> dialogShown = Ref.create(false);
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, new TestUiHandler() {
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, new TestUiHandler() {
@Override
public boolean showBranchIsNotFullyMergedDialog(@NotNull Project project,
@NotNull Map<GitRepository, List<GitCommit>> history,
@@ -902,27 +902,27 @@ public class GitBranchWorkerTest extends GitPlatformTest {
}
private void checkoutNewBranch(String name, GitBranchUiHandler uiHandler) {
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler);
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, uiHandler);
brancher.checkoutNewBranch(name, myRepositories);
}
private void checkoutBranch(String name, GitBranchUiHandler uiHandler) {
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler);
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, uiHandler);
brancher.checkout(name, false, myRepositories);
}
private void checkoutRevision(String reference, GitBranchUiHandler uiHandler) {
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler);
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, uiHandler);
brancher.checkout(reference, true, myRepositories);
}
private void mergeBranch(String name, GitBranchUiHandler uiHandler) {
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler);
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, uiHandler);
brancher.merge(name, GitBrancher.DeleteOnMergeOption.PROPOSE, myRepositories);
}
private void deleteBranch(String name, GitBranchUiHandler uiHandler) {
GitBranchWorker brancher = new GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler);
GitBranchWorker brancher = new GitBranchWorker(myProject, myGit, uiHandler);
brancher.deleteBranch(name, myRepositories);
}
@@ -128,7 +128,7 @@ public class GitCrlfProblemsDetectorTest extends GitSingleRepoTest {
}
});
assertTrue("Warning should be done, since one of the files has CRLFs and no related attributes",
GitCrlfProblemsDetector.detect(myProject, myPlatformFacade, myGit, files).shouldWarn());
GitCrlfProblemsDetector.detect(myProject, myGit, files).shouldWarn());
}
private void gitattributes(String content) throws IOException {
@@ -140,7 +140,7 @@ public class GitCrlfProblemsDetectorTest extends GitSingleRepoTest {
}
private GitCrlfProblemsDetector detect(VirtualFile file) {
return GitCrlfProblemsDetector.detect(myProject, myPlatformFacade, myGit, Collections.singleton(file));
return GitCrlfProblemsDetector.detect(myProject, myGit, Collections.singleton(file));
}
private void createCrlfFile(String relPath) throws IOException {
@@ -212,7 +212,7 @@ class GitMultiRepoRebaseTest : GitRebaseBaseTest() {
val uiHandler = Mockito.mock(GitBranchUiHandler::class.java)
Mockito.`when`(uiHandler.progressIndicator).thenReturn(EmptyProgressIndicator())
try {
GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler).rebaseOnCurrent(myAllRepositories, "feature")
GitBranchWorker(myProject, myGit, uiHandler).rebaseOnCurrent(myAllRepositories, "feature")
}
finally {
myGit.setShouldRebaseFail { false }
@@ -470,7 +470,7 @@ class GitSingleRepoRebaseTest : GitRebaseBaseTest() {
val uiHandler = Mockito.mock(GitBranchUiHandler::class.java)
`when`(uiHandler.progressIndicator).thenReturn(EmptyProgressIndicator())
GitBranchWorker(myProject, myPlatformFacade, myGit, uiHandler).rebaseOnCurrent(listOf(myRepo), "feature")
GitBranchWorker(myProject, myGit, uiHandler).rebaseOnCurrent(listOf(myRepo), "feature")
assertSuccessfulNotification("Checked out feature and rebased it on master")
myRepo.`assert feature rebased on master`()
@@ -64,7 +64,7 @@ public class GitConfigTest extends GitPlatformTest {
git("branch --track a#branch origin/a#branch");
File gitDir = new File(myProjectPath, ".git");
GitConfig config = GitConfig.read(myPlatformFacade, new File(gitDir, "config"));
GitConfig config = GitConfig.read(new File(gitDir, "config"));
VirtualFile dir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(gitDir);
GitRepositoryReader reader = new GitRepositoryReader(GitRepositoryFiles.getInstance(dir));
GitBranchState state = reader.readState(config.parseRemotes());
@@ -114,12 +114,12 @@ public class GitConfigTest extends GitPlatformTest {
private void assertSingleRemoteInConfig() {
File gitDir = new File(myProjectPath, ".git");
Collection<GitRemote> remotes = GitConfig.read(myPlatformFacade, new File(gitDir, "config")).parseRemotes();
Collection<GitRemote> remotes = GitConfig.read(new File(gitDir, "config")).parseRemotes();
assertSingleRemote(remotes);
}
private void doTestRemotes(String testName, File configFile, File resultFile) throws IOException {
GitConfig config = GitConfig.read(myPlatformFacade, configFile);
GitConfig config = GitConfig.read(configFile);
VcsTestUtil.assertEqualCollections(testName, config.parseRemotes(), readRemoteResults(resultFile));
}
@@ -141,7 +141,7 @@ public class GitConfigTest extends GitPlatformTest {
});
VcsTestUtil.assertEqualCollections(testName,
GitConfig.read(myPlatformFacade, configFile).parseTrackInfos(localBranches, remoteBranches),
GitConfig.read(configFile).parseTrackInfos(localBranches, remoteBranches),
expectedInfos);
}
@@ -162,7 +162,7 @@ class GitRepositoryReaderNewTest : GitSingleRepoTest() {
private fun readState(): GitBranchState {
val gitFiles = myRepo.repositoryFiles
val config = GitConfig.read(myPlatformFacade, gitFiles.configFile)
val config = GitConfig.read(gitFiles.configFile)
val reader = GitRepositoryReader(gitFiles)
val remotes = config.parseRemotes()
return reader.readState(remotes)
@@ -140,7 +140,7 @@ public class GitRepositoryReaderTest extends GitPlatformTest {
@Test
public void testBranches() throws Exception {
Collection<GitRemote> remotes = GitConfig.read(myPlatformFacade, new File(myGitDir, "config")).parseRemotes();
Collection<GitRemote> remotes = GitConfig.read(new File(myGitDir, "config")).parseRemotes();
GitBranchState state = myRepositoryReader.readState(remotes);
assertEquals("HEAD revision is incorrect", readHead(myTempDir), state.getCurrentRevision());
@@ -23,7 +23,6 @@ import com.intellij.openapi.vcs.*
import com.intellij.testFramework.vcs.AbstractVcsTestCase
import com.intellij.vcs.test.VcsPlatformTest
import git4idea.DialogManager
import git4idea.GitPlatformFacade
import git4idea.GitUtil
import git4idea.GitVcs
import git4idea.commands.Git
@@ -37,7 +36,6 @@ abstract class GitPlatformTest : VcsPlatformTest() {
protected lateinit var myGitRepositoryManager: GitRepositoryManager
protected lateinit var myGitSettings: GitVcsSettings
protected lateinit var myPlatformFacade: GitPlatformFacade
protected lateinit var myGit: TestGitImpl
protected lateinit var myVcs: GitVcs
protected lateinit var myDialogManager: TestDialogManager
@@ -54,7 +52,6 @@ abstract class GitPlatformTest : VcsPlatformTest() {
myVcsNotifier = ServiceManager.getService(myProject, VcsNotifier::class.java) as TestVcsNotifier
myGitRepositoryManager = GitUtil.getRepositoryManager(myProject)
myPlatformFacade = ServiceManager.getService(myProject, GitPlatformFacade::class.java)
myGit = GitTestUtil.overrideService(Git::class.java, TestGitImpl::class.java)
myVcs = GitVcs.getInstance(myProject)!!
myVcs.doActivate()
@@ -26,7 +26,6 @@ import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import git4idea.GitPlatformFacade;
import git4idea.GitUtil;
import git4idea.actions.BasicAction;
import git4idea.commands.*;
@@ -223,11 +222,10 @@ public class GithubRebaseAction extends DumbAwareAction {
@NotNull final GitRepository gitRepository,
@NotNull final ProgressIndicator indicator) {
final Git git = ServiceManager.getService(project, Git.class);
final GitPlatformFacade facade = ServiceManager.getService(project, GitPlatformFacade.class);
AccessToken token = DvcsUtil.workingTreeChangeStarted(project);
try {
List<VirtualFile> rootsToSave = Collections.singletonList(gitRepository.getRoot());
GitPreservingProcess process = new GitPreservingProcess(project, facade, git, rootsToSave, "Rebasing", "upstream/master",
GitPreservingProcess process = new GitPreservingProcess(project, git, rootsToSave, "Rebasing", "upstream/master",
GitVcsSettings.UpdateChangesPolicy.STASH, indicator,
() -> {
doRebaseCurrentBranch(project, gitRepository.getRoot(), indicator);