changeset 319: | c5956756f9e5 |
parent: | 1f14280be401 |
child: | 3e3cce6ed1f0 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Wed, 08 May 2024 23:11:35 -0400 |
permissions: | -rw-r--r-- |
description: | skel show |
96 | 1 | ;;; Code: |
2 | (uiop:define-package :bin/skel |
|
289
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
3 | (:use :cl :std :cli/clap :vc :sb-ext) |
285 | 4 | (:use-reexport :skel :log) |
96 | 5 | (:export :main)) |
6 | ||
7 | (in-package :bin/skel) |
|
281
1c6e8353a855
abolish nu build makefiles
Richard Westhaver <ellis@rwest.io>
parents:
231
diff
changeset
|
8 | (in-readtable :shell) |
311 | 9 | |
96 | 10 | (defopt skc-help (print-help $cli)) |
11 | (defopt skc-version (print-version $cli)) |
|
319 | 12 | (defopt skc-level *log-level* (setq *log-level* (or $val :info))) |
284
597f34d43df7
x.lisp upgrades, skel upgrades, worked on shell reader macros
Richard Westhaver <ellis@rwest.io>
parents:
281
diff
changeset
|
13 | |
96 | 14 | ;; TODO 2023-10-13: almost there |
319 | 15 | (defopt skc-config |
16 | (init-user-skelrc (when $val (parse-file-opt $val)))) |
|
96 | 17 | |
311 | 18 | (defcmd skc-edit |
19 | (let ((file (or (when $args (pop $args)) (find-skelfile #P".")))) |
|
20 | (cli/ed:run-emacsclient (namestring file)))) |
|
21 | |
|
96 | 22 | (defcmd skc-init |
289
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
23 | (let ((file (when $args (pop $args))) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
24 | (name (if (> $argc 1) (pop $args)))) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
25 | (handler-bind |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
26 | ((sb-ext:file-exists |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
27 | #'(lambda (s) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
28 | (uiop:println (format nil "file already exists: ~A" (or file *default-skelfile*))) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
29 | (let ((f2 (read-line))) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
30 | (if (string= f2 "") |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
31 | (error s) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
32 | (use-value f2 s)))))) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
33 | (init-skelfile file name)))) |
96 | 34 | |
35 | (defcmd skc-describe |
|
311 | 36 | (describe |
289
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
37 | (find-skelfile |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
38 | (if $args (pathname (car $args)) |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
39 | #P".") |
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
40 | :load t))) |
96 | 41 | |
42 | (defcmd skc-inspect |
|
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
43 | (sb-ext:enable-debugger) |
285 | 44 | (inspect |
45 | (find-skelfile |
|
46 | (if $args (pathname (car $args)) |
|
47 | #P".") |
|
48 | :load t))) |
|
96 | 49 | |
311 | 50 | (defcmd skc-id |
51 | (println (std:format-sxhash (obj/id:id (find-skelfile #P"." :load t))))) |
|
52 | ||
319 | 53 | (defun skc-show-case (sel) |
54 | (std/string:string-case (sel :default (nyi!)) |
|
55 | (":id" (std:format-sxhash (obj/id:id (find-skelfile #P"." :load t)))) |
|
56 | (":config" (if (probe-file *user-skelrc*) |
|
57 | (describe (load-user-skelrc) t) |
|
58 | (describe *skel-user-config* nil))) |
|
59 | (":vc" (sk-vc (find-skelfile #P"." :load t))) |
|
60 | (":author" (sk-author (find-skelfile #P"." :load t))) |
|
61 | (":scripts" (sk-scripts (find-skelfile #P"." :load t))) |
|
62 | (":rules" (sk-rules (find-skelfile #P"." :load t))) |
|
63 | (":description" (sk-description (find-skelfile #P"." :load t))) |
|
64 | (":tags" (sk-tags (find-skelfile #P"." :load t))) |
|
65 | (":docs" (sk-docs (find-skelfile #P"." :load t))) |
|
66 | (":version" (sk-docs (find-skelfile #P"." :load t))) |
|
67 | (":imports" (sk-imports (find-skelfile #P"." :load t))) |
|
68 | (":license" (sk-license (find-skelfile #P"." :load t))) |
|
69 | (":stash" (sk-stash (find-skelfile #P"." :load t))) |
|
70 | (":store" (sk-store (find-skelfile #P"." :load t))) |
|
71 | (":cache" (sk-cache (find-skelfile #P"." :load t))))) |
|
72 | ||
96 | 73 | (defcmd skc-show |
319 | 74 | (if $args |
75 | (mapc (lambda (x) (when-let ((ret (skc-show-case x))) (println ret))) $args) |
|
76 | (describe (find-skelfile #P"." :load t)))) |
|
96 | 77 | |
78 | (defcmd skc-push |
|
311 | 79 | (case (sk-vc (find-skelfile #P"." :load t)) |
80 | (:hg (run-hg-command "push" $args t)))) |
|
81 | ||
82 | (defcmd skc-pull |
|
83 | (case (sk-vc (find-skelfile #P"." :load t)) |
|
84 | (:hg (run-hg-command "pull" (push "-u" $args) t)))) |
|
85 | ||
86 | (defcmd skc-status |
|
87 | (case (sk-vc (find-skelfile #P"." :load t)) |
|
88 | (:hg (progn |
|
89 | (let ((proc (run-hg-command "status" nil :stream))) |
|
90 | (copy-stream (process-output proc) *standard-output*) |
|
91 | (finish-output)))) |
|
92 | (t (progn |
|
93 | (let ((proc (run-git-command "status" nil :stream))) |
|
94 | (copy-stream (process-output proc) *standard-output*) |
|
95 | (finish-output)))))) |
|
96 | 96 | |
97 | (defcmd skc-make |
|
98 | (if $args |
|
311 | 99 | (mapc (lambda (rule) (debug! (sk-run (sk-find-rule rule (find-skelfile #P"." :load t))))) $args) |
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
100 | (debug! (sk-run (aref (sk-rules (find-skelfile #P"." :load t)) 0))))) |
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
101 | |
312 | 102 | (defcmd skc-run |
103 | (if $args |
|
104 | (mapc (lambda (script) (debug! (sk-run (sk-find-script script (find-skelfile #P"." :load t))))) $args) |
|
105 | (required-argument :script))) |
|
106 | ||
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
107 | (defcmd skc-shell |
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
108 | (if $args |
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
109 | (nyi!) |
317 | 110 | (let ((*no-exit* t)) |
111 | (in-package :skel) |
|
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
112 | (use-package :std-user) |
317 | 113 | ;; (sb-ext:enable-debugger) |
114 | (require :sb-aclrepl) |
|
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
115 | (init-skel-vars) |
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
116 | (sb-impl::toplevel-repl nil)))) |
96 | 117 | |
118 | (define-cli $cli |
|
119 | :name "skel" |
|
120 | :version "0.1.1" |
|
121 | :description "A hacker's project compiler and build tool." |
|
122 | :thunk skc-describe |
|
123 | :opts (make-opts |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
124 | (:name "help" :global t :description "print this message" |
96 | 125 | :thunk skc-help) |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
126 | (:name "version" :global t :description "print version" |
96 | 127 | :thunk skc-version) |
312 | 128 | (:name "level" :global t :description "set log level (debug,info,trace,warn)" |
319 | 129 | :thunk skc-level) |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
130 | (:name "config" :global t :description "set a custom skel user config" :kind file |
319 | 131 | :thunk skc-config) |
311 | 132 | (:name "input" :global t :description "input source" :kind string) |
133 | (:name "output" :global t :description "output target" :kind string)) |
|
96 | 134 | :cmds (make-cmds |
135 | (:name init |
|
136 | :description "initialize a skelfile in the current directory" |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
137 | :opts (make-opts (:name "name" :description "project name" :kind string)) |
96 | 138 | :thunk skc-init) |
312 | 139 | (:name describe |
140 | :description "describe a skelfile" |
|
141 | :thunk skc-describe) |
|
96 | 142 | (:name show |
312 | 143 | :description "show project slots" |
158 | 144 | :opts (make-opts |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
145 | (:name "file" :description "path to skelfile" :kind file) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
146 | (:name "user" :description "print user configuration") |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
147 | (:name "system" :description "print system configuration")) |
311 | 148 | :thunk skc-show) |
149 | (:name id |
|
150 | :description "print the project id" |
|
151 | :thunk skc-id) |
|
96 | 152 | (:name inspect |
153 | :description "inspect the project skelfile" |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
154 | :opts (make-opts (:name "file" :description "path to skelfile" :kind file)) |
96 | 155 | :thunk skc-inspect) |
156 | (:name make |
|
157 | :description "build project targets" |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
158 | :opts (make-opts (:name "target" :description "target to build" :kind string)) |
96 | 159 | :thunk skc-make) |
160 | (:name run |
|
312 | 161 | :description "run a script or command" |
162 | :thunk skc-run) |
|
311 | 163 | (:name status |
164 | :description "print the vc status" |
|
165 | :thunk skc-status) |
|
96 | 166 | (:name push |
167 | :description "push the current project upstream" |
|
168 | :thunk skc-push) |
|
169 | (:name pull |
|
311 | 170 | :description "pull the current project from remote" |
171 | :thunk skc-pull) |
|
96 | 172 | (:name clone |
173 | :description "clone a remote project") |
|
174 | (:name commit |
|
175 | :description "commit changes to the project vc") |
|
176 | (:name edit |
|
311 | 177 | :description "edit a project file in emacs." |
178 | :thunk skc-edit) |
|
96 | 179 | (:name shell |
287
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
180 | :description "open the sk-shell interpreter" |
609931bd65ba
organ updates, readme.org
Richard Westhaver <ellis@rwest.io>
parents:
286
diff
changeset
|
181 | :thunk skc-shell))) |
96 | 182 | |
183 | (defun run () |
|
284
597f34d43df7
x.lisp upgrades, skel upgrades, worked on shell reader macros
Richard Westhaver <ellis@rwest.io>
parents:
281
diff
changeset
|
184 | (let ((*log-level* :info)) |
186
2f4dba134218
nu work and update skel readtable to :shell
Richard Westhaver <ellis@rwest.io>
parents:
176
diff
changeset
|
185 | (in-readtable :shell) |
230 | 186 | (with-cli (opts cmds) $cli |
231 | 187 | (load-skelrc) |
158 | 188 | ;; TODO 2024-01-01: need to parse out CMD opts from args slot - they still there |
312 | 189 | (do-opt (find-opt $cli "level")) |
96 | 190 | (do-cmd $cli) |
289
c4682fedd73d
added krypt lib, will probably add homer too
Richard Westhaver <ellis@rwest.io>
parents:
287
diff
changeset
|
191 | (debug-opts $cli)))) |
96 | 192 | |
193 | (defmain () |
|
194 | (run) |
|
195 | (sb-ext:exit :code 0)) |