mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
shelf: refactoring - update and reuse createChangelistCopy method, remove old
* copy binary resources; * rename local vars; * update migration test; GitOrigin-RevId: b3857465b21f331a7c02ea64934cf76ff7ce1edb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bc0d0a4894
commit
da1723b438
+30
-46
@@ -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<Element>,
|
||||
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<Element>,
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static Collection<String> migrateResourcesTo(@NotNull ShelvedChangeList list,
|
||||
@NotNull File targetDirectory,
|
||||
boolean deleteOld) {
|
||||
Collection<String> 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<ShelvedBinaryFile> copyBinaryFiles(@NotNull ShelvedChangeList list, @NotNull File targetDirectory) {
|
||||
List<ShelvedBinaryFile> 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<Element>,
|
||||
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<Element>,
|
||||
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<Element>,
|
||||
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<Element>,
|
||||
}
|
||||
|
||||
@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<Element>,
|
||||
clearShelvedLists(getRecycledShelvedChangeLists(), true);
|
||||
}
|
||||
|
||||
private void clearShelvedLists(@NotNull List<? extends ShelvedChangeList> shelvedLists, boolean updateView) {
|
||||
void clearShelvedLists(@NotNull List<? extends ShelvedChangeList> shelvedLists, boolean updateView) {
|
||||
if (shelvedLists.isEmpty()) return;
|
||||
for (ShelvedChangeList list : shelvedLists) {
|
||||
deleteResources(list);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
<changelist name="test" date="1432034020315" recycled="false">
|
||||
<changelist name="test2" date="1432034020315" recycled="false">
|
||||
<option name="PATH" value="$PROJECT_DIR$/.shelf/test/shelved.patch" />
|
||||
<option name="DESCRIPTION" value="test" />
|
||||
<binary>
|
||||
+10
-8
@@ -12,8 +12,10 @@ import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
||||
import static com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager.migrateResourcesTo;
|
||||
import static com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager.getInstance;
|
||||
|
||||
public class ShelveChangesManagerMigrationTest extends PlatformTestCase {
|
||||
|
||||
@@ -55,26 +57,26 @@ public class ShelveChangesManagerMigrationTest extends PlatformTestCase {
|
||||
File beforeXmlInfo = new File(testDataPath, "before.xml");
|
||||
assert (beforeXmlInfo.exists());
|
||||
Element element = JDOMUtil.load(beforeXmlInfo);
|
||||
ShelveChangesManager shelveChangesManager = ShelveChangesManager.getInstance(myProject);
|
||||
ShelveChangesManager shelveChangesManager = getInstance(myProject);
|
||||
shelveChangesManager.loadState(element);
|
||||
if (migrateResources) {
|
||||
checkAndMigrateOldPatchResourcesToNewSchemeStorage(shelveChangesManager);
|
||||
}
|
||||
shelfDir.refresh(false, true);
|
||||
PlatformTestUtil.saveProject(myProject);
|
||||
shelfDir.refresh(false, true);
|
||||
PlatformTestUtil.assertDirectoriesEqual(afterDir, shelfDir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should be called only once: when Settings Repository plugin runs first time
|
||||
*/
|
||||
private static void checkAndMigrateOldPatchResourcesToNewSchemeStorage(@NotNull ShelveChangesManager shelveChangesManager) {
|
||||
private static void checkAndMigrateOldPatchResourcesToNewSchemeStorage(@NotNull ShelveChangesManager shelveChangesManager)
|
||||
throws IOException {
|
||||
for (ShelvedChangeList list : shelveChangesManager.getAllLists()) {
|
||||
File newPatchDir = new File(shelveChangesManager.getShelfResourcesDirectory(), list.getName());
|
||||
// it should be enough for migration to check if resource directory exists. If any bugs appeared add isAncestor checks for each path
|
||||
if (!newPatchDir.exists() && newPatchDir.mkdirs()) {
|
||||
migrateResourcesTo(list, newPatchDir, true);
|
||||
}
|
||||
ShelvedChangeList migrated = shelveChangesManager.createChangelistCopy(list, newPatchDir);
|
||||
shelveChangesManager.saveListAsScheme(migrated);
|
||||
shelveChangesManager.clearShelvedLists(Collections.singletonList(list), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user