void (@NotNull SvnVcs vcs, @NotNull VirtualFile file, @NotNull DataContext context) { Info info = vcs.getInfo(file); if (info == null) { LOG.info("Could not get info for " + file); return; } RelocateDialog dlg = new RelocateDialog(vcs.getProject(), info.getUrl()); if (!dlg.showAndGet()) { return; } String beforeURL = dlg.getBeforeURL(); String afterURL = dlg.getAfterURL(); if (beforeURL.equals(afterURL)) return; ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); if (indicator != null) { indicator.setIndeterminate(true); } try { File path = VfsUtilCore.virtualToIoFile(file); vcs.getFactory(path).createRelocateClient().relocate(path, createUrl(beforeURL, false), createUrl(afterURL, false)); VcsDirtyScopeManager.getInstance(vcs.getProject()).markEverythingDirty(); } catch (VcsException e) { runOrInvokeLaterAboveProgress( () -> Messages.showErrorDialog( vcs.getProject(), message("dialog.message.error.relocating.working.copy", e.getMessage()), message("dialog.title.relocate.working.copy") ), null, vcs.getProject() ); } }, message("progress.title.relocating.working.copy"), false, vcs.getProject()); }