(.require [library [lux (.except) [abstract [monad (.only do)]] [control ["[0]" exception] [concurrency ["[0]" async (.only Async)]]] [data [collection ["[0]" set (.only Set)] ["[0]" list (.use "[1]#[0]" mix)] ["[0]" dictionary]] [text ["%" \\format]]] [world [net (.only URL)] ["[0]" file] ["[0]" console (.only Console)]]]] ["[0]" // ["[1][0]" clean] ["/[1]" // [command (.only Command)] [repository (.only Repository)] ["[1]" profile] ["[1][0]" action (.only Action)] ["[1][0]" artifact (.only Artifact)] ["[1][0]" dependency (.only Dependency) ["[1]/[0]" resolution (.only Resolution)] ["[1]/[0]" deployment]]]]) (def format (%.Format Dependency) (|>> (the ///dependency.#artifact) ///artifact.format %.text)) (def .public (do! console local remotes new_repository profile) (-> (Console Async) (Repository Async) (List (Repository Async)) (-> URL (Repository Async)) (Command Resolution)) (do async.monad [.let [dependencies (|> (the ///.#dependencies profile) set.list {.#Item (the ///.#lux profile)})] [local_successes local_failures cache] (///dependency/resolution.all console (list local) new_repository dependencies ///dependency/resolution.empty) [remote_successes remote_failures resolution] (///dependency/resolution.all console remotes new_repository dependencies cache)] (do ///action.monad [cached (|> (dictionary.keys cache) (list#mix dictionary.lacks resolution) (///dependency/deployment.all local)) _ (console.write_line (exception.report (list ["Local successes" (|> local_successes (list.sorted (of ///dependency.order <)) (exception.listing ..format))] ["Local failures" (|> local_failures (list.sorted (of ///dependency.order <)) (exception.listing ..format))] ["Remote successes" (|> remote_successes (set.of_list ///dependency.hash) (set.difference (set.of_list ///dependency.hash local_successes)) set.list (list.sorted (of ///dependency.order <)) (exception.listing ..format))] ["Remote failures" (|> remote_failures (list.sorted (of ///dependency.order <)) (exception.listing ..format))])) console)] (in resolution))))