space-architect 1.3.0 → 2.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +103 -0
- data/README.md +248 -155
- data/exe/architect +1 -1
- data/exe/space +2 -2
- data/exe/src +13 -0
- data/lib/space_architect/architect_mission.rb +84 -53
- data/lib/space_architect/cli/architect.rb +92 -132
- data/lib/space_architect/cli/research.rb +94 -0
- data/lib/space_architect/cli/space.rb +25 -31
- data/lib/space_architect/cli/src.rb +20 -14
- data/lib/space_architect/cli.rb +22 -22
- data/lib/space_architect/dispatcher.rb +5 -1
- data/lib/space_architect/harness.rb +123 -16
- data/lib/space_architect/research/mux.rb +127 -0
- data/lib/space_architect/research/registry.rb +70 -0
- data/lib/space_architect/research/renderer.rb +101 -0
- data/lib/space_architect/research/run.rb +7 -0
- data/lib/space_architect/research/supervisor.rb +108 -0
- data/lib/space_architect/research.rb +13 -0
- data/lib/space_architect/run_creator.rb +53 -0
- data/lib/space_architect/skill_installer.rb +81 -79
- data/lib/space_architect.rb +5 -20
- data/lib/{space_architect → space_core}/atomic_write.rb +1 -1
- data/lib/space_core/cli/base_command.rb +19 -0
- data/lib/space_core/cli/config.rb +49 -0
- data/lib/space_core/cli/current.rb +16 -0
- data/lib/space_core/cli/help.rb +110 -0
- data/lib/space_core/cli/helpers.rb +115 -0
- data/lib/space_core/cli/init.rb +29 -0
- data/lib/space_core/cli/list.rb +24 -0
- data/lib/space_core/cli/new.rb +38 -0
- data/lib/space_core/cli/path.rb +16 -0
- data/lib/space_core/cli/repeatable_options.rb +75 -0
- data/lib/space_core/cli/repo.rb +76 -0
- data/lib/space_core/cli/shell.rb +125 -0
- data/lib/space_core/cli/show.rb +21 -0
- data/lib/space_core/cli/status.rb +33 -0
- data/lib/space_core/cli/use.rb +17 -0
- data/lib/space_core/cli.rb +171 -0
- data/lib/{space_architect → space_core}/config.rb +1 -1
- data/lib/{space_architect → space_core}/errors.rb +1 -1
- data/lib/{space_architect → space_core}/git_client.rb +1 -1
- data/lib/{space_architect → space_core}/mise_client.rb +1 -1
- data/lib/{space_architect → space_core}/repo_reference.rb +1 -1
- data/lib/{space_architect → space_core}/repo_resolver.rb +1 -1
- data/lib/{space_architect → space_core}/shell_integration.rb +1 -1
- data/lib/{space_architect → space_core}/slugger.rb +1 -1
- data/lib/{space_architect → space_core}/space.rb +1 -1
- data/lib/{space_architect → space_core}/space_store.rb +12 -12
- data/lib/{space_architect → space_core}/state.rb +1 -1
- data/lib/{space_architect → space_core}/terminal.rb +1 -1
- data/lib/space_core/version.rb +7 -0
- data/lib/{space_architect → space_core}/warnings.rb +1 -1
- data/lib/{space_architect → space_core}/xdg.rb +1 -1
- data/lib/space_core.rb +24 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/clone.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/config.rb +7 -7
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/daemon.rb +46 -30
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/options.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/org.rb +9 -9
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/repo.rb +9 -9
- data/lib/space_src/cli/shell.rb +122 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/status.rb +7 -7
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli/sync.rb +17 -17
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cli.rb +42 -11
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/cloner.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/contract.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/duration.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/model.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/config/store.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/forge/client.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/forge/github.rb +4 -4
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/launchd/agent.rb +5 -5
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/launchd/plist.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/log_rotator.rb +1 -1
- data/lib/space_src/migration.rb +43 -0
- data/lib/space_src/nav.rb +98 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/paths.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/client.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/git.rb +4 -4
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/scm/status.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/shell.rb +1 -1
- data/lib/space_src/shell_integration.rb +321 -0
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/state/lock.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/state/store.rb +2 -2
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/sync/engine.rb +12 -12
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/sync/repo_plan.rb +3 -3
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/interactive_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/json_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/mode.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/plain_reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/ui/reporter.rb +1 -1
- data/{vendor/repo-tender/lib/space_architect/pristine → lib/space_src}/version.rb +2 -2
- data/lib/space_src.rb +37 -0
- data/skill/architect/SKILL.md +2 -2
- data/skill/architect/research.md +46 -37
- metadata +115 -67
- data/lib/space_architect/cli/config.rb +0 -61
- data/lib/space_architect/cli/current.rb +0 -22
- data/lib/space_architect/cli/helpers.rb +0 -117
- data/lib/space_architect/cli/init.rb +0 -35
- data/lib/space_architect/cli/list.rb +0 -30
- data/lib/space_architect/cli/new.rb +0 -43
- data/lib/space_architect/cli/options.rb +0 -12
- data/lib/space_architect/cli/path.rb +0 -22
- data/lib/space_architect/cli/repo.rb +0 -88
- data/lib/space_architect/cli/shell.rb +0 -137
- data/lib/space_architect/cli/show.rb +0 -27
- data/lib/space_architect/cli/status.rb +0 -39
- data/lib/space_architect/cli/use.rb +0 -23
- data/lib/space_architect/version.rb +0 -5
- data/vendor/repo-tender/lib/space_architect/pristine.rb +0 -44
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: space-architect
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Jacobs
|
|
@@ -37,6 +37,34 @@ dependencies:
|
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '1.4'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: async-http
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0.95'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0.95'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: protocol-http
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0.62'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0.62'
|
|
40
68
|
- !ruby/object:Gem::Dependency
|
|
41
69
|
name: pastel
|
|
42
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -193,107 +221,127 @@ dependencies:
|
|
|
193
221
|
version: '13.0'
|
|
194
222
|
description: 'A dry-cli CLI for spaces: date-prefixed directories with a YAML identity
|
|
195
223
|
file, $PWD-based current-space resolution, and XDG config/state. Provisions repos
|
|
196
|
-
at copy-on-write speed from evergreen checkouts
|
|
197
|
-
|
|
224
|
+
at copy-on-write speed from evergreen checkouts, concurrently on fibers. Ships fish
|
|
225
|
+
shell integration and completions.'
|
|
198
226
|
email:
|
|
199
227
|
- eric@ebj.dev
|
|
200
228
|
executables:
|
|
201
229
|
- architect
|
|
202
230
|
- space
|
|
231
|
+
- src
|
|
203
232
|
extensions: []
|
|
204
233
|
extra_rdoc_files: []
|
|
205
234
|
files:
|
|
235
|
+
- CHANGELOG.md
|
|
206
236
|
- LICENSE.txt
|
|
207
237
|
- README.md
|
|
208
238
|
- exe/architect
|
|
209
239
|
- exe/space
|
|
240
|
+
- exe/src
|
|
210
241
|
- lib/space_architect.rb
|
|
211
242
|
- lib/space_architect/architect_mission.rb
|
|
212
|
-
- lib/space_architect/atomic_write.rb
|
|
213
243
|
- lib/space_architect/cli.rb
|
|
214
244
|
- lib/space_architect/cli/architect.rb
|
|
215
|
-
- lib/space_architect/cli/
|
|
216
|
-
- lib/space_architect/cli/current.rb
|
|
217
|
-
- lib/space_architect/cli/helpers.rb
|
|
218
|
-
- lib/space_architect/cli/init.rb
|
|
219
|
-
- lib/space_architect/cli/list.rb
|
|
220
|
-
- lib/space_architect/cli/new.rb
|
|
221
|
-
- lib/space_architect/cli/options.rb
|
|
222
|
-
- lib/space_architect/cli/path.rb
|
|
223
|
-
- lib/space_architect/cli/repo.rb
|
|
224
|
-
- lib/space_architect/cli/shell.rb
|
|
225
|
-
- lib/space_architect/cli/show.rb
|
|
245
|
+
- lib/space_architect/cli/research.rb
|
|
226
246
|
- lib/space_architect/cli/space.rb
|
|
227
247
|
- lib/space_architect/cli/src.rb
|
|
228
|
-
- lib/space_architect/cli/status.rb
|
|
229
|
-
- lib/space_architect/cli/use.rb
|
|
230
|
-
- lib/space_architect/config.rb
|
|
231
248
|
- lib/space_architect/dispatcher.rb
|
|
232
|
-
- lib/space_architect/errors.rb
|
|
233
|
-
- lib/space_architect/git_client.rb
|
|
234
249
|
- lib/space_architect/harness.rb
|
|
235
|
-
- lib/space_architect/
|
|
236
|
-
- lib/space_architect/
|
|
237
|
-
- lib/space_architect/
|
|
238
|
-
- lib/space_architect/
|
|
250
|
+
- lib/space_architect/research.rb
|
|
251
|
+
- lib/space_architect/research/mux.rb
|
|
252
|
+
- lib/space_architect/research/registry.rb
|
|
253
|
+
- lib/space_architect/research/renderer.rb
|
|
254
|
+
- lib/space_architect/research/run.rb
|
|
255
|
+
- lib/space_architect/research/supervisor.rb
|
|
256
|
+
- lib/space_architect/run_creator.rb
|
|
239
257
|
- lib/space_architect/skill_installer.rb
|
|
240
|
-
- lib/space_architect/slugger.rb
|
|
241
|
-
- lib/space_architect/space.rb
|
|
242
|
-
- lib/space_architect/space_store.rb
|
|
243
|
-
- lib/space_architect/state.rb
|
|
244
258
|
- lib/space_architect/templates/architect.md.erb
|
|
245
259
|
- lib/space_architect/templates/brief.md.erb
|
|
246
260
|
- lib/space_architect/templates/iteration.md.erb
|
|
247
|
-
- lib/
|
|
248
|
-
- lib/
|
|
249
|
-
- lib/
|
|
250
|
-
- lib/
|
|
261
|
+
- lib/space_core.rb
|
|
262
|
+
- lib/space_core/atomic_write.rb
|
|
263
|
+
- lib/space_core/cli.rb
|
|
264
|
+
- lib/space_core/cli/base_command.rb
|
|
265
|
+
- lib/space_core/cli/config.rb
|
|
266
|
+
- lib/space_core/cli/current.rb
|
|
267
|
+
- lib/space_core/cli/help.rb
|
|
268
|
+
- lib/space_core/cli/helpers.rb
|
|
269
|
+
- lib/space_core/cli/init.rb
|
|
270
|
+
- lib/space_core/cli/list.rb
|
|
271
|
+
- lib/space_core/cli/new.rb
|
|
272
|
+
- lib/space_core/cli/path.rb
|
|
273
|
+
- lib/space_core/cli/repeatable_options.rb
|
|
274
|
+
- lib/space_core/cli/repo.rb
|
|
275
|
+
- lib/space_core/cli/shell.rb
|
|
276
|
+
- lib/space_core/cli/show.rb
|
|
277
|
+
- lib/space_core/cli/status.rb
|
|
278
|
+
- lib/space_core/cli/use.rb
|
|
279
|
+
- lib/space_core/config.rb
|
|
280
|
+
- lib/space_core/errors.rb
|
|
281
|
+
- lib/space_core/git_client.rb
|
|
282
|
+
- lib/space_core/mise_client.rb
|
|
283
|
+
- lib/space_core/repo_reference.rb
|
|
284
|
+
- lib/space_core/repo_resolver.rb
|
|
285
|
+
- lib/space_core/shell_integration.rb
|
|
286
|
+
- lib/space_core/slugger.rb
|
|
287
|
+
- lib/space_core/space.rb
|
|
288
|
+
- lib/space_core/space_store.rb
|
|
289
|
+
- lib/space_core/state.rb
|
|
290
|
+
- lib/space_core/terminal.rb
|
|
291
|
+
- lib/space_core/version.rb
|
|
292
|
+
- lib/space_core/warnings.rb
|
|
293
|
+
- lib/space_core/xdg.rb
|
|
294
|
+
- lib/space_src.rb
|
|
295
|
+
- lib/space_src/cli.rb
|
|
296
|
+
- lib/space_src/cli/clone.rb
|
|
297
|
+
- lib/space_src/cli/config.rb
|
|
298
|
+
- lib/space_src/cli/daemon.rb
|
|
299
|
+
- lib/space_src/cli/options.rb
|
|
300
|
+
- lib/space_src/cli/org.rb
|
|
301
|
+
- lib/space_src/cli/repo.rb
|
|
302
|
+
- lib/space_src/cli/shell.rb
|
|
303
|
+
- lib/space_src/cli/status.rb
|
|
304
|
+
- lib/space_src/cli/sync.rb
|
|
305
|
+
- lib/space_src/cloner.rb
|
|
306
|
+
- lib/space_src/config/contract.rb
|
|
307
|
+
- lib/space_src/config/duration.rb
|
|
308
|
+
- lib/space_src/config/model.rb
|
|
309
|
+
- lib/space_src/config/store.rb
|
|
310
|
+
- lib/space_src/forge/client.rb
|
|
311
|
+
- lib/space_src/forge/github.rb
|
|
312
|
+
- lib/space_src/launchd/agent.rb
|
|
313
|
+
- lib/space_src/launchd/plist.rb
|
|
314
|
+
- lib/space_src/log_rotator.rb
|
|
315
|
+
- lib/space_src/migration.rb
|
|
316
|
+
- lib/space_src/nav.rb
|
|
317
|
+
- lib/space_src/paths.rb
|
|
318
|
+
- lib/space_src/scm/client.rb
|
|
319
|
+
- lib/space_src/scm/git.rb
|
|
320
|
+
- lib/space_src/scm/status.rb
|
|
321
|
+
- lib/space_src/shell.rb
|
|
322
|
+
- lib/space_src/shell_integration.rb
|
|
323
|
+
- lib/space_src/state/lock.rb
|
|
324
|
+
- lib/space_src/state/store.rb
|
|
325
|
+
- lib/space_src/sync/engine.rb
|
|
326
|
+
- lib/space_src/sync/repo_plan.rb
|
|
327
|
+
- lib/space_src/ui/interactive_reporter.rb
|
|
328
|
+
- lib/space_src/ui/json_reporter.rb
|
|
329
|
+
- lib/space_src/ui/mode.rb
|
|
330
|
+
- lib/space_src/ui/plain_reporter.rb
|
|
331
|
+
- lib/space_src/ui/reporter.rb
|
|
332
|
+
- lib/space_src/version.rb
|
|
251
333
|
- skill/architect-research/SKILL.md
|
|
252
334
|
- skill/architect-research/lanes.md
|
|
253
335
|
- skill/architect-vocabulary/SKILL.md
|
|
254
336
|
- skill/architect/SKILL.md
|
|
255
337
|
- skill/architect/dispatch.md
|
|
256
338
|
- skill/architect/research.md
|
|
257
|
-
- vendor/repo-tender/lib/space_architect/pristine.rb
|
|
258
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli.rb
|
|
259
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/clone.rb
|
|
260
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/config.rb
|
|
261
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/daemon.rb
|
|
262
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/options.rb
|
|
263
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/org.rb
|
|
264
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/repo.rb
|
|
265
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/status.rb
|
|
266
|
-
- vendor/repo-tender/lib/space_architect/pristine/cli/sync.rb
|
|
267
|
-
- vendor/repo-tender/lib/space_architect/pristine/cloner.rb
|
|
268
|
-
- vendor/repo-tender/lib/space_architect/pristine/config/contract.rb
|
|
269
|
-
- vendor/repo-tender/lib/space_architect/pristine/config/duration.rb
|
|
270
|
-
- vendor/repo-tender/lib/space_architect/pristine/config/model.rb
|
|
271
|
-
- vendor/repo-tender/lib/space_architect/pristine/config/store.rb
|
|
272
|
-
- vendor/repo-tender/lib/space_architect/pristine/forge/client.rb
|
|
273
|
-
- vendor/repo-tender/lib/space_architect/pristine/forge/github.rb
|
|
274
|
-
- vendor/repo-tender/lib/space_architect/pristine/launchd/agent.rb
|
|
275
|
-
- vendor/repo-tender/lib/space_architect/pristine/launchd/plist.rb
|
|
276
|
-
- vendor/repo-tender/lib/space_architect/pristine/log_rotator.rb
|
|
277
|
-
- vendor/repo-tender/lib/space_architect/pristine/paths.rb
|
|
278
|
-
- vendor/repo-tender/lib/space_architect/pristine/scm/client.rb
|
|
279
|
-
- vendor/repo-tender/lib/space_architect/pristine/scm/git.rb
|
|
280
|
-
- vendor/repo-tender/lib/space_architect/pristine/scm/status.rb
|
|
281
|
-
- vendor/repo-tender/lib/space_architect/pristine/shell.rb
|
|
282
|
-
- vendor/repo-tender/lib/space_architect/pristine/state/lock.rb
|
|
283
|
-
- vendor/repo-tender/lib/space_architect/pristine/state/store.rb
|
|
284
|
-
- vendor/repo-tender/lib/space_architect/pristine/sync/engine.rb
|
|
285
|
-
- vendor/repo-tender/lib/space_architect/pristine/sync/repo_plan.rb
|
|
286
|
-
- vendor/repo-tender/lib/space_architect/pristine/ui/interactive_reporter.rb
|
|
287
|
-
- vendor/repo-tender/lib/space_architect/pristine/ui/json_reporter.rb
|
|
288
|
-
- vendor/repo-tender/lib/space_architect/pristine/ui/mode.rb
|
|
289
|
-
- vendor/repo-tender/lib/space_architect/pristine/ui/plain_reporter.rb
|
|
290
|
-
- vendor/repo-tender/lib/space_architect/pristine/ui/reporter.rb
|
|
291
|
-
- vendor/repo-tender/lib/space_architect/pristine/version.rb
|
|
292
339
|
homepage: https://github.com/jetpks/space-architect
|
|
293
340
|
licenses:
|
|
294
341
|
- MIT
|
|
295
342
|
metadata:
|
|
296
343
|
homepage_uri: https://github.com/jetpks/space-architect
|
|
344
|
+
changelog_uri: https://github.com/jetpks/space-architect/blob/main/CHANGELOG.md
|
|
297
345
|
rdoc_options: []
|
|
298
346
|
require_paths:
|
|
299
347
|
- lib
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
module Config
|
|
6
|
-
class Show < Dry::CLI::Command
|
|
7
|
-
include GlobalOptions
|
|
8
|
-
include Helpers
|
|
9
|
-
|
|
10
|
-
desc "Show current config"
|
|
11
|
-
|
|
12
|
-
def call(**opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
handle_errors do
|
|
15
|
-
rows = SpaceArchitect::Config::EDITABLE_KEYS.map do |key|
|
|
16
|
-
value = project_config.data[key]
|
|
17
|
-
[key, value.nil? ? "" : value.to_s]
|
|
18
|
-
end
|
|
19
|
-
terminal.say terminal.table(%w[Key Value], rows)
|
|
20
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
class ConfigPath < Dry::CLI::Command
|
|
26
|
-
include GlobalOptions
|
|
27
|
-
include Helpers
|
|
28
|
-
|
|
29
|
-
desc "Print the config file path"
|
|
30
|
-
|
|
31
|
-
def call(**opts)
|
|
32
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
33
|
-
handle_errors do
|
|
34
|
-
terminal.say terminal.path(project_config.path)
|
|
35
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
class Set < Dry::CLI::Command
|
|
41
|
-
include GlobalOptions
|
|
42
|
-
include Helpers
|
|
43
|
-
|
|
44
|
-
desc "Set a config key"
|
|
45
|
-
argument :key, required: true, desc: "Config key"
|
|
46
|
-
argument :value, required: true, desc: "Config value"
|
|
47
|
-
|
|
48
|
-
def call(key:, value:, **opts)
|
|
49
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
50
|
-
handle_errors do
|
|
51
|
-
project_config.set(key, value)
|
|
52
|
-
stored = project_config.data[key]
|
|
53
|
-
terminal.success "Set #{key}=#{stored.nil? ? '' : stored.to_s}"
|
|
54
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Current < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Show the current space"
|
|
10
|
-
|
|
11
|
-
def call(**opts)
|
|
12
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
13
|
-
render(store.find) do |space|
|
|
14
|
-
terminal.say space.id.to_s
|
|
15
|
-
terminal.say terminal.path(space.path)
|
|
16
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "dry/monads"
|
|
4
|
-
|
|
5
|
-
module SpaceArchitect
|
|
6
|
-
module CLI
|
|
7
|
-
module Helpers
|
|
8
|
-
include Dry::Monads[:result]
|
|
9
|
-
def project_config
|
|
10
|
-
@project_config ||= SpaceArchitect::Config.load
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def state
|
|
14
|
-
@state ||= SpaceArchitect::State.load
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def store
|
|
18
|
-
@store ||= SpaceArchitect::SpaceStore.new(config: project_config, state: state)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def terminal
|
|
22
|
-
@terminal
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def setup_terminal(color: "auto", colors: nil)
|
|
26
|
-
@terminal = Terminal.new(
|
|
27
|
-
config: project_config,
|
|
28
|
-
stdout: out,
|
|
29
|
-
stderr: err,
|
|
30
|
-
color_mode: colors || color || "auto"
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def display_date(space)
|
|
35
|
-
id_date = space.id.match(/\A(\d{4})(\d{2})(\d{2})/)
|
|
36
|
-
return "#{id_date[1]}-#{id_date[2]}-#{id_date[3]}" if id_date
|
|
37
|
-
|
|
38
|
-
space.data["created_at"].to_s[0, 10]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def handle_errors
|
|
42
|
-
yield
|
|
43
|
-
rescue SpaceArchitect::Error => e
|
|
44
|
-
if terminal
|
|
45
|
-
terminal.error(e.message)
|
|
46
|
-
else
|
|
47
|
-
err.puts e.message
|
|
48
|
-
end
|
|
49
|
-
CLI.record_outcome(Outcome.new(exit_code: 1, message: e.message))
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def render(result)
|
|
53
|
-
case result
|
|
54
|
-
when Dry::Monads::Result::Success
|
|
55
|
-
yield result.value! if block_given?
|
|
56
|
-
when Dry::Monads::Result::Failure
|
|
57
|
-
error = result.failure
|
|
58
|
-
message = error.respond_to?(:message) ? error.message : error.to_s
|
|
59
|
-
terminal ? terminal.error(message) : err.puts(message)
|
|
60
|
-
CLI.record_outcome(Outcome.new(exit_code: 1, message: message))
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
class RepoProgress
|
|
66
|
-
def initialize(total)
|
|
67
|
-
@total = total
|
|
68
|
-
@statuses = {}
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def start(addition)
|
|
72
|
-
source = addition[:src_source]
|
|
73
|
-
@statuses[addition.fetch(:reference).full_name] = source&.directory? ? :copying : :cloning
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def trust(addition)
|
|
77
|
-
@statuses[addition.fetch(:reference).full_name] = :trusting
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def finish(addition)
|
|
81
|
-
@statuses[addition.fetch(:reference).full_name] = :done
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def fail(addition)
|
|
85
|
-
@statuses[addition.fetch(:reference).full_name] = :failed
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def message
|
|
89
|
-
done = @statuses.count { |_repo, status| status == :done }
|
|
90
|
-
failed = @statuses.count { |_repo, status| status == :failed }
|
|
91
|
-
copying = @statuses.select { |_repo, status| status == :copying }.keys
|
|
92
|
-
cloning = @statuses.select { |_repo, status| status == :cloning }.keys
|
|
93
|
-
trusting = @statuses.select { |_repo, status| status == :trusting }.keys
|
|
94
|
-
|
|
95
|
-
if @total == 1
|
|
96
|
-
copying_repo = copying.first
|
|
97
|
-
cloning_repo = cloning.first
|
|
98
|
-
trusting_repo = trusting.first
|
|
99
|
-
return "Copying #{copying_repo}" if copying_repo
|
|
100
|
-
return "Cloning #{cloning_repo}" if cloning_repo
|
|
101
|
-
return "Trusting #{trusting_repo}" if trusting_repo
|
|
102
|
-
return "Fetch failed" if failed.positive?
|
|
103
|
-
|
|
104
|
-
"Preparing repos"
|
|
105
|
-
else
|
|
106
|
-
active = []
|
|
107
|
-
active << "copying #{copying.join(', ')}" unless copying.empty?
|
|
108
|
-
active << "cloning #{cloning.join(', ')}" unless cloning.empty?
|
|
109
|
-
active << "trusting #{trusting.join(', ')}" unless trusting.empty?
|
|
110
|
-
suffix = active.empty? ? nil : ": #{active.join('; ')}"
|
|
111
|
-
failed_text = failed.positive? ? ", #{failed} failed" : ""
|
|
112
|
-
"Fetching repos #{done}/#{@total}#{failed_text}#{suffix}"
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Init < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Create default XDG config and state files"
|
|
10
|
-
option :force, type: :boolean, default: false, desc: "Overwrite existing config and state files"
|
|
11
|
-
|
|
12
|
-
def call(force: false, **opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
handle_errors do
|
|
15
|
-
if force
|
|
16
|
-
@project_config = SpaceArchitect::Config.new
|
|
17
|
-
@state = SpaceArchitect::State.new
|
|
18
|
-
project_config.save
|
|
19
|
-
state.save
|
|
20
|
-
else
|
|
21
|
-
project_config.ensure_exists!
|
|
22
|
-
state.ensure_exists!
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
FileUtils.mkdir_p(project_config.spaces_dir)
|
|
26
|
-
terminal.success "Config: #{terminal.path(project_config.path)}"
|
|
27
|
-
terminal.success "State: #{terminal.path(state.path)}"
|
|
28
|
-
terminal.success "Spaces: #{terminal.path(project_config.spaces_dir)}"
|
|
29
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class List < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "List spaces"
|
|
10
|
-
|
|
11
|
-
def call(**opts)
|
|
12
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
13
|
-
handle_errors do
|
|
14
|
-
spaces = store.list
|
|
15
|
-
if spaces.empty?
|
|
16
|
-
terminal.say "No spaces found in #{terminal.path(project_config.spaces_dir)}"
|
|
17
|
-
next
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
rows = spaces.map do |space|
|
|
21
|
-
[space.status, display_date(space), space.title, terminal.path(space.path)]
|
|
22
|
-
end
|
|
23
|
-
terminal.say terminal.table(%w[Status Date Title Path], rows)
|
|
24
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class New < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Create a new project space"
|
|
10
|
-
argument :title, required: true, desc: "Space title"
|
|
11
|
-
argument :repos, type: :array, required: false, desc: "Repo refs to clone"
|
|
12
|
-
option :git, type: :boolean, default: true, desc: "Initialize the space as a Git repository (use --no-git to skip)"
|
|
13
|
-
|
|
14
|
-
def call(title:, repos: [], git: true, **opts)
|
|
15
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
16
|
-
result = store.create(title, git: git).bind do |space|
|
|
17
|
-
terminal.success "Created #{space.id}"
|
|
18
|
-
|
|
19
|
-
repo_specs = Array(repos).compact
|
|
20
|
-
repo_specs.each { |spec| terminal.say "Queued #{spec}" }
|
|
21
|
-
|
|
22
|
-
next Success(space) if repo_specs.empty?
|
|
23
|
-
|
|
24
|
-
progress = RepoProgress.new(repo_specs.length)
|
|
25
|
-
terminal.with_spinner(-> { progress.message }) do
|
|
26
|
-
store.add_repos_to(space, repo_specs, reporter: progress)
|
|
27
|
-
end.fmap do |results|
|
|
28
|
-
results.each do |r|
|
|
29
|
-
terminal.success "Added #{r.fetch(:repo).fetch('full_name')}"
|
|
30
|
-
terminal.say terminal.path(r.fetch(:path))
|
|
31
|
-
end
|
|
32
|
-
space
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
render(result) do |space|
|
|
36
|
-
terminal.say terminal.path(space.path)
|
|
37
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
module GlobalOptions
|
|
6
|
-
def self.included(base)
|
|
7
|
-
base.option :color, type: :string, default: "auto", desc: "Color output: auto, always, never"
|
|
8
|
-
base.option :colors, type: :string, desc: "Alias for --color"
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
class Path < Dry::CLI::Command
|
|
6
|
-
include GlobalOptions
|
|
7
|
-
include Helpers
|
|
8
|
-
|
|
9
|
-
desc "Print the path for a space or the current space"
|
|
10
|
-
argument :identifier, required: false, desc: "Space ID or title slug"
|
|
11
|
-
|
|
12
|
-
def call(identifier: nil, **opts)
|
|
13
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
14
|
-
render(store.path_for(identifier)) do |path|
|
|
15
|
-
terminal.say terminal.path(path)
|
|
16
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SpaceArchitect
|
|
4
|
-
module CLI
|
|
5
|
-
module Repo
|
|
6
|
-
class Add < Dry::CLI::Command
|
|
7
|
-
include GlobalOptions
|
|
8
|
-
include Helpers
|
|
9
|
-
|
|
10
|
-
desc "Clone repos into the current space"
|
|
11
|
-
argument :repos, type: :array, required: false, desc: "REPO [REPO...]"
|
|
12
|
-
|
|
13
|
-
def call(repos: [], **opts)
|
|
14
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
15
|
-
handle_errors do
|
|
16
|
-
specs = Array(repos).compact
|
|
17
|
-
if specs.empty?
|
|
18
|
-
terminal.error("Usage: space repo add REPO [REPO...]")
|
|
19
|
-
CLI.record_outcome(Outcome.new(exit_code: 1))
|
|
20
|
-
next
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
progress = RepoProgress.new(specs.length)
|
|
24
|
-
add_result = terminal.with_spinner(-> { progress.message }) do
|
|
25
|
-
store.add_repos(specs, reporter: progress)
|
|
26
|
-
end
|
|
27
|
-
render(add_result) do |results|
|
|
28
|
-
results.each do |result|
|
|
29
|
-
terminal.success "Added #{result.fetch(:repo).fetch('full_name')}"
|
|
30
|
-
terminal.say terminal.path(result.fetch(:path))
|
|
31
|
-
end
|
|
32
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
class RepoList < Dry::CLI::Command
|
|
39
|
-
include GlobalOptions
|
|
40
|
-
include Helpers
|
|
41
|
-
|
|
42
|
-
desc "List repos in the current space"
|
|
43
|
-
|
|
44
|
-
def call(**opts)
|
|
45
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
46
|
-
handle_errors do
|
|
47
|
-
render(store.repos) do |repos|
|
|
48
|
-
if repos.empty?
|
|
49
|
-
id = store.find.fmap(&:id).value_or("(unknown space)")
|
|
50
|
-
terminal.say "No repos found in #{id}"
|
|
51
|
-
next
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
rows = repos.map { |repo| [repo.fetch("full_name", repo["name"]), repo.fetch("path", "")] }
|
|
55
|
-
terminal.say terminal.table(["Repo", "Path"], rows)
|
|
56
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
class Resolve < Dry::CLI::Command
|
|
63
|
-
include GlobalOptions
|
|
64
|
-
include Helpers
|
|
65
|
-
|
|
66
|
-
desc "Resolve repo refs without cloning"
|
|
67
|
-
argument :repos, type: :array, required: false, desc: "REPO [REPO...]"
|
|
68
|
-
|
|
69
|
-
def call(repos: [], **opts)
|
|
70
|
-
setup_terminal(**opts.slice(:color, :colors))
|
|
71
|
-
handle_errors do
|
|
72
|
-
specs = Array(repos).compact
|
|
73
|
-
if specs.empty?
|
|
74
|
-
terminal.error("Usage: space repo resolve REPO [REPO...]")
|
|
75
|
-
CLI.record_outcome(Outcome.new(exit_code: 1))
|
|
76
|
-
next
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
references = specs.map { |spec| RepoResolver.new(project_config).resolve(spec) }
|
|
80
|
-
terminal.say terminal.table(["Repo", "Clone URL"], references.map { |ref| [ref.full_name, ref.clone_url] })
|
|
81
|
-
CLI.record_outcome(Outcome.new(exit_code: 0))
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|