@Override
  protected void perform(@NotNull SvnVcs vcs, @NotNull VirtualFile file, @NotNull DataContext context) throws VcsException {
    CreateBranchOrTagDialog dialog = new CreateBranchOrTagDialog(vcs, virtualToIoFile(file));
    if (dialog.showAndGet()) {
      Target source = Objects.requireNonNull(dialog.getSource());
      File sourceFile = dialog.getSourceFile();
      Url destination = Objects.requireNonNull(dialog.getDestination());
      Revision revision = dialog.getRevision();
      String comment = dialog.getComment();
      Url parentUrl = removePathTail(destination);

      if (!dirExists(vcs, parentUrl)) {
        int rc = showYesNoDialog(
          vcs.getProject(),
          message("dialog.message.repository.path.does.not.exist", parentUrl),
          message("copy.dialog.title"),
          getQuestionIcon()
        );
        if (rc == Messages.NO) {
          return;
        }
      }

      Ref<Exception> exception = new Ref<>();
      Runnable copyCommand = () -> {
        try {
          ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
          CommitEventHandler handler = null;
          if (progress != null) {
            progress.setText(message("progress.text.copy.to", destination.toDecodedString()));
            handler = new IdeaCommitHandler(progress);
          }

          long newRevision =
            vcs.getFactory(source).createCopyMoveClient().copy(source, Target.on(destination), revision, true, false, comment, handler);

          updateStatusBar(newRevision, vcs.getProject());
        }
        catch (Exception e) {
          exception.set(e);
        }
      };
      ProgressManager.getInstance()
        .runProcessWithProgressSynchronously(copyCommand, message("progress.title.copy"), false, vcs.getProject());
      if (!exception.isNull()) {
        throw new VcsException(exception.get());
      }

      if (dialog.isSwitchOnCreate()) {
        SingleRootSwitcher switcher =
          new SingleRootSwitcher(vcs.getProject(), VcsUtil.getFilePath(sourceFile, sourceFile.isDirectory()), destination);
        AutoSvnUpdater.run(switcher, message("action.name.switch"));
      }
    }
  }
@Override
  protected void perform(@NotNull SvnVcs vcs, @NotNull VirtualFile file, @NotNull DataContext context)