From da1723b438b3f443df247aa0c007ec6b1d6054e8 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Tue, 4 Jun 2019 13:20:31 +0300 Subject: [PATCH] shelf: refactoring - update and reuse createChangelistCopy method, remove old * copy binary resources; * rename local vars; * update migration test; GitOrigin-RevId: b3857465b21f331a7c02ea64934cf76ff7ce1edb --- .../changes/shelf/ShelveChangesManager.java | 76 ++++++++----------- .../vcs/changes/shelf/ShelvedChangeList.java | 16 ---- .../after/{test.xml => test2.xml} | 2 +- .../ShelveChangesManagerMigrationTest.java | 18 +++-- 4 files changed, 41 insertions(+), 71 deletions(-) rename platform/vcs-tests/testData/shelf/migrateWithResources/after/{test.xml => test2.xml} (85%) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java index f3afaf726ea8..2febdc3ce595 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java @@ -33,10 +33,7 @@ import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.project.ProjectKt; -import com.intellij.util.Consumer; -import com.intellij.util.ObjectUtils; -import com.intellij.util.PathUtil; -import com.intellij.util.SmartList; +import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.Topic; @@ -245,13 +242,15 @@ public class ShelveChangesManager implements PersistentStateComponent, public void run(@NotNull ProgressIndicator indicator) { for (ShelvedChangeList list : mySchemeManager.getAllSchemes()) { if (!list.isValid()) continue; - ShelvedChangeList migratedList = ShelvedChangeList.copy(list); - //find new name; - File newTargetDirectory = suggestPatchName(myProject, migratedList.DESCRIPTION, toFile, ""); - migrateResourcesTo(migratedList, newTargetDirectory, false); - newSchemeManager.addScheme(migratedList, false); - // migrate resources and scheme path - indicator.checkCanceled(); + try { + File newTargetDirectory = suggestPatchName(myProject, list.DESCRIPTION, toFile, ""); + ShelvedChangeList migratedList = createChangelistCopy(list, newTargetDirectory); + newSchemeManager.addScheme(migratedList, false); + indicator.checkCanceled(); + } + catch (IOException e) { + LOG.error("Can't copy patch file: " + list.PATH); + } } clearShelvedLists(mySchemeManager.getAllSchemes(), false); } @@ -332,26 +331,8 @@ public class ShelveChangesManager implements PersistentStateComponent, } @NotNull - static Collection migrateResourcesTo(@NotNull ShelvedChangeList list, - @NotNull File targetDirectory, - boolean deleteOld) { - Collection nonMigratedPaths = new ArrayList<>(); - //try to copy/move .patch file - File patchFile = new File(list.PATH); - if (patchFile.exists()) { - File newPatchFile = getPatchFileInConfigDir(targetDirectory); - try { - FileUtil.copy(patchFile, newPatchFile); - list.PATH = toSystemIndependentName(newPatchFile.getPath()); - if (deleteOld) { - FileUtil.delete(patchFile); - } - } - catch (IOException e) { - nonMigratedPaths.add(list.PATH); - } - } - + private static List copyBinaryFiles(@NotNull ShelvedChangeList list, @NotNull File targetDirectory) { + List copied = new ArrayList<>(); for (ShelvedBinaryFile file : list.getBinaryFiles()) { if (file.SHELVED_PATH != null) { File shelvedFile = new File(file.SHELVED_PATH); @@ -359,18 +340,15 @@ public class ShelveChangesManager implements PersistentStateComponent, File newShelvedFile = new File(targetDirectory, PathUtil.getFileName(file.AFTER_PATH)); try { FileUtil.copy(shelvedFile, newShelvedFile); - file.SHELVED_PATH = toSystemIndependentName(newShelvedFile.getPath()); - if (deleteOld) { - FileUtil.delete(shelvedFile); - } + copied.add(new ShelvedBinaryFile(file.BEFORE_PATH, file.AFTER_PATH, toSystemIndependentName(newShelvedFile.getPath()))); } catch (IOException e) { - nonMigratedPaths.add(shelvedFile.getPath()); + LOG.error("Can't copy binary file: " + list.PATH); } } } } - return nonMigratedPaths; + return copied; } @NotNull @@ -1071,7 +1049,8 @@ public class ShelveChangesManager implements PersistentStateComponent, boolean delete) { try { - ShelvedChangeList listCopy = createChangelistCopy(changeList); + ShelvedChangeList listCopy = createChangelistCopy(changeList, generateUniqueSchemePatchDir(changeList.DESCRIPTION, true)); + listCopy.updateDate(); saveRemainingChangesInList(changeList, remainingPatches, remainingBinaries, commitContext); removeFromList(listCopy, changeList.getChanges(myProject), changeList.getBinaryFiles()); @@ -1099,7 +1078,7 @@ public class ShelveChangesManager implements PersistentStateComponent, changeList.clearLoadedChanges(); } - private void saveListAsScheme(@NotNull ShelvedChangeList list) { + void saveListAsScheme(@NotNull ShelvedChangeList list) { if (!list.getBinaryFiles().isEmpty() || !list.getChanges(myProject).isEmpty()) { // all newly create ShelvedChangeList have to be added to SchemesManger as new scheme @@ -1108,14 +1087,19 @@ public class ShelveChangesManager implements PersistentStateComponent, } @NotNull - private ShelvedChangeList createChangelistCopy(@NotNull ShelvedChangeList changeList) throws IOException { - final File newPatchDir = generateUniqueSchemePatchDir(changeList.DESCRIPTION, true); - final File newPath = getPatchFileInConfigDir(newPatchDir); + ShelvedChangeList createChangelistCopy(@NotNull ShelvedChangeList changeList, @NotNull File targetDir) + throws IOException { + final File newPath = getPatchFileInConfigDir(targetDir); FileUtil.copy(new File(changeList.PATH), newPath); - final ShelvedChangeList listCopy = new ShelvedChangeList(newPath.getAbsolutePath(), changeList.DESCRIPTION, - new ArrayList<>(changeList.getBinaryFiles())); + final ShelvedChangeList listCopy = + new ShelvedChangeList(newPath.getAbsolutePath(), changeList.DESCRIPTION, copyBinaryFiles(changeList, targetDir), + changeList.DATE.getTime()); listCopy.markToDelete(changeList.isMarkedToDelete()); - listCopy.setName(newPatchDir.getName()); + listCopy.setRecycled(changeList.isRecycled()); + listCopy.setDeleted(changeList.isDeleted()); + listCopy.setName(targetDir.getName()); + //load changes + listCopy.getChanges(myProject); return listCopy; } @@ -1140,7 +1124,7 @@ public class ShelveChangesManager implements PersistentStateComponent, clearShelvedLists(getRecycledShelvedChangeLists(), true); } - private void clearShelvedLists(@NotNull List shelvedLists, boolean updateView) { + void clearShelvedLists(@NotNull List shelvedLists, boolean updateView) { if (shelvedLists.isEmpty()) return; for (ShelvedChangeList list : shelvedLists) { deleteResources(list); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangeList.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangeList.java index 603b8c9a51ec..780f0761fe04 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangeList.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangeList.java @@ -70,22 +70,6 @@ public class ShelvedChangeList implements JDOMExternalizable, ExternalizableSche mySchemeName = DESCRIPTION; } - static ShelvedChangeList copy(@NotNull ShelvedChangeList list) { - ShelvedChangeList copied = new ShelvedChangeList(); - copied.PATH = list.PATH; - copied.DESCRIPTION = list.DESCRIPTION; - copied.DATE = list.DATE; - copied.myBinaryFiles = new ArrayList<>(); - for (ShelvedBinaryFile file : list.getBinaryFiles()) { - copied.myBinaryFiles.add(new ShelvedBinaryFile(file.BEFORE_PATH, file.AFTER_PATH, file.SHELVED_PATH)); - } - copied.mySchemeName = list.DESCRIPTION; - copied.myRecycled = list.isRecycled(); - copied.myToDelete = list.isMarkedToDelete(); - copied.myIsDeleted = list.isDeleted(); - return copied; - } - public boolean isRecycled() { return myRecycled; } diff --git a/platform/vcs-tests/testData/shelf/migrateWithResources/after/test.xml b/platform/vcs-tests/testData/shelf/migrateWithResources/after/test2.xml similarity index 85% rename from platform/vcs-tests/testData/shelf/migrateWithResources/after/test.xml rename to platform/vcs-tests/testData/shelf/migrateWithResources/after/test2.xml index 8969ab520b81..c90f50d6d421 100644 --- a/platform/vcs-tests/testData/shelf/migrateWithResources/after/test.xml +++ b/platform/vcs-tests/testData/shelf/migrateWithResources/after/test2.xml @@ -1,4 +1,4 @@ - +