@Override
    public void actionPerformed(@NotNull AnActionEvent e) {
      // show dialog for comment and folder name, then create folder
      // then refresh selected node.
      Url root;
      RepositoryTreeNode node = getRepositoryBrowser().getSelectedNode();
      if (node == null) {
        return;
      }
      while (node.getSVNDirEntry() != null) {
        node = (RepositoryTreeNode)node.getParent();
      }
      root = node.getURL();
      final RepositoryTreeNode selectedNode = getSelectedNode();
      if (selectedNode == null) {
        return;
      }
      Url sourceURL = selectedNode.getURL();
      DiffOptionsDialog dialog = new DiffOptionsDialog(myProject, root, sourceURL);
      if (dialog.showAndGet()) {
        Url targetURL = dialog.getTargetURL();
        if (dialog.isReverseDiff()) {
          targetURL = sourceURL;
          sourceURL = dialog.getTargetURL();
        }

        final Url sURL = sourceURL;
        final Url tURL = targetURL;

        Runnable command;
        boolean cancelable;
        if (dialog.isUnifiedDiff()) {
          final File targetFile = dialog.getTargetFile();
          command = () -> {
            targetFile.getParentFile().mkdirs();
            doUnifiedDiff(targetFile, sURL, tURL);
          };
          cancelable = false;
        }
        else {
          command = () -> {
            try {
              doGraphicalDiff(sURL, tURL);
            }
            catch (final VcsException ex) {
              runOrInvokeLaterAboveProgress(
                () -> showErrorDialog(myProject, ex.getMessage(), message("dialog.title.error")),
                null,
                myProject
              );
            }
          };
          cancelable = true;
        }
        ProgressManager.getInstance()
          .runProcessWithProgressSynchronously(command, message("dialog.title.computing.difference"), cancelable, myProject);
      }
    }
@Override
    public void actionPerformed(@NotNull AnActionEvent e)