Skip to content

Instantly share code, notes, and snippets.

@eed3si9n
Created August 23, 2014 09:35
Show Gist options
  • Save eed3si9n/d79971be70fbaf56085b to your computer and use it in GitHub Desktop.
Save eed3si9n/d79971be70fbaf56085b to your computer and use it in GitHub Desktop.
diff --git a/ivy/src/main/scala/sbt/Ivy.scala b/ivy/src/main/scala/sbt/Ivy.scala
index b890820..9e5bddb 100644
--- a/ivy/src/main/scala/sbt/Ivy.scala
+++ b/ivy/src/main/scala/sbt/Ivy.scala
@@ -269,8 +269,10 @@ private object IvySbt {
val mainChain = makeChain("Default", "sbt-chain", resolvers)
settings.setDefaultResolver(mainChain.getName)
}
- private[sbt] def isChanging(mrid: ModuleRevisionId): Boolean =
- mrid.getRevision endsWith "-SNAPSHOT"
+ // A changing modules are excluded from local Ivy cache, which is normally good,
+ // not helpful when you're going offline.
+ private[sbt] def isChanging(mrid: ModuleRevisionId, localOnly: Boolean): Boolean =
+ (mrid.getRevision endsWith "-SNAPSHOT") && !localOnly
def resolverChain(name: String, resolvers: Seq[Resolver], localOnly: Boolean, settings: IvySettings, log: Logger): DependencyResolver =
resolverChain(name, resolvers, localOnly, settings, UpdateOptions(), log)
def resolverChain(name: String, resolvers: Seq[Resolver], localOnly: Boolean, settings: IvySettings, updateOptions: UpdateOptions, log: Logger): DependencyResolver =
@@ -306,7 +308,7 @@ private object IvySbt {
// and if a previously resolved or cached revision has been found.
def doGetDependency(dd: DependencyDescriptor, data0: ResolveData): ResolvedModuleRevision =
{
- val useLatest = (dd.isChanging || (isChanging(dd.getDependencyRevisionId))) && updateOptions.latestSnapshots
+ val useLatest = !localOnly && (dd.isChanging || (isChanging(dd.getDependencyRevisionId, localOnly))) && updateOptions.latestSnapshots
if (useLatest) {
Message.verbose(s"${getName} is changing. Checking all resolvers on the chain")
}
@@ -315,9 +317,13 @@ private object IvySbt {
val resolvedOrCached =
resolved orElse {
Message.verbose(getName + ": Checking cache for: " + dd)
- Option(findModuleInCache(dd, data, true)) map { mr =>
- Message.verbose(getName + ": module revision found in cache: " + mr.getId)
- forcedRevision(mr)
+ Option(findModuleInCache(dd, data, true)) match {
+ case Some(mr) =>
+ Message.verbose(getName + ": module revision found in cache: " + mr.getId)
+ Some(forcedRevision(mr))
+ case None =>
+ Message.verbose(getName + ": module revision was not found in cache")
+ None
}
}
var temp: Option[ResolvedModuleRevision] =
@@ -542,6 +548,7 @@ 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) = {
+ Message.debug(s"findModuleInCache: $revId dd.isChanging: ${dd.isChanging}")
// ignore and reset the resolver- not ideal, but avoids thrashing.
val resolved = resetArtifactResolver(super.findModuleInCache(dd, revId, options, null))
// invalidate the cache if the artifact was removed from the local repository
@@ -711,9 +718,11 @@ private object IvySbt {
parser.parse()
parser
}
-
+ @deprecated("Will be made private.", "0.13.6")
+ def addDependencies(moduleID: DefaultModuleDescriptor, dependencies: Seq[ModuleID], parser: CustomXmlParser.CustomParser): Unit =
+ addDependencies(moduleID, dependencies, parser, false)
/** This method is used to add inline dependencies to the provided module. */
- def addDependencies(moduleID: DefaultModuleDescriptor, dependencies: Seq[ModuleID], parser: CustomXmlParser.CustomParser) {
+ def addDependencies(moduleID: DefaultModuleDescriptor, dependencies: Seq[ModuleID], parser: CustomXmlParser.CustomParser, localOnly: Boolean): Unit = {
val converted = dependencies map { dependency => convertDependency(moduleID, dependency, parser) }
val unique = if (hasDuplicateDependencies(converted)) mergeDuplicateDefinitions(converted) else converted
unique foreach moduleID.addDependency
@@ -755,10 +764,13 @@ private object IvySbt {
}
}
- /** Transforms an sbt ModuleID into an Ivy DefaultDependencyDescriptor.*/
+ @deprecated("Will be made private.", "0.13.6")
def convertDependency(moduleID: DefaultModuleDescriptor, dependency: ModuleID, parser: CustomXmlParser.CustomParser): DefaultDependencyDescriptor =
+ convertDependency(moduleID, dependency, parser, false)
+ /** Transforms an sbt ModuleID into an Ivy DefaultDependencyDescriptor.*/
+ private[sbt] def convertDependency(moduleID: DefaultModuleDescriptor, dependency: ModuleID, parser: CustomXmlParser.CustomParser, localOnly: Boolean): DefaultDependencyDescriptor =
{
- val dependencyDescriptor = new DefaultDependencyDescriptor(moduleID, toID(dependency), dependency.isForce, dependency.isChanging, dependency.isTransitive)
+ val dependencyDescriptor = new DefaultDependencyDescriptor(moduleID, toID(dependency), dependency.isForce, dependency.isChanging && !localOnly, dependency.isTransitive)
dependency.configurations match {
case None => // The configuration for this dependency was not explicitly specified, so use the default
parser.parseDepsConfs(parser.getDefaultConf, dependencyDescriptor)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment