### 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.47 diff -u -r1.47 EclipseGeneratorApplication.java --- src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java 30 Mar 2009 01:48:49 -0000 1.47 +++ src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java 15 May 2009 05:05:48 -0000 @@ -10,8 +10,6 @@ *******************************************************************************/ package org.eclipse.equinox.internal.p2.metadata.generator; -import org.eclipse.equinox.internal.provisional.p2.repository.IRepository; - import java.io.File; import java.net.URI; import java.net.URISyntaxException; @@ -33,6 +31,7 @@ import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Generator; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository; import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager; +import org.eclipse.equinox.internal.provisional.p2.repository.IRepository; import org.eclipse.osgi.util.NLS; import org.osgi.framework.ServiceRegistration; @@ -110,8 +109,9 @@ URI location = artifactLocation; 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; @@ -378,6 +378,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.80 diff -u -r1.80 SimpleArtifactRepository.java --- src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 29 Apr 2009 19:48:38 -0000 1.80 +++ src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 15 May 2009 05:05:50 -0000 @@ -211,6 +211,8 @@ private MirrorSelector mirrors; + private boolean disableImplicitSave = false; + static void delete(File toDelete) { if (toDelete.isFile()) { toDelete.delete(); @@ -227,6 +229,11 @@ } } + public void explicitSave() { + boolean compress = "true".equalsIgnoreCase((String) properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ + save(compress); + } + public static URI getActualLocation(URI base, boolean compress) throws IOException { return getActualLocation(base, compress ? JAR_EXTENSION : XML_EXTENSION); } @@ -298,6 +305,7 @@ initializeMapper(); } } + this.disableImplicitSave = Boolean.parseBoolean((String) properties.get(IArtifactRepository.DISABLE_IMPLICIT_SAVE)); } save(); } @@ -877,8 +885,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.9 diff -u -r1.9 IArtifactRepository.java --- src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java 29 Apr 2009 16:18:37 -0000 1.9 +++ src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java 15 May 2009 05:05:51 -0000 @@ -36,6 +36,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 @@ -130,4 +136,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.9 diff -u -r1.9 AbstractArtifactRepository.java --- src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java 29 Apr 2009 16:18:37 -0000 1.9 +++ src/org/eclipse/equinox/internal/provisional/spi/p2/artifact/repository/AbstractArtifactRepository.java 15 May 2009 05:05:51 -0000 @@ -59,6 +59,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;