@Override
  public long copy(@NotNull Target source,
                   @NotNull Target destination,
                   @Nullable Revision revision,
                   boolean makeParents,
                   boolean isMove,
                   @NotNull String message,
                   @Nullable CommitEventHandler handler) throws VcsException {
    if (!destination.isUrl()) {
      throw new IllegalArgumentException("Only urls are supported as destination " + destination);
    }

    List<String> parameters = new ArrayList<>();

    CommandUtil.put(parameters, source);
    CommandUtil.put(parameters, destination);
    CommandUtil.put(parameters, revision);
    CommandUtil.put(parameters, makeParents, "--parents");
    parameters.add("--message");
    parameters.add(message);

    // copy to url output is the same as commit output - just statuses have "copy of" suffix
    // so "Adding" will be "Adding copy of"
    CmdCheckinClient.CommandListener listener = new CmdCheckinClient.CommandListener(handler);
    if (source.isFile()) {
      listener.setBaseDirectory(source.getFile());
    }
    execute(myVcs, source, getCommandName(isMove), parameters, listener);

    return listener.getCommittedRevision();
  }
@Override
  public long copy(@NotNull Target source,
                   @NotNull Target destination,
                   @Nullable Revision revision,
                   boolean makeParents,
                   boolean isMove,
                   @NotNull String message,
                   @Nullable CommitEventHandler handler)