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$ }