2 | import Data.List.Quantifiers
4 | import Data.SortedMap
6 | import Pack.CmdLn.Completion
8 | import public Pack.Core
10 | import Pack.Runner.Database
11 | import Pack.Runner.Develop
12 | import Pack.Runner.Query
13 | import Pack.Runner.Install
14 | import Pack.Runner.New
15 | import Pack.Runner.Uninstall
18 | Command ConfiguredCmd where
19 | defaultCommand = PrintHelp
27 | defaultLevel Build = Build
28 | defaultLevel BuildDeps = Build
29 | defaultLevel Typecheck = Build
30 | defaultLevel Clean = Build
31 | defaultLevel CleanBuild = Build
32 | defaultLevel Exec = Warning
33 | defaultLevel New = Build
34 | defaultLevel Repl = Warning
35 | defaultLevel Install = Build
36 | defaultLevel InstallApp = Build
37 | defaultLevel Remove = Build
38 | defaultLevel RemoveApp = Build
39 | defaultLevel Run = Warning
40 | defaultLevel Test = Warning
41 | defaultLevel Update = Build
42 | defaultLevel Fetch = Build
43 | defaultLevel PackagePath = Silence
44 | defaultLevel LibsPath = Silence
45 | defaultLevel DataPath = Silence
46 | defaultLevel AppPath = Silence
47 | defaultLevel Switch = Build
48 | defaultLevel UpdateDB = Build
49 | defaultLevel CollectGarbage = Info
50 | defaultLevel Info = Cache
51 | defaultLevel Query = Cache
52 | defaultLevel Fuzzy = Cache
53 | defaultLevel Completion = Silence
54 | defaultLevel Uninstall = Info
55 | defaultLevel PrintHelp = Silence
59 | ArgTypes Build = [Maybe PkgOrIpkg]
60 | ArgTypes BuildDeps = [Maybe PkgOrIpkg]
61 | ArgTypes Typecheck = [Maybe PkgOrIpkg]
62 | ArgTypes Clean = [Maybe PkgOrIpkg]
63 | ArgTypes CleanBuild = [Maybe PkgOrIpkg]
64 | ArgTypes Repl = [Maybe (File Abs)]
65 | ArgTypes Exec = [File Abs, CmdArgList]
66 | ArgTypes Install = [List PkgName]
67 | ArgTypes InstallApp = [List PkgName]
68 | ArgTypes Remove = [List PkgName]
69 | ArgTypes RemoveApp = [List PkgName]
70 | ArgTypes Run = [Maybe PkgOrIpkg, CmdArgList]
71 | ArgTypes Test = [PkgName, CmdArgList]
72 | ArgTypes New = [PkgType, Body]
73 | ArgTypes Update = []
75 | ArgTypes PackagePath = []
76 | ArgTypes LibsPath = []
77 | ArgTypes DataPath = []
78 | ArgTypes AppPath = [PkgName]
79 | ArgTypes Switch = [DBName]
80 | ArgTypes UpdateDB = []
81 | ArgTypes CollectGarbage = []
83 | ArgTypes Query = [PkgQuery]
84 | ArgTypes Fuzzy = [FuzzyQuery]
85 | ArgTypes Completion = [String, String]
86 | ArgTypes Uninstall = []
87 | ArgTypes PrintHelp = [Maybe Cmd]
89 | readCommand_ n = lookup n namesAndCommands
91 | adjConfig_ (Switch) [db] c = case db == MkDBName "latest" of
93 | latest <- copyLatest
94 | pure $
{collection := latest} c
95 | False => pure $
{collection := db} c
99 | adjConfig_ (Update) [] c = pure $
{safetyPrompt := False} c
100 | adjConfig_ _ _ c = pure c
102 | readArgs Build = %search
103 | readArgs BuildDeps = %search
104 | readArgs Typecheck = %search
105 | readArgs Clean = %search
106 | readArgs CleanBuild = %search
107 | readArgs Repl = %search
108 | readArgs Exec = %search
109 | readArgs Install = %search
110 | readArgs InstallApp = %search
111 | readArgs Remove = %search
112 | readArgs RemoveApp = %search
113 | readArgs Run = %search
114 | readArgs Test = %search
115 | readArgs New = %search
116 | readArgs Update = %search
117 | readArgs Fetch = %search
118 | readArgs PackagePath = %search
119 | readArgs LibsPath = %search
120 | readArgs DataPath = %search
121 | readArgs AppPath = %search
122 | readArgs Switch = %search
123 | readArgs UpdateDB = %search
124 | readArgs CollectGarbage = %search
125 | readArgs Info = %search
126 | readArgs Query = %search
127 | readArgs Fuzzy = %search
128 | readArgs Completion = %search
129 | readArgs Uninstall = %search
130 | readArgs PrintHelp = %search
133 | Command TrivialCmd where
134 | defaultCommand = CompletionScript
142 | defaultLevel (CompletionScript) = Silence
146 | ArgTypes (CompletionScript) = [String]
148 | readCommand_ n = lookup n namesAndCommands
150 | adjConfig_ _ _ c = pure c
152 | readArgs (CompletionScript) = %search
156 | defaultCommand = Configured PrintHelp
164 | defaultLevel (Configured cmd) = defaultLevel cmd
165 | defaultLevel (Trivial cmd) = defaultLevel cmd
167 | desc (Configured cmd) = cmdDesc cmd
168 | desc (Trivial cmd) = cmdDesc cmd
170 | ArgTypes (Configured cmd) = ArgTypes cmd
171 | ArgTypes (Trivial cmd) = ArgTypes cmd
173 | readCommand_ n = lookup n namesAndCommands
175 | adjConfig_ (Configured cmd) args c = adjConfig_ cmd args c
176 | adjConfig_ (Trivial cmd) args c = adjConfig_ cmd args c
178 | readArgs (Configured cmd) = readArgs cmd
179 | readArgs (Trivial cmd) = readArgs cmd
181 | fetchMethod : ConfiguredCmd -> FetchMethod
182 | fetchMethod Fetch = All
183 | fetchMethod _ = MissingOnly
186 | {auto _ : HasIO io}
187 | -> {auto _ : PackDirs}
188 | -> {auto _ : TmpDir}
189 | -> {auto _ : LibCache}
190 | -> {auto _ : LineBufferingCmd}
193 | -> (fetch : FetchMethod)
194 | -> (cmd : CommandWithArgs ConfiguredCmd)
195 | -> EitherT PackErr io ()
196 | runConfiguredCmd cd mc fetch = go
198 | go : (cmd : CommandWithArgs ConfiguredCmd) -> EitherT PackErr io ()
199 | go (
Completion ** [a,b])
= env mc fetch >>= complete a b
200 | go (
Query ** [MkQ m s])
= env mc fetch >>= query m s
201 | go (
Fuzzy ** [MkFQ m s])
= idrisEnv mc fetch >>= fuzzy m s
202 | go (
UpdateDB ** [])
= updateDB
203 | go (
CollectGarbage ** [])
= env mc fetch >>= garbageCollector
204 | go (
Run ** [p,args])
= idrisEnv mc fetch >>= runApp !(refinePkg p) args
205 | go (
Test ** [p,args])
= idrisEnv mc fetch >>= runTest p args
206 | go (
Exec ** [p,args])
= idrisEnv mc fetch >>= exec p args
207 | go (
Repl ** [p])
= idrisEnv mc fetch >>= idrisRepl p
208 | go (
Build ** [p])
= idrisEnv mc fetch >>= build !(refinePkg p)
209 | go (
BuildDeps ** [p])
= idrisEnv mc fetch >>= buildDeps !(refinePkg p)
210 | go (
Typecheck ** [p])
= idrisEnv mc fetch >>= typecheck !(refinePkg p)
211 | go (
Clean ** [p])
= idrisEnv mc fetch >>= clean !(refinePkg p)
212 | go (
CleanBuild ** [p])
= do p <- refinePkg p
213 | e <- idrisEnv mc fetch
214 | clean p e >> build p e
215 | go (
PrintHelp ** [c])
= putStrLn (usageDesc c)
216 | go (
Install ** [ps])
= idrisEnv mc fetch >>= \e => installLibs ps
217 | go (
Remove ** [ps])
= idrisEnv mc fetch >>= \e => removeLibs ps
218 | go (
InstallApp ** [ps])
= idrisEnv mc fetch >>= \e => installApps ps
219 | go (
RemoveApp ** [ps])
= idrisEnv mc fetch >>= \e => removeApps ps
220 | go (
Update ** [])
= idrisEnv mc fetch >>= update
221 | go (
Fetch ** [])
= idrisEnv mc fetch >>= \e => install []
222 | go (
PackagePath ** [])
= env mc fetch >>= packagePathDirs >>= putStrLn . interpolate
223 | go (
LibsPath ** [])
= env mc fetch >>= packageLibDirs >>= putStrLn . interpolate
224 | go (
DataPath ** [])
= env mc fetch >>= packageDataDirs >>= putStrLn . interpolate
225 | go (
AppPath ** [n])
= env mc fetch >>= appPath n
226 | go (
Info ** [])
= env mc fetch >>= printInfo
227 | go (
New ** [pty,p])
= idrisEnv mc fetch >>= new cd pty p
228 | go (
Switch ** [db])
= Prelude.do
229 | let fetch2 := if db == MkDBName "latest" then ClearCommits else fetch
230 | env <- idrisEnv mc fetch2
233 | go (
Uninstall ** [])
= uninstallPack @{metaConfigToLogRef @{mc}}
237 | runCmd : HasIO io => EitherT PackErr io ()
240 | cd <- CD <$> curDir
241 | parsedArgs <- liftEither $
parseOpts Cmd cd args
242 | case parsedArgs.cmd of
243 | (
Trivial CompletionScript ** [f])
=> putStrLn (completionScript f)
244 | (
Configured cmd ** args)
=> do
247 | cache <- emptyCache
248 | mc <- getConfig Cmd parsedArgs
249 | let fetch := fetchMethod cmd
250 | linebuf <- getLineBufferingCmd
251 | runConfiguredCmd cd mc fetch (
cmd ** args)