-
Notifications
You must be signed in to change notification settings - Fork 0
/
project.clj
91 lines (71 loc) · 2.75 KB
/
project.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
(ns ^{:author "Jeremy Schoffen"
:doc "
Default config pertaining to general project value.
"}fr.jeremyschoffen.mbt.alpha.default.config.project
(:require
[clojure.string :as string]
[fr.jeremyschoffen.java.nio.alpha.file :as fs]
[fr.jeremyschoffen.mbt.alpha.core :as mbt-core]
[fr.jeremyschoffen.mbt.alpha.default.specs]
[fr.jeremyschoffen.mbt.alpha.default.config.impl :as impl]
[fr.jeremyschoffen.mbt.alpha.utils :as u]))
(u/pseudo-nss
project
project.deps
versioning)
(def working-dir
"Default working dir is the current user dir."
(constantly (u/safer-path)))
(u/spec-op working-dir
:ret ::project/working-dir)
(defn output-dir
"Default output dir \"working-dir/target\""
[{wd ::project/working-dir}]
(u/safer-path wd "target"))
(u/spec-op output-dir
:param {}
:ret ::project/output-dir)
(defn project-author
"User name."
[& _]
(System/getProperty "user.name"))
(u/spec-op project-author
:ret ::project/author)
(defn project-name
"Based on git prefix if there is one, if not name of the git top-level"
[param]
(let [prefix (mbt-core/git-prefix param)
top-level (mbt-core/git-top-level param)]
(if-not (-> prefix str seq)
(-> top-level fs/file-name str)
(->> prefix
(map str)
(string/join "-")))))
(u/spec-op project-name
:deps [mbt-core/git-prefix]
:param {:req [::project/working-dir]}
:ret ::project/name)
;;----------------------------------------------------------------------------------------------------------------------
;; Deps
;;----------------------------------------------------------------------------------------------------------------------
(defn deps-file
"Default location of the `deps.edn` file base on `:...mbt.alpha.project/working-dir`."
[{wd ::project/working-dir}]
(u/safer-path wd "deps.edn"))
(u/spec-op deps-file
:param {:req [::project/working-dir]}
:ret ::project.deps/file)
(defn get-deps [conf]
"Get the project's deps and merge into it the maven repos found in user and system deps."
(assoc (mbt-core/deps-get conf)
:mvn/repos (:mvn/repos (mbt-core/deps-get-all conf))))
(u/spec-op get-deps
:deps [mbt-core/deps-get mbt-core/deps-get-all]
:param {:req [::project.deps/file]}
:ret ::project/deps)
(def conf {::project/working-dir (impl/calc working-dir)
::project/output-dir (impl/calc output-dir ::project/working-dir)
::project/author (impl/calc project-author)
::project/name (impl/calc project-name ::project/working-dir)
::project.deps/file (impl/calc deps-file ::project/working-dir)
::project/deps (impl/calc get-deps ::project.deps/file)})