@@ -23,6 +23,7 @@ import coursier.cache.{CachePolicy, FileCache}
23
23
import coursier .core .{Authentication , Project }
24
24
import coursier .{Fetch , Info , Module , ModuleName , Organization }
25
25
import org .http4s .Uri
26
+ import org .scalasteward .core .application .Config
26
27
import org .scalasteward .core .data .Resolver .Credentials
27
28
import org .scalasteward .core .data .{Dependency , Resolver , Scope , Version }
28
29
import org .scalasteward .core .util .uri
@@ -45,15 +46,29 @@ trait CoursierAlg[F[_]] {
45
46
}
46
47
47
48
object CoursierAlg {
48
- def create [F [_]](implicit
49
+ def create [F [_]](config : Config )( implicit
49
50
logger : Logger [F ],
50
51
parallel : Parallel [F ],
51
- F : Sync [F ]
52
+ F : Sync [F ],
53
+ fetchAlg : CoursierDependenciesFetchAlg [F ]
52
54
): CoursierAlg [F ] = {
53
- val fetch : Fetch [F ] = Fetch [F ](FileCache [F ]())
55
+ val fetch : F [Fetch [F ]] = fetchAlg
56
+ .classLoader(config.coursierDependencies)
57
+ .map { loader =>
58
+ Fetch [F ](
59
+ FileCache [F ]().withClassLoaders(loader :: Nil )
60
+ )
61
+ }
54
62
55
- val cacheNoTtl : FileCache [F ] =
56
- FileCache [F ]().withTtl(None ).withCachePolicies(List (CachePolicy .Update ))
63
+ val cacheNoTtl : F [FileCache [F ]] =
64
+ fetchAlg
65
+ .classLoader(config.coursierDependencies)
66
+ .map { loader =>
67
+ FileCache [F ]()
68
+ .withTtl(None )
69
+ .withCachePolicies(List (CachePolicy .Update ))
70
+ .withClassLoaders(loader :: Nil )
71
+ }
57
72
58
73
new CoursierAlg [F ] {
59
74
override def getArtifactUrl (dependency : Scope .Dependency ): F [Option [Uri ]] =
@@ -63,24 +78,27 @@ object CoursierAlg {
63
78
dependency : coursier.Dependency ,
64
79
repositories : List [coursier.Repository ]
65
80
): F [Option [Uri ]] = {
66
- val fetchArtifacts = fetch
67
- .withArtifactTypes(Set (coursier.Type .pom, coursier.Type .ivy))
68
- .withDependencies(List (dependency))
69
- .withRepositories(repositories)
70
- fetchArtifacts.ioResult.attempt.flatMap {
71
- case Left (throwable) =>
72
- logger.debug(throwable)(s " Failed to fetch artifacts of $dependency" ).as(None )
73
- case Right (result) =>
74
- val maybeProject = result.resolution.projectCache
75
- .get(dependency.moduleVersion)
76
- .map { case (_, project) => project }
77
- maybeProject.traverseFilter { project =>
78
- getScmUrlOrHomePage(project.info) match {
79
- case Some (url) => F .pure(Some (url))
80
- case None =>
81
- getParentDependency(project).traverseFilter(getArtifactUrlImpl(_, repositories))
81
+ val fetchArtifacts = fetch.map(
82
+ _.withArtifactTypes(Set (coursier.Type .pom, coursier.Type .ivy))
83
+ .withDependencies(List (dependency))
84
+ .withRepositories(repositories)
85
+ )
86
+ fetchArtifacts.flatMap {
87
+ _.ioResult.attempt.flatMap {
88
+ case Left (throwable) =>
89
+ logger.debug(throwable)(s " Failed to fetch artifacts of $dependency" ).as(None )
90
+ case Right (result) =>
91
+ val maybeProject = result.resolution.projectCache
92
+ .get(dependency.moduleVersion)
93
+ .map { case (_, project) => project }
94
+ maybeProject.traverseFilter { project =>
95
+ getScmUrlOrHomePage(project.info) match {
96
+ case Some (url) => F .pure(Some (url))
97
+ case None =>
98
+ getParentDependency(project).traverseFilter(getArtifactUrlImpl(_, repositories))
99
+ }
82
100
}
83
- }
101
+ }
84
102
}
85
103
}
86
104
@@ -90,10 +108,12 @@ object CoursierAlg {
90
108
logger.error(message) >> F .raiseError(new Throwable (message))
91
109
case Right (repository) =>
92
110
val module = toCoursierModule(dependency)
93
- repository.versions(module, cacheNoTtl.fetch).run.flatMap {
94
- case Left (message) =>
95
- logger.debug(message) >> F .raiseError(new Throwable (message))
96
- case Right ((versions, _)) => F .pure(versions.available.map(Version .apply).sorted)
111
+ cacheNoTtl.flatMap { cacheNoTtl =>
112
+ repository.versions(module, cacheNoTtl.fetch).run.flatMap {
113
+ case Left (message) =>
114
+ logger.debug(message) >> F .raiseError(new Throwable (message))
115
+ case Right ((versions, _)) => F .pure(versions.available.map(Version .apply).sorted)
116
+ }
97
117
}
98
118
}
99
119
0 commit comments