diff --git a/ivy/Ivy.scala b/ivy/Ivy.scala index c6fd24422..0a7e07882 100644 --- a/ivy/Ivy.scala +++ b/ivy/Ivy.scala @@ -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) diff --git a/sbt/src/sbt-test/dependency-management/cache-local/changes/resolver.sbt b/sbt/src/sbt-test/dependency-management/cache-local/changes/resolver.sbt index 41e3eaa85..eb623beca 100644 --- a/sbt/src/sbt-test/dependency-management/cache-local/changes/resolver.sbt +++ b/sbt/src/sbt-test/dependency-management/cache-local/changes/resolver.sbt @@ -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) diff --git a/sbt/src/sbt-test/dependency-management/cache-local/pending b/sbt/src/sbt-test/dependency-management/cache-local/test similarity index 97% rename from sbt/src/sbt-test/dependency-management/cache-local/pending rename to sbt/src/sbt-test/dependency-management/cache-local/test index 6d4a277dc..6b4e5c9f4 100644 --- a/sbt/src/sbt-test/dependency-management/cache-local/pending +++ b/sbt/src/sbt-test/dependency-management/cache-local/test @@ -9,6 +9,7 @@ $ delete resolver.sbt $ copy-file changes/use.sbt build.sbt > reload > update +> update $ delete target/.ivy2/local -> update