Author: maartenc Date: Tue Aug 18 10:14:50 2009 New Revision: 805346 URL: http://svn.apache.org/viewvc?rev=805346&view=rev Log: FIX: Fixed name snapshots are not updated even if they are marked as changing and the publication date is changed in repo (IVY-938)
Modified: ant/ivy/core/trunk/CHANGES.txt ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java Modified: ant/ivy/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=805346&r1=805345&r2=805346&view=diff ============================================================================== --- ant/ivy/core/trunk/CHANGES.txt (original) +++ ant/ivy/core/trunk/CHANGES.txt Tue Aug 18 10:14:50 2009 @@ -95,6 +95,7 @@ - FIX: Excessive hits to missing URLs uses up all ports on Windows (IVY-1105) - FIX: ivy parse exception when using <publications defaultconf> (IVY-1102) - FIX: Change org.apache to commons-cli at jdbc-example (IVY-1109) +- FIX: Fixed name snapshots are not updated even if they are marked as changing and the publication date is changed in repo (IVY-938) 2.1.0-rc2 ===================================== Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java?rev=805346&r1=805345&r2=805346&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java Tue Aug 18 10:14:50 2009 @@ -874,52 +874,75 @@ DependencyResolver resolver, final ResolvedResource mdRef, DependencyDescriptor dd, Artifact moduleArtifact, ResourceDownloader downloader, CacheMetadataOptions options) throws ParseException { - ModuleDescriptorParser parser = ModuleDescriptorParserRegistry - .getInstance().getParser(mdRef.getResource()); Date cachedPublicationDate = null; ArtifactDownloadReport report; ModuleRevisionId mrid = moduleArtifact.getModuleRevisionId(); - Artifact originalMetadataArtifact = getOriginalMetadataArtifact(moduleArtifact); if (!lockMetadataArtifact(mrid)) { Message.error("impossible to acquire lock for " + mrid); return null; } - BackupResourceDownloader backupDownloader = new BackupResourceDownloader(downloader); - try { - // now let's see if we can find it in cache and if it is up to date - ResolvedModuleRevision rmr = doFindModuleInCache(mrid, options, null); - if (rmr != null) { - if (rmr.getDescriptor().isDefault() && rmr.getResolver() != resolver) { - Message.verbose("\t" + getName() + ": found revision in cache: " + mrid - + " (resolved by " + rmr.getResolver().getName() - + "): but it's a default one, maybe we can find a better one"); - } else { - if (!isCheckmodified(dd, mrid, options) && !isChanging(dd, mrid, options)) { - Message.verbose("\t" + getName() + ": revision in cache: " + mrid); - rmr.getReport().setSearched(true); - return rmr; + + if (!moduleArtifact.isMetadata()) { + // the descriptor we are trying to cache is a default one, not much to do + // just make sure the old artifacts are deleted... + if (isChanging(dd, mrid, options)) { + long repoLastModified = mdRef.getLastModified(); + + Artifact transformedArtifact = NameSpaceHelper.transform( + moduleArtifact, options.getNamespace().getToSystemTransformer()); + ArtifactOrigin origin = getSavedArtifactOrigin(transformedArtifact); + File artFile = getArchiveFileInCache(transformedArtifact, origin, false); + if (artFile.exists() && repoLastModified > artFile.lastModified()) { + // artifacts have changed, they should be downloaded again + Message.verbose(mrid + " has changed: deleting old artifacts"); + Message.debug("deleting " + artFile); + if (!artFile.delete()) { + Message.error("Couldn't delete outdated artifact from cache: " + artFile); + return null; } - long repLastModified = mdRef.getLastModified(); - long cacheLastModified = rmr.getDescriptor().getLastModified(); - if (!rmr.getDescriptor().isDefault() && repLastModified <= cacheLastModified) { - Message.verbose("\t" + getName() + ": revision in cache (not updated): " - + mrid); - rmr.getReport().setSearched(true); - return rmr; - } else { - Message.verbose("\t" + getName() + ": revision in cache is not up to date: " - + mrid); - if (isChanging(dd, mrid, options)) { - // ivy file has been updated, we should see if it has a new publication - // date to see if a new download is required (in case the dependency is - // a changing one) - cachedPublicationDate = - rmr.getDescriptor().getResolvedPublicationDate(); - } + removeSavedArtifactOrigin(transformedArtifact); + } + } + return null; + } + + // now let's see if we can find it in cache and if it is up to date + ResolvedModuleRevision rmr = doFindModuleInCache(mrid, options, null); + if (rmr != null) { + if (rmr.getDescriptor().isDefault() && rmr.getResolver() != resolver) { + Message.verbose("\t" + getName() + ": found revision in cache: " + mrid + + " (resolved by " + rmr.getResolver().getName() + + "): but it's a default one, maybe we can find a better one"); + } else { + if (!isCheckmodified(dd, mrid, options) && !isChanging(dd, mrid, options)) { + Message.verbose("\t" + getName() + ": revision in cache: " + mrid); + rmr.getReport().setSearched(true); + return rmr; + } + long repLastModified = mdRef.getLastModified(); + long cacheLastModified = rmr.getDescriptor().getLastModified(); + if (!rmr.getDescriptor().isDefault() && repLastModified <= cacheLastModified) { + Message.verbose("\t" + getName() + ": revision in cache (not updated): " + + mrid); + rmr.getReport().setSearched(true); + return rmr; + } else { + Message.verbose("\t" + getName() + ": revision in cache is not up to date: " + + mrid); + if (isChanging(dd, mrid, options)) { + // ivy file has been updated, we should see if it has a new publication + // date to see if a new download is required (in case the dependency is + // a changing one) + cachedPublicationDate = + rmr.getDescriptor().getResolvedPublicationDate(); } } } - + } + + BackupResourceDownloader backupDownloader = new BackupResourceDownloader(downloader); + try { + Artifact originalMetadataArtifact = getOriginalMetadataArtifact(moduleArtifact); // now download module descriptor and parse it report = download( originalMetadataArtifact, @@ -939,6 +962,8 @@ } try { + ModuleDescriptorParser parser = ModuleDescriptorParserRegistry + .getInstance().getParser(mdRef.getResource()); ModuleDescriptor md = getStaledMd(parser, options, report.getLocalFile()); if (md == null) { throw new IllegalStateException( Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java?rev=805346&r1=805345&r2=805346&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java Tue Aug 18 10:14:50 2009 @@ -254,6 +254,8 @@ madr.setDownloadStatus(DownloadStatus.NO); madr.setSearched(true); rmr = new ResolvedModuleRevision(this, this, systemMd, madr, isForce()); + getRepositoryCacheManager().cacheModuleDescriptor(this, artifactRef, toSystem(dd), + systemMd.getAllArtifacts()[0], null, getCacheOptions(data)); } } else { if (ivyRef instanceof MDResolvedResource) {