diff options
author | Pascal Rapicault (Ericsson) | 2013-01-28 04:41:19 +0000 |
---|---|---|
committer | Pascal Rapicault | 2013-01-28 05:08:43 +0000 |
commit | b86b21139a5367412cd51e86d359af33b0c03c3c (patch) | |
tree | 1bc01c47dfdcedf7ebc9888aa52002e1d9c809a2 /bundles/org.eclipse.equinox.simpleconfigurator.manipulator | |
parent | c847dee6f33950f48ecd1d8eca18729f6ffc470f (diff) | |
download | rt.equinox.p2-b86b21139a5367412cd51e86d359af33b0c03c3c.tar.gz rt.equinox.p2-b86b21139a5367412cd51e86d359af33b0c03c3c.tar.xz rt.equinox.p2-b86b21139a5367412cd51e86d359af33b0c03c3c.zip |
Squashed commit of the following:v20130128-050843
304132 - [shared] upgrading shared base causes loss of user installer
plug-ins
commit 8461eae803454c36f6a18013c44e37c20810d141
Merge: 23bc40c c847dee
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Sun Jan 27 22:11:45 2013 -0500
Merge branch 'master' into prapicau/sharedInstall-part1
commit 23bc40c4f85b01f37fb0ac23992524a7c8ccd892
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Sun Jan 27 21:38:07 2013 -0500
Use constant and fix copyright header
commit bc11d565b32b5b5c8bb5c93e5ea666b1d06b43ff
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Sun Jan 27 21:33:32 2013 -0500
Annotate new profile with a base profile timestamp
commit ba4e7abda6e44ad47aead2fade320f9be08b27d5
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Sun Jan 27 21:32:20 2013 -0500
Add constants
commit 54c8d356527d1321e25bd837e674b758aa61e248
Author: Krzysztof Daniel <kdaniel@redhat.com>
Date: Thu Jan 24 13:23:15 2013 +0100
SimpleConfiguratorImpl refactoring and tests.
commit 6177c466083fb7676ebfe5790bc0951043b3b727
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Thu Jan 24 11:59:45 2013 -0500
detection of change in the reconciler
commit f04f46d6d283a6235367872b5eaa7e3e483509ed
Merge: 5243d49 c32f111
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Thu Jan 24 11:43:01 2013 -0500
Merge branch 'master' into prapicau/sharedInstall-part1
commit 5243d497142b0f2631bcda8b5fed67d7ce0ddbd5
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Wed Jan 23 15:26:41 2013 -0500
always use shared install when the ignoreUserConfig property is set
commit 12eccdad23420e7ba91f99221c852f7e32eb11de
Merge: c68f394 1e9fc23
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Wed Jan 23 10:29:56 2013 -0500
Merge branch 'master' into prapicau/sharedInstall-part1
commit c68f394a39c4215ed7ac960495a3c59eb3cf3eee
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Tue Jan 22 22:24:04 2013 -0500
Bug 398853 - [UI] installed IU shows as update
commit aa6d632dea7ff54e9ba7c3c7f9f2ecd30afe5906
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Tue Jan 22 13:50:05 2013 -0500
Differentiate initial profile creation from reset.
commit 4fb3429ed3fd673d5daf7ca1ce9bf1184a0afcb3
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Tue Jan 22 13:49:23 2013 -0500
Only show migration dialog once
commit a34eac29e330a41991d003e2dcd2d8b264d77145
Author: Krzysztof Daniel <kdaniel@redhat.com>
Date: Mon Jan 21 12:40:36 2013 +0100
397216: [Shared] Better shared configuration change discovery
Perform dropins reindexing after master configuration had been changed.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=397216
commit 6981ca8bd3c1db9ab2dd9484a1f7c8950fcd1abe
Merge: dfec14b 33ca260
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Mon Jan 21 15:04:28 2013 -0500
Merge branch 'master' into prapicau/sharedInstall-part1
commit dfec14b67a69b6fa14efb860ef8a986053a58917
Merge: 6067d05 ba5f048
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Mon Jan 21 11:34:38 2013 -0500
Merge branch 'master' into prapicau/sharedInstall-part1
commit ba5f048a3ac5563430104adeb173dc4f7dda6eca
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Mon Jan 21 11:28:20 2013 -0500
Bug 398539 - Got a NPE trying to add a new update site
commit 6067d05e402fe796debd9d25604cae7026df5b48
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Fri Jan 18 16:16:18 2013 -0500
only write timestamp file for shared install
commit 8ab9410d8c797e6a8d2a97e4ba46da3d548440fa
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Fri Jan 18 13:56:46 2013 -0500
Cache the fact that the state.properties is missing
commit fefbc5bdec2ce6cdb7fd71b1790bf8abdee8737a
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Fri Jan 18 13:51:54 2013 -0500
Fix bug in change detection logic
commit 3de6f8593d5c1b21be3bd21000e34acb945056b1
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Wed Jan 16 19:50:32 2013 -0500
Detect changes in the bundles.info
commit 446649c95063dca689f4d2c886b26975a11f3499
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Tue Jan 15 14:04:57 2013 -0500
Simple notification to let the user know that the base has changed.
commit e004dc5270abd33a60da9a8d0340409bc8e4a38d
Author: Pascal Rapicault <pascal@rapicault.net>
Date: Fri Jan 11 14:15:20 2013 +0100
ignore user config.ini if out of sync with base
commit a0235c0c95b9047e64d6e24c9d8f6b8588087113
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Wed Dec 12 09:57:36 2012 -0500
Obtain specific profile state properties without locking
commit 1d0f129ca70716e7a181631e1ba0e71f16e35e08
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Mon Dec 10 16:06:38 2012 -0500
Remember the timestamp of the base config.ini
commit 3134caecfd244fd88386f3ce4bd1a6fc71fe8007
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Wed Dec 5 16:21:50 2012 -0500
Support to ignore the existing profile if the base has changed
commit 7f0ba4e643f40bc0143617b93b2238388d38216d
Author: Pascal Rapicault (Ericsson) <pascal.rapicault@ericsson.com>
Date: Tue Dec 4 11:23:37 2012 -0500
Remove externalization warning
Diffstat (limited to 'bundles/org.eclipse.equinox.simpleconfigurator.manipulator')
-rw-r--r-- | bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java | 95 |
1 files changed, 85 insertions, 10 deletions
diff --git a/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java b/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java index c6748e918..55e1743dd 100644 --- a/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java +++ b/bundles/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java @@ -1,10 +1,13 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. + * Copyright (c) 2007, 2013 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: IBM Corporation - initial API and implementation + * + * Ericsson AB (Pascal Rapicault) - Bug 397216 -[Shared] Better shared + * configuration change discovery *******************************************************************************/ package org.eclipse.equinox.internal.simpleconfigurator.manipulator; @@ -42,8 +45,10 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani public static final String PROP_KEY_EXCLUSIVE_INSTALLATION = "org.eclipse.equinox.simpleconfigurator.exclusiveInstallation"; //$NON-NLS-1$ public static final String CONFIG_LIST = "bundles.info"; //$NON-NLS-1$ + public static final String CONFIG_FOLDER = "configuration"; //$NON-NLS-1$ public static final String CONFIGURATOR_FOLDER = "org.eclipse.equinox.simpleconfigurator"; //$NON-NLS-1$ public static final String PROP_KEY_CONFIGURL = "org.eclipse.equinox.simpleconfigurator.configUrl"; //$NON-NLS-1$ + public static final String SHARED_BUNDLES_INFO = CONFIG_FOLDER + File.separatorChar + CONFIGURATOR_FOLDER + File.separatorChar + CONFIG_LIST; private Set manipulators = new HashSet(); @@ -63,7 +68,7 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani if (manipulator.getLauncherData().getLauncher() != null) { baseDir = manipulator.getLauncherData().getLauncher().getParentFile(); } else { - throw new IllegalStateException("All of fwConfigFile, home, launcher are not set."); + throw new IllegalStateException("All of fwConfigFile, home, launcher are not set."); //$NON-NLS-1$ } } } else { @@ -393,6 +398,33 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani return; } SimpleConfiguratorManipulatorUtils.writeConfiguration(simpleInfos, outputFile); + if (CONFIG_LIST.equals(outputFile.getName()) && isSharedInstallSetup(URIUtil.toFile(installArea), outputFile)) + rememberSharedBundlesInfoTimestamp(installArea, outputFile.getParentFile()); + } + + private void rememberSharedBundlesInfoTimestamp(URI installArea, File outputFolder) { + if (installArea == null) + return; + + File sharedBundlesInfo = new File(URIUtil.append(installArea, SHARED_BUNDLES_INFO)); + if (!sharedBundlesInfo.exists()) + return; + + Properties timestampToPersist = new Properties(); + timestampToPersist.put(SimpleConfiguratorImpl.KEY_BUNDLESINFO_TIMESTAMP, Long.toString(sharedBundlesInfo.lastModified())); + OutputStream os = null; + try { + try { + File outputFile = new File(outputFolder, SimpleConfiguratorImpl.BASE_TIMESTAMP_FILE_BUNDLESINFO); + os = new BufferedOutputStream(new FileOutputStream(outputFile)); + timestampToPersist.store(os, "Written by " + this.getClass()); //$NON-NLS-1$ + } finally { + if (os != null) + os.close(); + } + } catch (IOException e) { + return; + } } private org.eclipse.equinox.internal.simpleconfigurator.utils.BundleInfo[] convertBundleInfos(BundleInfo[] configuration, URI installArea) { @@ -402,7 +434,7 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani BundleInfo bundleInfo = configuration[i]; URI location = bundleInfo.getLocation(); if (bundleInfo.getSymbolicName() == null || bundleInfo.getVersion() == null || location == null) - throw new IllegalArgumentException("Cannot persist bundleinfo: " + bundleInfo.toString()); + throw new IllegalArgumentException("Cannot persist bundleinfo: " + bundleInfo.toString()); //$NON-NLS-1$ //only need to make a new BundleInfo if we are changing it. if (installArea != null) location = URIUtil.makeRelative(location, installArea); @@ -492,13 +524,17 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani File configFile = getConfigFile(manipulator); File installArea = ParserUtils.getOSGiInstallArea(Arrays.asList(manipulator.getLauncherData().getProgramArgs()), manipulator.getConfigData().getProperties(), manipulator.getLauncherData()); - BundleInfo[] toInstall = null; - try { - //input stream will be closed for us - toInstall = loadConfiguration(new FileInputStream(configFile), installArea.toURI()); - } catch (FileNotFoundException e) { - //no file, just return an empty list - toInstall = new BundleInfo[0]; + BundleInfo[] toInstall = new BundleInfo[0]; + + boolean isShared = isSharedInstallSetup(installArea, configFile); + if (!isShared || (isShared && !hasBaseChanged(installArea.toURI(), configFile.getParentFile()))) { + try { + //input stream will be closed for us + toInstall = loadConfiguration(new FileInputStream(configFile), installArea.toURI()); + } catch (FileNotFoundException e) { + //no file, just return an empty list + toInstall = new BundleInfo[0]; + } } List toUninstall = new LinkedList(); @@ -538,4 +574,43 @@ public class SimpleConfiguratorManipulatorImpl implements SimpleConfiguratorMani if (outputFile.getParentFile().isDirectory()) outputFile.getParentFile().delete(); } + + private boolean hasBaseChanged(URI installArea, File outputFolder) { + String rememberedTimestamp; + try { + rememberedTimestamp = (String) loadProperties(new File(outputFolder, SimpleConfiguratorImpl.BASE_TIMESTAMP_FILE_BUNDLESINFO)).get(SimpleConfiguratorImpl.KEY_BUNDLESINFO_TIMESTAMP); + } catch (IOException e) { + return false; + } + if (rememberedTimestamp == null) + return false; + + File sharedBundlesInfo = new File(URIUtil.append(installArea, SHARED_BUNDLES_INFO)); + if (!sharedBundlesInfo.exists()) + return true; + return !String.valueOf(sharedBundlesInfo.lastModified()).equals(rememberedTimestamp); + } + + private boolean isSharedInstallSetup(File installArea, File outputFile) { + //An instance is treated as shared if the bundles.info file is not located in the install area. + return !new File(installArea, SHARED_BUNDLES_INFO).equals(outputFile); + } + + private Properties loadProperties(File inputFile) throws FileNotFoundException, IOException { + Properties props = new Properties(); + InputStream is = null; + try { + is = new FileInputStream(inputFile); + props.load(is); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + //Do nothing + } + is = null; + } + return props; + } } |