### Eclipse Workspace Patch 1.0 #P org.eclipse.equinox.p2.metadata.generator Index: src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java,v retrieving revision 1.42.2.1 diff -u -r1.42.2.1 EclipseGeneratorApplication.java --- src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java 9 Jul 2008 20:54:01 -0000 1.42.2.1 +++ src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java 15 May 2009 04:57:52 -0000 @@ -113,8 +113,9 @@ } String repositoryName = (artifactRepoName != null && artifactRepoName.length() > 0) ? artifactRepoName : artifactLocation + " - artifacts"; //$NON-NLS-1$ - Map properties = new HashMap(1); + Map properties = new HashMap(5); properties.put(IRepository.PROP_COMPRESSED, compress); + properties.put(IArtifactRepository.DISABLE_IMPLICIT_SAVE, "true"); //$NON-NLS-1$ if (provider.reuseExistingPack200Files()) properties.put(PUBLISH_PACK_FILES_AS_SIBLINGS, Boolean.TRUE.toString()); IArtifactRepository result = null; @@ -385,6 +386,7 @@ generator.setIncrementalResult(incrementalResult); generator.setGenerateRootIU(generateRootIU); IStatus result = generator.generate(); + provider.getArtifactRepository().explicitSave(); incrementalResult = null; return result; } #P org.eclipse.equinox.p2.artifact.repository Index: src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java,v retrieving revision 1.60.2.1 diff -u -r1.60.2.1 SimpleArtifactRepository.java --- src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 6 Aug 2008 20:12:24 -0000 1.60.2.1 +++ src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 15 May 2009 04:57:53 -0000 @@ -200,6 +200,8 @@ private MirrorSelector mirrors; + private boolean disableImplicitSave = false; + static void delete(File toDelete) { if (toDelete.isFile()) { toDelete.delete(); @@ -216,6 +218,11 @@ } } + public void explicitSave() { + boolean compress = "true".equalsIgnoreCase((String) properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ + save(compress); + } + public static URL getActualLocation(URL base, boolean compress) { return getActualLocation(base, compress ? JAR_EXTENSION : XML_EXTENSION); } @@ -296,6 +303,7 @@ initializeMapper(); } } + this.disableImplicitSave = Boolean.parseBoolean((String) properties.get(IArtifactRepository.DISABLE_IMPLICIT_SAVE)); save(); } } @@ -829,8 +837,8 @@ } public void save() { - boolean compress = "true".equalsIgnoreCase((String) properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ - save(compress); + if (!disableImplicitSave) + explicitSave(); } public void save(boolean compress) { Index: src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java,v retrieving revision 1.4 diff -u -r1.4 IArtifactRepository.java --- src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java 4 Jun 2008 18:53:13 -0000 1.4 +++ src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java 15 May 2009 04:57:54 -0000 @@ -35,6 +35,12 @@ public static int CODE_RETRY = 13; /** + * Setting this property to true tells the repository that it shouldn't + * save changes unless requested via the explicitSave() method. + */ + public static final String DISABLE_IMPLICIT_SAVE = "p2.disable.implicit.save"; //$NON-NLS-1$ + + /** * Add the given descriptor to the set of descriptors in this repository. This is * a relatively low-level operation that should be used only when the actual related * content is in this repository and the given descriptor accurately describes @@ -124,4 +130,10 @@ */ public void removeDescriptor(IArtifactKey key); + /** + * Save any outstanding changes. If DISABLE_IMPLICIT_SAVE is not configured for this repository, + * this may be a no-op. + */ + public void explicitSave(); + } Index: src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java,v retrieving revision 1.4 diff -u -r1.4 AbstractArtifactRepository.java --- src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java 21 Apr 2008 17:24:53 -0000 1.4 +++ src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java 15 May 2009 04:57:54 -0000 @@ -67,6 +67,12 @@ assertModifiable(); } + public void explicitSave() { + // Subclasses which implement DISABLE_IMPLICIT_SAVE must override to save at this point. + // Other repositories needn't do anything, since implicit saves will happen when + // anything changes. + } + public boolean equals(Object o) { if (this == o) { return true;