invalidate cache when metadata deleted from local repository

This commit is contained in:
Mark Harrah 2012-09-23 15:46:26 -04:00
parent 22cd38ae32
commit 5500d38367
3 changed files with 21 additions and 4 deletions

View File

@ -18,7 +18,7 @@ import core.module.descriptor.{Artifact => IArtifact, DefaultArtifact, DefaultDe
import core.module.descriptor.{DefaultDependencyDescriptor, DefaultModuleDescriptor, DependencyDescriptor, ModuleDescriptor, License}
import core.module.descriptor.{OverrideDependencyDescriptorMediator}
import core.module.id.{ArtifactId,ModuleId, ModuleRevisionId}
import core.resolve.{IvyNode, ResolveData}
import core.resolve.{IvyNode, ResolveData, ResolvedModuleRevision}
import core.settings.IvySettings
import plugins.conflict.{ConflictManager, LatestCompatibleConflictManager, LatestConflictManager}
import plugins.latest.LatestRevisionStrategy
@ -291,8 +291,24 @@ private object IvySbt
{
val cacheDir = settings.getDefaultRepositoryCacheBasedir()
val manager = new DefaultRepositoryCacheManager("default-cache", settings, cacheDir) {
override def findModuleInCache(dd: DependencyDescriptor, revId: ModuleRevisionId, options: CacheMetadataOptions, r: String) =
super.findModuleInCache(dd,revId,options,null)
override def findModuleInCache(dd: DependencyDescriptor, revId: ModuleRevisionId, options: CacheMetadataOptions, r: String) = {
// ignore the resolver- not ideal, but avoids thrashing.
val resolved = super.findModuleInCache(dd,revId,options,null)
// invalidate the cache if the artifact was removed from the local repository
if(resolved == null) null
else {
val origin = resolved.getReport.getArtifactOrigin
if(!origin.isLocal) resolved
else {
val file = new File(origin.getLocation)
if(file == null || file.exists) resolved
else {
resolved.getReport.getLocalFile.delete()
null
}
}
}
}
}
manager.setArtifactPattern(PluginPattern + manager.getArtifactPattern)
manager.setDataFilePattern(PluginPattern + manager.getDataFilePattern)

View File

@ -1,5 +1,5 @@
publishTo <<= baseDirectory(base => Some(Resolver.file("filesys-publish", base / "repo")) )
resolvers <+= baseDirectory(base => Resolver.file("filesys", base / "repo"))
resolvers <+= baseDirectory(base => "filesys" at (base / "repo").toURI.toString)

View File

@ -9,6 +9,7 @@ $ delete resolver.sbt
$ copy-file changes/use.sbt build.sbt
> reload
> update
> update
$ delete target/.ivy2/local
-> update