Search in sources :

Example 41 with GitSimpleHandler

use of git4idea.commands.GitSimpleHandler in project intellij-community by JetBrains.

the class GitCheckinEnvironment method mergeCommit.

/**
   * Preform a merge commit
   *
   * @param project          a project
   * @param root             a vcs root
   * @param added            added files
   * @param removed          removed files
   * @param messageFile      a message file for commit
   * @param author           an author
   * @param exceptions       the list of exceptions to report
   * @param partialOperation
   * @return true if merge commit was successful
   */
private boolean mergeCommit(final Project project, final VirtualFile root, final Set<FilePath> added, final Set<FilePath> removed, final File messageFile, final String author, List<VcsException> exceptions, @NotNull final PartialOperation partialOperation) {
    HashSet<FilePath> realAdded = new HashSet<>();
    HashSet<FilePath> realRemoved = new HashSet<>();
    // perform diff
    GitSimpleHandler diff = new GitSimpleHandler(project, root, GitCommand.DIFF);
    diff.setSilent(true);
    diff.setStdoutSuppressed(true);
    diff.addParameters("--diff-filter=ADMRUX", "--name-status", "--no-renames", "HEAD");
    diff.endOptions();
    String output;
    try {
        output = diff.run();
    } catch (VcsException ex) {
        exceptions.add(ex);
        return false;
    }
    String rootPath = root.getPath();
    for (StringTokenizer lines = new StringTokenizer(output, "\n", false); lines.hasMoreTokens(); ) {
        String line = lines.nextToken().trim();
        if (line.length() == 0) {
            continue;
        }
        String[] tk = line.split("\t");
        switch(tk[0].charAt(0)) {
            case 'M':
            case 'A':
                realAdded.add(VcsUtil.getFilePath(rootPath + "/" + tk[1]));
                break;
            case 'D':
                realRemoved.add(VcsUtil.getFilePathForDeletedFile(rootPath + "/" + tk[1], false));
                break;
            default:
                throw new IllegalStateException("Unexpected status: " + line);
        }
    }
    realAdded.removeAll(added);
    realRemoved.removeAll(removed);
    if (realAdded.size() != 0 || realRemoved.size() != 0) {
        final List<FilePath> files = new ArrayList<>();
        files.addAll(realAdded);
        files.addAll(realRemoved);
        final Ref<Boolean> mergeAll = new Ref<>();
        try {
            GuiUtils.runOrInvokeAndWait(new Runnable() {

                public void run() {
                    String message = GitBundle.message("commit.partial.merge.message", partialOperation.getName());
                    SelectFilePathsDialog dialog = new SelectFilePathsDialog(project, files, message, null, "Commit All Files", CommonBundle.getCancelButtonText(), false);
                    dialog.setTitle(GitBundle.getString("commit.partial.merge.title"));
                    dialog.show();
                    mergeAll.set(dialog.isOK());
                }
            });
        } catch (RuntimeException ex) {
            throw ex;
        } catch (Exception ex) {
            throw new RuntimeException("Unable to invoke a message box on AWT thread", ex);
        }
        if (!mergeAll.get()) {
            return false;
        }
        // update non-indexed files
        if (!updateIndex(project, root, realAdded, realRemoved, exceptions)) {
            return false;
        }
        for (FilePath f : realAdded) {
            VcsDirtyScopeManager.getInstance(project).fileDirty(f);
        }
        for (FilePath f : realRemoved) {
            VcsDirtyScopeManager.getInstance(project).fileDirty(f);
        }
    }
    // perform merge commit
    try {
        commitWithoutPaths(project, root, messageFile, author);
        GitRepositoryManager manager = getRepositoryManager(project);
        manager.updateRepository(root);
    } catch (VcsException ex) {
        exceptions.add(ex);
        return false;
    }
    return true;
}
Also used : FilePath(com.intellij.openapi.vcs.FilePath) GitSimpleHandler(git4idea.commands.GitSimpleHandler) GitRepositoryManager(git4idea.repo.GitRepositoryManager) GitUtil.getLogString(git4idea.GitUtil.getLogString) VcsException(com.intellij.openapi.vcs.VcsException) SelectFilePathsDialog(com.intellij.openapi.vcs.changes.ui.SelectFilePathsDialog) Ref(com.intellij.openapi.util.Ref) VcsException(com.intellij.openapi.vcs.VcsException)

Example 42 with GitSimpleHandler

use of git4idea.commands.GitSimpleHandler in project intellij-community by JetBrains.

the class GitFileUtils method addPaths.

private static void addPaths(@NotNull Project project, @NotNull VirtualFile root, @NotNull List<List<String>> chunkedPaths) throws VcsException {
    for (List<String> paths : chunkedPaths) {
        paths = excludeIgnoredFiles(project, root, paths);
        if (paths.isEmpty()) {
            continue;
        }
        GitSimpleHandler handler = new GitSimpleHandler(project, root, GitCommand.ADD);
        handler.addParameters("--ignore-errors");
        handler.endOptions();
        handler.addParameters(paths);
        handler.run();
    }
}
Also used : GitSimpleHandler(git4idea.commands.GitSimpleHandler)

Aggregations

GitSimpleHandler (git4idea.commands.GitSimpleHandler)42 NotNull (org.jetbrains.annotations.NotNull)10 VcsException (com.intellij.openapi.vcs.VcsException)8 VirtualFile (com.intellij.openapi.vfs.VirtualFile)6 ObjectUtils.assertNotNull (com.intellij.util.ObjectUtils.assertNotNull)6 StringScanner (git4idea.util.StringScanner)5 FilePath (com.intellij.openapi.vcs.FilePath)3 Change (com.intellij.openapi.vcs.changes.Change)3 GitRevisionNumber (git4idea.GitRevisionNumber)3 File (java.io.File)3 Nullable (org.jetbrains.annotations.Nullable)3 GitUtil.getLogString (git4idea.GitUtil.getLogString)2 GitRepositoryManager (git4idea.repo.GitRepositoryManager)2 Couple (com.intellij.openapi.util.Couple)1 Pair (com.intellij.openapi.util.Pair)1 Ref (com.intellij.openapi.util.Ref)1 SelectFilePathsDialog (com.intellij.openapi.vcs.changes.ui.SelectFilePathsDialog)1 VcsVirtualFile (com.intellij.openapi.vcs.vfs.VcsVirtualFile)1 Convertor (com.intellij.util.containers.Convertor)1 GitBranch (git4idea.GitBranch)1