Author: maartenc Date: Wed Dec 2 21:13:21 2009 New Revision: 886303 URL: http://svn.apache.org/viewvc?rev=886303&view=rev Log: FIX: metadata lock files not always deleted from cache (IVY-1145) (thanks to Jason Trump)
Modified: ant/ivy/core/trunk/CHANGES.txt ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java Modified: ant/ivy/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=886303&r1=886302&r2=886303&view=diff ============================================================================== --- ant/ivy/core/trunk/CHANGES.txt (original) +++ ant/ivy/core/trunk/CHANGES.txt Wed Dec 2 21:13:21 2009 @@ -100,6 +100,7 @@ - IMPROVEMENT: Trace a message when a property file referenced from the settings doesn't exixts (IVY-1074) - IMPROVEMENT: use defaultconf in combination with defaultconfmapping (IVY-1135) (thanks to Jon Schneider) +- FIX: metadata lock files not always deleted from cache (IVY-1145) (thanks to Jason Trump) - FIX: FileSystem resolver with m2compatible=true throws error when publishing modules with dotted organisation names (IVY-968) - FIX: ivy:retrieve sync="true" does nothing if first variable is optional (IVY-1142) (thanks to Andreas Axelsson) - FIX: Latest Compatible Conflict Manager + Extra Attributes in Dependencies' IVY files == infinite loop (IVY-956) 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=886303&r1=886302&r2=886303&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 Wed Dec 2 21:13:21 2009 @@ -881,67 +881,68 @@ Message.error("impossible to acquire lock for " + mrid); return null; } + + BackupResourceDownloader backupDownloader = new BackupResourceDownloader(downloader); + + try { + 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(); - 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; + 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; + } + removeSavedArtifactOrigin(transformedArtifact); } - removeSavedArtifactOrigin(transformedArtifact); } + return null; } - 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; + + // 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 { - 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(); + 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(