@@ -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