@Override
  protected void execute() {
    LOG.info("starting");
    saveAllDocuments();
    boolean fatalErrorHappened = false;
    int alreadyUpToDateRepositories = 0;
    try (AccessToken ignore = DvcsUtil.workingTreeChangeStarted(myProject, GitBundle.message("activity.name.merge"), GitActivity.Merge)) {
      while (hasMoreRepositories() && !fatalErrorHappened) {
        final GitRepository repository = next();
        LOG.info("next repository: " + repository);
        RepositoryMergeResult repoResult = mergeRepository(repository, myBranchNameToMerge, Collections.emptyList());
        if (repoResult.alreadyUpToDateRepository) {
          alreadyUpToDateRepositories += 1;
        }
        if (repoResult.fatalErrorHappened) {
          fatalErrorHappened = true;
        }
      }

      if (fatalErrorHappened) {
        notifyAboutRemainingConflicts();
      }
      else {
        boolean allConflictsResolved = resolveConflicts();
        if (allConflictsResolved) {
          if (alreadyUpToDateRepositories < getRepositories().size()) {
            notifySuccess();
          }
          else {
            notifySuccess(GitBundle.message("merge.operation.already.up.to.date"));
          }
        }
      }

      restoreLocalChanges();
    }
  }
@Override
  protected void execute()