// on EDT, dispose checked
  public void execute(final UpdatedFiles updatedFiles) {
    if (myConflictedVirtualFiles.isEmpty()) {
      return;
    }
    final AbstractVcsHelper vcsHelper = AbstractVcsHelper.getInstance(myProject);

    List<VirtualFile> mergedFiles =
        vcsHelper.showMergeDialog(myConflictedVirtualFiles, new SvnMergeProvider(myProject));

    final FileGroup mergedGroup = updatedFiles.getGroupById(FileGroup.MERGED_ID);
    final FileGroup conflictedGroup = updatedFiles.getGroupById(FileGroup.MERGED_WITH_CONFLICT_ID);
    final VcsKey vcsKey = SvnVcs.getKey();

    for (final VirtualFile mergedFile : mergedFiles) {
      String path = FileUtil.toSystemDependentName(mergedFile.getPresentableUrl());
      conflictedGroup.remove(path);
      mergedGroup.add(path, vcsKey, null);

      mergedFile.refresh(false, false);
      // for additionally created files removal to be detected
      mergedFile.getParent().refresh(false, false);

      if (myChangesUnderProjectRoot) {
        myDirtyScopeManager.fileDirty(mergedFile);
      }
    }
  }
  private boolean executeRebase(final List<VcsException> exceptions, RebaseInfo rebaseInfo) {
    // TODO this is a workaround to attach PushActiveBranched to the new update.
    // at first we update via rebase
    boolean result =
        new GitUpdateProcess(
                myProject, new EmptyProgressIndicator(), rebaseInfo.roots, UpdatedFiles.create())
            .update(true);

    // then we reorder commits
    if (result) {
      // getting new rebase info because commit hashes changed because of rebase
      final List<Root> roots =
          loadRoots(myProject, new ArrayList<VirtualFile>(rebaseInfo.roots), exceptions, false);
      updateTree(roots, rebaseInfo.uncheckedCommits);
      rebaseInfo = collectRebaseInfo();
      return reorderCommitsIfNeeded(rebaseInfo);
    } else {
      notifyMessage(
          myProject,
          "Commits weren't pushed",
          "Rebase failed.",
          NotificationType.WARNING,
          true,
          null);
      return false;
    }
  }
 private List<VcsException> updateThroughPlugin() throws VcsException {
   HgRegularUpdater updater =
       new HgRegularUpdater(
           myProject,
           projectRepoVirtualFile,
           new org.zmlx.hg4idea.provider.update.HgUpdater.UpdateConfiguration());
   UpdatedFiles updatedFiles = UpdatedFiles.create();
   EmptyProgressIndicator indicator = new EmptyProgressIndicator();
   ArrayList<VcsException> nonFatalWarnings = new ArrayList<VcsException>();
   updater.update(updatedFiles, indicator, nonFatalWarnings);
   return nonFatalWarnings;
 }
 public static boolean haveUnresolvedConflicts(final UpdatedFiles updatedFiles) {
   final String[] ids =
       new String[] {
         FileGroup.MERGED_WITH_CONFLICT_ID,
         FileGroup.MERGED_WITH_PROPERTY_CONFLICT_ID,
         FileGroup.MERGED_WITH_TREE_CONFLICT,
         FileGroup.SKIPPED_ID
       };
   for (String id : ids) {
     final FileGroup group = updatedFiles.getGroupById(id);
     if ((group != null) && (!group.isEmpty())) return true;
   }
   return false;
 }
  public boolean needsInteraction(final UpdatedFiles updatedFiles) {
    if (myChangesUnderProjectRoot) {
      refreshChangeListsFindConflicts(updatedFiles);
    } else {
      final FileGroup conflictedGroup =
          updatedFiles.getGroupById(FileGroup.MERGED_WITH_CONFLICT_ID);
      for (String filename : conflictedGroup.getFiles()) {
        final VirtualFile vf = SvnUtil.getVirtualFile(filename);
        myConflictedVirtualFiles.add(vf);
      }
    }

    return ((!myConflictedVirtualFiles.isEmpty()) || (!haveUnresolvedConflicts(updatedFiles)))
        && (!SvnConfiguration.getInstance(myProject).MERGE_DRY_RUN);
  }
 @Override
 protected void actionPerformed(@NotNull HgRepository repository, @NotNull Hash commit) {
   FileDocumentManager.getInstance().saveAllDocuments();
   HgMergeCommand.mergeWith(repository, commit.asString(), UpdatedFiles.create());
 }
 private static void addToGroup(UpdatedFiles updatedFiles, HgChange change, String id) {
   updatedFiles
       .getGroupById(id)
       .add(change.afterFile().getFile().getAbsolutePath(), HgVcs.VCS_NAME, null);
 }