Adding checksum support
diff --git a/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java b/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
index 1093bb3..e7bb70d 100644
--- a/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
+++ b/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
@@ -14,6 +14,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
+import java.util.zip.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
@@ -51,11 +52,17 @@
DefaultSiteParser siteParser = new DefaultSiteParser();
long start = System.currentTimeMillis();
- InputStream is = new BufferedInputStream(location.openStream());
+ Checksum checksum = new CRC32();
+ InputStream is = new CheckedInputStream(new BufferedInputStream(location.openStream()), checksum);
SiteModel siteModel = siteParser.parse(is);
- System.out.println("Time Fetching Site " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
+ System.out.println("Time Fetching Artifact Site " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
- // For now we will always refresh the contents. We can do a checksum here.
+ String savedChecksum = (String) artifactRepository.getProperties().get("site.checksum");
+ String checksumString = Long.toString(checksum.getValue());
+ if (savedChecksum != null && savedChecksum.equals(checksumString))
+ return;
+
+ artifactRepository.setProperty("site.checksum", checksumString);
artifactRepository.removeAll();
SiteFeature[] siteFeatures = siteModel.getFeatures();
@@ -91,7 +98,7 @@
IArtifactDescriptor[] descriptors = (IArtifactDescriptor[]) allSiteArtifacts.toArray(new IArtifactDescriptor[allSiteArtifacts.size()]);
artifactRepository.addDescriptors(descriptors);
- System.out.println("Time Fetching Site and Features for " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
+ System.out.println("Time Fetching Artifact Site and Features for " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
} catch (IOException e) {
// TODO Auto-generated catch block
diff --git a/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java b/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
index 8842119..0391d53 100644
--- a/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
+++ b/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
@@ -14,6 +14,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
+import java.util.zip.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
import org.eclipse.equinox.internal.p2.metadata.generator.features.*;
@@ -56,11 +57,17 @@
DefaultSiteParser siteParser = new DefaultSiteParser();
long start = System.currentTimeMillis();
- InputStream is = new BufferedInputStream(location.openStream());
+ Checksum checksum = new CRC32();
+ InputStream is = new CheckedInputStream(new BufferedInputStream(location.openStream()), checksum);
SiteModel siteModel = siteParser.parse(is);
- System.out.println("Time Fetching Site " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
+ System.out.println("Time Fetching Metadata Site " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
- // For now we will always refresh the contents. We can do a checksum here.
+ String savedChecksum = (String) metadataRepository.getProperties().get("site.checksum");
+ String checksumString = Long.toString(checksum.getValue());
+ if (savedChecksum != null && savedChecksum.equals(checksumString))
+ return;
+
+ metadataRepository.setProperty("site.checksum", checksumString);
metadataRepository.removeAll();
Map categoryNameToFeatureIUs = new HashMap();
@@ -80,7 +87,6 @@
System.out.println(siteFeature.getFeatureIdentifier());
URL featureURL = new URL(location, siteFeature.getURLString());
Feature feature = parseFeature(featureParser, featureURL);
-
FeatureEntry[] featureEntries = feature.getEntries();
for (int j = 0; j < featureEntries.length; j++) {
FeatureEntry entry = featureEntries[j];
@@ -119,7 +125,7 @@
IInstallableUnit[] ius = (IInstallableUnit[]) allSiteIUs.toArray(new IInstallableUnit[allSiteIUs.size()]);
metadataRepository.addInstallableUnits(ius);
- System.out.println("Time Fetching Site and Features for " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
+ System.out.println("Time Fetching Metadata Site and Features for " + location + " was: " + (System.currentTimeMillis() - start) + " ms");
} catch (IOException e) {
// TODO Auto-generated catch block