@@ -23,6 +23,7 @@ import coursier.cache.{CachePolicy, FileCache}
2323import coursier .core .{Authentication , Project }
2424import coursier .{Fetch , Info , Module , ModuleName , Organization }
2525import org .http4s .Uri
26+ import org .scalasteward .core .application .Config
2627import org .scalasteward .core .data .Resolver .Credentials
2728import org .scalasteward .core .data .{Dependency , Resolver , Scope , Version }
2829import org .scalasteward .core .util .uri
@@ -45,15 +46,29 @@ trait CoursierAlg[F[_]] {
4546}
4647
4748object CoursierAlg {
48- def create [F [_]](implicit
49+ def create [F [_]](config : Config )( implicit
4950 logger : Logger [F ],
5051 parallel : Parallel [F ],
51- F : Sync [F ]
52+ F : Sync [F ],
53+ fetchAlg : CoursierDependenciesFetchAlg [F ]
5254 ): 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+ }
5462
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+ }
5772
5873 new CoursierAlg [F ] {
5974 override def getArtifactUrl (dependency : Scope .Dependency ): F [Option [Uri ]] =
@@ -63,24 +78,27 @@ object CoursierAlg {
6378 dependency : coursier.Dependency ,
6479 repositories : List [coursier.Repository ]
6580 ): 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+ }
82100 }
83- }
101+ }
84102 }
85103 }
86104
@@ -90,10 +108,12 @@ object CoursierAlg {
90108 logger.error(message) >> F .raiseError(new Throwable (message))
91109 case Right (repository) =>
92110 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+ }
97117 }
98118 }
99119
0 commit comments