@Nullable
  public WrapperInvertor calculateCopyPoint(@NotNull Url repoUrl, @NotNull Url sourceUrl, @NotNull Url targetUrl)
    throws VcsException {
    WrapperInvertor result = getBestHit(repoUrl, sourceUrl, targetUrl);

    if (result == null) {
      CopyData copyData = new FirstInBranch(myVcs, repoUrl, targetUrl, sourceUrl).run();

      if (copyData != null) {
        BranchCopyData branchCopyData =
          copyData.isTrunkSupposedCorrect()
          ? new BranchCopyData(sourceUrl, copyData.getCopySourceRevision(), targetUrl, copyData.getCopyTargetRevision())
          : new BranchCopyData(targetUrl, copyData.getCopySourceRevision(), sourceUrl, copyData.getCopyTargetRevision());

        persist(repoUrl, branchCopyData);
        result = new WrapperInvertor(!copyData.isTrunkSupposedCorrect(), branchCopyData);
      }
    }

    logCopyData(repoUrl, sourceUrl, targetUrl, result);

    return result;
  }
@Nullable
  public WrapperInvertor calculateCopyPoint(@NotNull Url repoUrl, @NotNull Url sourceUrl, @NotNull Url targetUrl)