Fix for Bug 33493 Workspaces created by 2.0.3 cannot be opened by 2.0.2 from same dir
diff --git a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformConfiguration.java b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformConfiguration.java
index f2ce7b6..416393c 100644
--- a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformConfiguration.java
+++ b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformConfiguration.java
@@ -104,7 +104,7 @@
private static final String CFG_VERSION = "version"; //$NON-NLS-1$
private static final String CFG_TRANSIENT = "transient"; //$NON-NLS-1$
- private static final String VERSION = "1.0"; //$NON-NLS-1$
+ private static final String VERSION = "2.1"; //$NON-NLS-1$
private static final String EOF = "eof"; //$NON-NLS-1$
private static final int CFG_LIST_LENGTH = 10;
@@ -1506,6 +1506,32 @@
resetInitializationLocation(initDir);
}
+ private void resetUpdateManagerState(URL url) throws IOException {
+ // [20111]
+ if (!supportsDetection(url))
+ return; // can't do ...
+
+ // find directory where the platform configuration file is
+ URL resolved = resolvePlatformURL(url);
+ File initCfg = new File(resolved.getFile().replace('/',File.separatorChar));
+ File initDir = initCfg.getParentFile();
+
+ // Find the Update Manager State directory
+ if (initDir == null || !initDir.exists() || !initDir.isDirectory())
+ return;
+ String temp = initCfg.getName()+".metadata";
+ File UMDir = new File(initDir,temp+'/');
+
+ // Attempt to rename it
+ if (UMDir == null || !UMDir.exists() || !UMDir.isDirectory())
+ return;
+ Date now = new Date();
+ boolean renamed = UMDir.renameTo(new File(initDir,temp+now.getTime()+'/'));
+
+ if (!renamed)
+ resetInitializationLocation(UMDir);
+ }
+
private void resetInitializationLocation(File dir) {
// [20111]
if (dir == null || !dir.exists() || !dir.isDirectory())
@@ -1893,7 +1919,10 @@
// check version
String v = props.getProperty(CFG_VERSION);
- if (!VERSION.equals(v)) {
+ if (!VERSION.equals(v)) {
+ // the state is invalid, delete any files under the directory
+ // bug 33493
+ resetUpdateManagerState(url);
throw new IOException(Policy.bind("cfig.badVersion",v)); //$NON-NLS-1$
}