void (@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()); } }