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.frameworkadmin.equinox | |
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.frameworkadmin.equinox')
3 files changed, 79 insertions, 22 deletions
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java index 7f19233a7..3f7e4ffd8 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 IBM Corporation and others. + * 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 @@ -7,6 +7,8 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Ericsson AB (Pascal Rapicault) - Bug 397216 -[Shared] Better shared + * configuration change discovery *******************************************************************************/ package org.eclipse.equinox.internal.frameworkadmin.equinox; @@ -30,6 +32,9 @@ public class EquinoxFwConfigFileParser { private static final String KEY_ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL = "org.eclipse.equinox.simpleconfigurator.configUrl"; //$NON-NLS-1$ private static final String REFERENCE_SCHEME = "reference:"; //$NON-NLS-1$ private static final String FILE_PROTOCOL = "file:"; //$NON-NLS-1$ + private static final String BASE_TIMESTAMP_FILE_CONFIGINI = ".baseConfigIniTimestamp"; //$NON-NLS-1$ + private static final String KEY_CONFIGINI_TIMESTAMP = "configIniTimestamp"; //$NON-NLS-1$ + private static boolean DEBUG = false; public EquinoxFwConfigFileParser(BundleContext context) { @@ -198,6 +203,7 @@ public class EquinoxFwConfigFileParser { if (inputFile.isDirectory()) throw new IllegalArgumentException(NLS.bind(Messages.exception_inputFileIsDirectory, inputFile)); + boolean baseHasChanged = false; //Initialize data structures ConfigData configData = manipulator.getConfigData(); LauncherData launcherData = manipulator.getLauncherData(); @@ -208,9 +214,15 @@ public class EquinoxFwConfigFileParser { Properties props = loadProperties(inputFile); // load shared configuration properties - Properties sharedConfigProperties = getSharedConfiguration(props.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA), ParserUtils.getOSGiInstallArea(Arrays.asList(manipulator.getLauncherData().getProgramArgs()), props, manipulator.getLauncherData())); + Properties sharedConfigProperties = getSharedConfiguration(ParserUtils.getOSGiInstallArea(Arrays.asList(manipulator.getLauncherData().getProgramArgs()), props, manipulator.getLauncherData()), props.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA)); if (sharedConfigProperties != null) { - sharedConfigProperties.putAll(props); + baseHasChanged = hasBaseChanged(inputFile, manipulator, props); + if (!baseHasChanged) + sharedConfigProperties.putAll(props); + else { + sharedConfigProperties.put(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA, props.get(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA)); + } + props = sharedConfigProperties; } @@ -222,7 +234,9 @@ public class EquinoxFwConfigFileParser { //readLauncherPath(props, rootURI); readp2DataArea(props, configArea); readSimpleConfiguratorURL(props, configArea); - readBundlesList(manipulator, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), props, launcherData).toURI(), props); + + if (!baseHasChanged) + readBundlesList(manipulator, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), props, launcherData).toURI(), props); readInitialStartLeve(configData, props); readDefaultStartLevel(configData, props); @@ -236,6 +250,21 @@ public class EquinoxFwConfigFileParser { Log.log(LogService.LOG_INFO, NLS.bind(Messages.log_configFile, inputFile.getAbsolutePath())); } + private boolean hasBaseChanged(File configIni, Manipulator manipulator, Properties configProps) { + LauncherData launcherData = manipulator.getLauncherData(); + File sharedConfigIni = findSharedConfigIniFile(ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData), configProps.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA)); + File timestampFile = new File(configIni.getParentFile(), BASE_TIMESTAMP_FILE_CONFIGINI); + Properties timestamps; + try { + timestamps = loadProperties(timestampFile); + } catch (FileNotFoundException e) { + return false; + } catch (IOException e) { + return false; + } + return !String.valueOf(sharedConfigIni.lastModified()).equals(timestamps.getProperty(KEY_CONFIGINI_TIMESTAMP)); + } + private void readDefaultStartLevel(ConfigData configData, Properties props) { if (props.getProperty(EquinoxConstants.PROP_BUNDLES_STARTLEVEL) != null) configData.setInitialBundleStartLevel(Integer.parseInt(props.getProperty(EquinoxConstants.PROP_BUNDLES_STARTLEVEL))); @@ -293,7 +322,8 @@ public class EquinoxFwConfigFileParser { props.load(is); } finally { try { - is.close(); + if (is != null) + is.close(); } catch (IOException e) { Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_failed_reading_properties, inputFile)); } @@ -302,7 +332,18 @@ public class EquinoxFwConfigFileParser { return props; } - private File findSharedConfigIniFile(URL rootURL, String sharedConfigurationArea) { + private File findSharedConfigIniFile(File base, String sharedConfigurationArea) { + if (base == null) + return null; + URL rootURL; + try { + rootURL = base.toURL(); + } catch (MalformedURLException e1) { + return null; + } + if (rootURL == null) + return null; + URL sharedConfigurationURL = null; try { sharedConfigurationURL = new URL(sharedConfigurationArea); @@ -415,7 +456,6 @@ public class EquinoxFwConfigFileParser { outputFile = new File(outputFile, EquinoxConstants.CONFIG_INI); } } - String header = "This configuration file was written by: " + this.getClass().getName(); //$NON-NLS-1$ Properties configProps = new Properties(); //URI rootURI = launcherData.getLauncher() != null ? launcherData.getLauncher().getParentFile().toURI() : null; @@ -459,13 +499,18 @@ public class EquinoxFwConfigFileParser { Log.log(LogService.LOG_INFO, this, "saveFwConfig()", NLS.bind(Messages.log_renameSuccessful, outputFile, dest)); //$NON-NLS-1$ } + filterPropertiesFromSharedArea(configProps, manipulator); + saveProperties(outputFile, configProps); + rememberSharedConfigurationTimestamp(configProps, manipulator, outputFile.getParentFile()); + } + + private void saveProperties(File outputFile, Properties configProps) throws IOException { + String header = "This configuration file was written by: " + this.getClass().getName(); //$NON-NLS-1$ FileOutputStream out = null; try { out = new FileOutputStream(outputFile); - // configProps = makeRelative(configProps, launcherData.getLauncher().getParentFile().toURI(), fwJar, outputFile.getParentFile(), getOSGiInstallArea(manipulator.getLauncherData())); - filterPropertiesFromSharedArea(configProps, manipulator); configProps.store(out, header); - Log.log(LogService.LOG_INFO, NLS.bind(Messages.log_fwConfigSave, outputFile)); + Log.log(LogService.LOG_INFO, NLS.bind(Messages.log_propertiesSaved, outputFile)); } finally { try { out.flush(); @@ -473,14 +518,13 @@ public class EquinoxFwConfigFileParser { } catch (IOException e) { e.printStackTrace(); } - out = null; } } private void filterPropertiesFromSharedArea(Properties configProps, Manipulator manipulator) { LauncherData launcherData = manipulator.getLauncherData(); //Remove from the config file that we are about to write the properties that are unchanged compared to what is in the base - Properties sharedConfigProperties = getSharedConfiguration(configProps.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA), ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData)); + Properties sharedConfigProperties = getSharedConfiguration(ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData), configProps.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA)); if (sharedConfigProperties == null) return; Enumeration keys = configProps.propertyNames(); @@ -549,16 +593,28 @@ public class EquinoxFwConfigFileParser { } } - private Properties getSharedConfiguration(String sharedConfigurationArea, File baseFile) { - if (sharedConfigurationArea == null) - return null; - File sharedConfigIni; + private void rememberSharedConfigurationTimestamp(Properties configProps, Manipulator manipulator, File folder) throws IOException { + LauncherData launcherData = manipulator.getLauncherData(); + //Remove from the config file that we are about to write the properties that are unchanged compared to what is in the base + File sharedConfigIni = findSharedConfigIniFile(ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData), configProps.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA)); + if (sharedConfigIni == null) + return; + File timestampFile = new File(folder, BASE_TIMESTAMP_FILE_CONFIGINI); + Properties timestamps; try { - sharedConfigIni = findSharedConfigIniFile(baseFile.toURL(), sharedConfigurationArea); - } catch (MalformedURLException e) { - return null; + timestamps = loadProperties(timestampFile); + } catch (IOException e) { + timestamps = new Properties(); } - if (sharedConfigIni != null && sharedConfigIni.exists()) + timestamps.setProperty(KEY_CONFIGINI_TIMESTAMP, String.valueOf(sharedConfigIni.lastModified())); + saveProperties(timestampFile, timestamps); + } + + private Properties getSharedConfiguration(File baseFile, String sharedConfigurationArea) { + if (sharedConfigurationArea == null) + return null; + File sharedConfigIni = findSharedConfigIniFile(baseFile, sharedConfigurationArea); + if (sharedConfigIni != null && sharedConfigIni.exists()) { try { return loadProperties(sharedConfigIni); } catch (FileNotFoundException e) { @@ -566,6 +622,7 @@ public class EquinoxFwConfigFileParser { } catch (IOException e) { return null; } + } return null; } } diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java index 2453f7ba3..66920c277 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java @@ -31,7 +31,7 @@ public class Messages extends NLS { public static String log_configFile; public static String log_configProps; public static String log_renameSuccessful; - public static String log_fwConfigSave; + public static String log_propertiesSaved; public static String log_launcherConfigSave; public static String log_shared_config_url; public static String log_shared_config_relative_url; diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties index a5d0d5083..3c84f4dcd 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties @@ -26,7 +26,7 @@ exception_errorReadingFile = An error occured while reading {0}. log_configFile= Configuration file ({0}) has been read successfully. log_configProps= Configuration properties is empty. log_renameSuccessful= Successfully renamed {0} to {1}. -log_fwConfigSave= Framework Configuration was saved successfully in {0}. +log_propertiesSaved= File {0} was saved successfully. log_launcherConfigSave= Launcher Configuration was saved successfully in {0}. log_shared_config_url=Failed creating shared configuration url for {0}. log_shared_config_relative_url=Failed creating shared configuration url for root: {0} and sharedConfiguration: {1}. |