private void processCopiedFile(@NotNull SvnChangedFile copiedFile,
                                 @NotNull SvnChangeProviderContext context,
                                 @Nullable VcsDirtyScope dirtyScope) {
    Url copyFromURL = Objects.requireNonNull(copiedFile.getCopyFromURL());
    SvnChangedFile movedFromFile = find(context.getDeletedFiles(), it -> copyFromURL.equals(it.getStatus().getUrl()));

    if (movedFromFile != null) {
      Set<SvnChangedFile> movedFiles = new HashSet<>();
      String changeListName = SvnUtil.getChangelistName(copiedFile.getStatus());

      applyMovedChange(context, copiedFile.getFilePath(), dirtyScope, movedFiles, movedFromFile, copiedFile.getStatus(), changeListName);

      for (SvnChangedFile deletedChild : context.getDeletedFiles()) {
        if (movedFromFile == deletedChild) continue;

        Url childUrl = deletedChild.getStatus().getUrl();
        if (childUrl == null) continue;

        if (isAncestor(copyFromURL, childUrl)) {
          String relativePath = getRelativeUrl(copyFromURL, childUrl);
          File newPath = new File(copiedFile.getFilePath().getIOFile(), relativePath);
          FilePath newFilePath = VcsUtil.getFilePath(newPath);

          if (!context.isDeleted(newFilePath)) {
            applyMovedChange(context, newFilePath, dirtyScope, movedFiles, deletedChild, context.getTreeConflictStatus(newPath),
                             changeListName);
          }
        }
      }

      List<SvnChangedFile> deletedFiles = context.getDeletedFiles();
      for (SvnChangedFile file : movedFiles) {
        deletedFiles.remove(file);
      }
    }

    boolean foundRename = movedFromFile != null;

    // handle the case when the deleted file wasn't included in the dirty scope - try searching for the local copy
    // by building a relative url
    if (!foundRename && copiedFile.getStatus().getUrl() != null) {
      File wcPath = myVcs.getSvnFileUrlMapping().getLocalPath(copyFromURL);

      if (wcPath != null) {
        Status status;
        try {
          status = myVcs.getFactory(wcPath).createStatusClient().doStatus(wcPath, false);
        }
        catch (SvnBindException ex) {
          LOG.info(ex);
          status = null;
        }
        if (status != null && status.is(StatusType.STATUS_DELETED)) {
          FilePath filePath = VcsUtil.getFilePath(wcPath, status.isDirectory());
          SvnContentRevision beforeRevision = SvnContentRevision.createBaseRevision(myVcs, filePath, status.getRevision());
          ContentRevision afterRevision = CurrentContentRevision.create(copiedFile.getFilePath());

          context.getBuilder().processChangeInList(context.createMovedChange(beforeRevision, afterRevision, copiedFile.getStatus(), status),
                                                   SvnUtil.getChangelistName(status), SvnVcs.getKey());
          foundRename = true;
        }
      }
    }

    if (!foundRename) {
      LOG.info("Rename not found for " + copiedFile.getFilePath().getPresentableUrl());
      context.processStatus(copiedFile.getFilePath(), copiedFile.getStatus());
    }
  }
private void processCopiedFile(@NotNull SvnChangedFile copiedFile,
                                 @NotNull SvnChangeProviderContext context,
                                 @Nullable VcsDirtyScope dirtyScope)