fce44ae9 Andy McCall 1 month ago ↶
1
2
b582948f Andy McCall 19 days ago ↶
3
mod approve ;
ff1f62fe Andy McCall 1 month ago ↶
4
mod auth ;
fce44ae9 Andy McCall 1 month ago ↶
5
mod format ;
75167672 Andy McCall 1 month ago
6
mod identity ;
c6aa5bd9 Andy McCall 1 month ago ↶
7
mod json ;
d82e4409 Andy McCall 1 month ago ↶
8
mod proposal ;
fc1a466a Andy McCall 1 month ago ↶
9
mod receipt ;
fce44ae9 Andy McCall 1 month ago ↶
10
mod sync ;
135212de Andy McCall 1 month ago ↶
11
pub mod ui ;
fce44ae9 Andy McCall 1 month ago ↶
12
mod workspace ;
13
14
use anyhow:: { Context, Result } ;
15
use clap:: { Parser, Subcommand} ;
16
use oxy_core:: repo:: Repo;
17
use std:: path:: PathBuf;
18
19
# [ derive ( Parser ) ]
75167672 Andy McCall 1 month ago
20
# [ command (
21
name = " oxy" ,
e293c90d Andy McCall 1 month ago ↶
22
version = env!(" OXY_VERSION_LONG" ) ,
75167672 Andy McCall 1 month ago
23
about = " Oxygen: breathing fresh air into version control"
24
)]
fce44ae9 Andy McCall 1 month ago ↶
25
struct Cli {
135212de Andy McCall 1 month ago ↶
26
27
#[arg(long, global = true)]
28
plain : bool ,
98a1620a Andy McCall 1 month ago ↶
29
30
#[arg(long, global = true, value_name = "OP")]
31
at_op : Option< String> ,
fce44ae9 Andy McCall 1 month ago ↶
32
#[command(subcommand)]
33
cmd : Cmd,
34
}
35
98a1620a Andy McCall 1 month ago ↶
36
37
static AT_OP : std:: sync:: OnceLock< Option< String> > = std:: sync:: OnceLock:: new( ) ;
38
fce44ae9 Andy McCall 1 month ago ↶
39
# [ derive ( Subcommand ) ]
40
enum Cmd {
41
e02bf0cd Andy McCall 1 month ago ↶
42
Init {
d42369ab Andy McCall 1 month ago
43
e02bf0cd Andy McCall 1 month ago ↶
44
path: Option< PathBuf> ,
45
46
# [ arg ( long ) ]
47
bare: bool ,
d069701a Andy McCall 1 month ago ↶
48
49
50
51
# [ arg ( long, value_name = " URL" ) ]
52
store: Option< String> ,
e02bf0cd Andy McCall 1 month ago ↶
53
} ,
fce44ae9 Andy McCall 1 month ago ↶
54
b3c5a59a Andy McCall 1 month ago ↶
55
Clone {
d42369ab Andy McCall 1 month ago
56
b3c5a59a Andy McCall 1 month ago ↶
57
url: String ,
d42369ab Andy McCall 1 month ago
58
b3c5a59a Andy McCall 1 month ago ↶
59
dest: Option< PathBuf> ,
60
61
# [ arg ( long ) ]
62
max_blob: Option< String> ,
7421309f Andy McCall 1 month ago ↶
63
64
# [ arg ( long = " sparse" ) ]
65
sparse: Vec< String> ,
2863456a Andy McCall 1 month ago ↶
66
67
# [ arg ( long ) ]
68
depth: Option< u32 > ,
14edbaaf Andy McCall 1 month ago ↶
69
70
# [ arg ( long ) ]
71
recursive: bool ,
b3c5a59a Andy McCall 1 month ago ↶
72
} ,
2863456a Andy McCall 1 month ago ↶
73
74
Deepen {
d42369ab Andy McCall 1 month ago
75
2863456a Andy McCall 1 month ago ↶
76
# [ arg ( default_value_t = 10 ) ]
77
depth: u32 ,
d42369ab Andy McCall 1 month ago
78
2863456a Andy McCall 1 month ago ↶
79
# [ arg ( long, default_value = " origin" ) ]
80
remote: String ,
81
} ,
7421309f Andy McCall 1 month ago ↶
82
d42369ab Andy McCall 1 month ago
83
Sparse {
84
85
paths: Vec< String> ,
86
} ,
fce44ae9 Andy McCall 1 month ago ↶
87
50a046e4 Andy McCall 1 month ago ↶
88
Status {
89
90
# [ arg ( long ) ]
91
json: bool ,
92
} ,
135212de Andy McCall 1 month ago ↶
93
94
Prompt {
694805cc Andy McCall 1 month ago ↶
95
135212de Andy McCall 1 month ago ↶
96
# [ arg ( long, default_value = oxy_core::repo::DEFAULT_PROMPT_FORMAT ) ]
97
format: String ,
694805cc Andy McCall 1 month ago ↶
98
99
# [ arg ( long ) ]
100
glyphs: bool ,
101
102
# [ arg ( long, value_parser = [" raw" , " bash" , " zsh" ] ) ]
103
color: Option< String> ,
135212de Andy McCall 1 month ago ↶
104
} ,
fce44ae9 Andy McCall 1 month ago ↶
105
106
Commit {
d42369ab Andy McCall 1 month ago
107
6a81dbab Andy McCall 1 month ago ↶
108
# [ arg ( short, long, required_unless_present = " file" , conflicts_with = " file" ) ]
109
message: Option< String> ,
110
111
# [ arg ( short = 'F', long, value_name = " FILE" ) ]
112
file: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
113
114
# [ arg ( long = " depends-on" ) ]
115
depends_on: Vec< String> ,
957fee30 Andy McCall 1 month ago ↶
116
117
paths: Vec< String> ,
118
119
# [ arg ( short, long ) ]
120
interactive: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
121
122
# [ arg ( long, value_delimiter = ', ' ) ]
123
hunks: Vec< usize > ,
fce44ae9 Andy McCall 1 month ago ↶
124
} ,
728da0f9 Andy McCall 1 month ago ↶
125
126
Squash {
d42369ab Andy McCall 1 month ago
127
728da0f9 Andy McCall 1 month ago ↶
128
change: String ,
d42369ab Andy McCall 1 month ago
129
728da0f9 Andy McCall 1 month ago ↶
130
# [ arg ( long ) ]
131
into: String ,
132
} ,
133
134
Rebase {
d42369ab Andy McCall 1 month ago
135
728da0f9 Andy McCall 1 month ago ↶
136
change: String ,
137
138
# [ arg ( long, required = true, num_args = 1.. ) ]
139
onto: Vec< String> ,
e266b7d4 Andy McCall 1 month ago ↶
140
141
142
143
# [ arg ( long ) ]
144
into_working_copy: bool ,
728da0f9 Andy McCall 1 month ago ↶
145
} ,
957fee30 Andy McCall 1 month ago ↶
146
147
Blame {
d42369ab Andy McCall 1 month ago
148
957fee30 Andy McCall 1 month ago ↶
149
path: String ,
d42369ab Andy McCall 1 month ago
150
957fee30 Andy McCall 1 month ago ↶
151
# [ arg ( long ) ]
152
json: bool ,
153
} ,
154
155
Bisect {
156
# [ command ( subcommand ) ]
157
cmd: BisectCmd,
158
} ,
fce44ae9 Andy McCall 1 month ago ↶
159
94084087 Andy McCall 1 month ago ↶
160
Log {
bf3a6781 Andy McCall 1 month ago ↶
161
162
163
164
47ce8b8e Andy McCall 1 month ago ↶
165
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with_all = [" path" , " lines" ] ) ]
166
revset: Option< String> ,
94084087 Andy McCall 1 month ago ↶
167
168
# [ arg ( short = 'n', long ) ]
169
limit: Option< usize > ,
170
171
# [ arg ( short, long ) ]
172
verbose: bool ,
c6aa5bd9 Andy McCall 1 month ago ↶
173
174
# [ arg ( long ) ]
175
path: Option< String> ,
83d61e80 Andy McCall 1 month ago ↶
176
177
178
179
# [ arg ( short = 'L', value_name = " START,END:PATH" , conflicts_with = " path" ) ]
180
lines: Option< String> ,
d42369ab Andy McCall 1 month ago
181
c6aa5bd9 Andy McCall 1 month ago ↶
182
# [ arg ( long ) ]
183
json: bool ,
94084087 Andy McCall 1 month ago ↶
184
} ,
fce44ae9 Andy McCall 1 month ago ↶
185
c6aa5bd9 Andy McCall 1 month ago ↶
186
Diff {
187
188
change: Option< String> ,
d42369ab Andy McCall 1 month ago
189
c6aa5bd9 Andy McCall 1 month ago ↶
190
# [ arg ( long ) ]
191
json: bool ,
192
} ,
193
194
Cat {
d42369ab Andy McCall 1 month ago
195
c6aa5bd9 Andy McCall 1 month ago ↶
196
path: String ,
b0a0c9af Andy McCall 1 month ago ↶
197
198
199
c6aa5bd9 Andy McCall 1 month ago ↶
200
# [ arg ( short = 'r', long ) ]
201
change: Option< String> ,
202
} ,
203
204
Root {
d42369ab Andy McCall 1 month ago
205
c6aa5bd9 Andy McCall 1 month ago ↶
206
# [ arg ( long ) ]
207
json: bool ,
208
} ,
209
210
Version {
d42369ab Andy McCall 1 month ago
211
c6aa5bd9 Andy McCall 1 month ago ↶
212
# [ arg ( long ) ]
213
json: bool ,
214
} ,
215
216
Discard {
d42369ab Andy McCall 1 month ago
217
c6aa5bd9 Andy McCall 1 month ago ↶
218
paths: Vec< String> ,
219
220
# [ arg ( long, value_delimiter = ', ' ) ]
221
hunks: Vec< usize > ,
222
} ,
223
224
Hunks {
d42369ab Andy McCall 1 month ago
225
c6aa5bd9 Andy McCall 1 month ago ↶
226
# [ arg ( long ) ]
227
json: bool ,
228
} ,
6a81dbab Andy McCall 1 month ago ↶
229
230
231
614541c3 Andy McCall 1 month ago ↶
232
Describe {
d42369ab Andy McCall 1 month ago
233
614541c3 Andy McCall 1 month ago ↶
234
# [ arg ( short, long ) ]
6a81dbab Andy McCall 1 month ago ↶
235
message: Option< String> ,
d42369ab Andy McCall 1 month ago
236
614541c3 Andy McCall 1 month ago ↶
237
change: Option< String> ,
6a81dbab Andy McCall 1 month ago ↶
238
239
# [ arg ( long, conflicts_with = " message" ) ]
240
json: bool ,
614541c3 Andy McCall 1 month ago ↶
241
} ,
23b217d7 Andy McCall 1 month ago ↶
242
614541c3 Andy McCall 1 month ago ↶
243
Amend {
d42369ab Andy McCall 1 month ago
244
614541c3 Andy McCall 1 month ago ↶
245
# [ arg ( short, long ) ]
246
message: Option< String> ,
23b217d7 Andy McCall 1 month ago ↶
247
248
# [ arg ( long ) ]
249
into: Option< String> ,
614541c3 Andy McCall 1 month ago ↶
250
} ,
23b217d7 Andy McCall 1 month ago ↶
251
d42369ab Andy McCall 1 month ago
252
Split {
253
254
change: String ,
255
256
paths: Vec< String> ,
257
} ,
2c9ddac3 Andy McCall 1 month ago ↶
258
d42369ab Andy McCall 1 month ago
259
Abandon {
2c9ddac3 Andy McCall 1 month ago ↶
260
261
# [ arg ( required_unless_present = " revset" ) ]
262
change: Option< String> ,
263
264
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
265
revset: Option< String> ,
266
267
# [ arg ( long, short = 'y' ) ]
268
yes: bool ,
d42369ab Andy McCall 1 month ago
269
} ,
2c9ddac3 Andy McCall 1 month ago ↶
270
c6aa5bd9 Andy McCall 1 month ago ↶
271
Show {
d42369ab Andy McCall 1 month ago
272
2c9ddac3 Andy McCall 1 month ago ↶
273
# [ arg ( required_unless_present = " revset" ) ]
274
change: Option< String> ,
275
276
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
277
revset: Option< String> ,
d42369ab Andy McCall 1 month ago
278
c6aa5bd9 Andy McCall 1 month ago ↶
279
# [ arg ( long ) ]
280
json: bool ,
281
} ,
fce44ae9 Andy McCall 1 month ago ↶
282
283
Checkout {
d42369ab Andy McCall 1 month ago
284
fce44ae9 Andy McCall 1 month ago ↶
285
changes: Vec< String> ,
286
287
# [ arg ( long ) ]
288
discard: bool ,
1c2bd9ab Andy McCall 1 month ago ↶
289
290
291
# [ arg ( long, conflicts_with = " discard" ) ]
292
carry: bool ,
fce44ae9 Andy McCall 1 month ago ↶
293
} ,
294
c6aa5bd9 Andy McCall 1 month ago ↶
295
Resolve {
d42369ab Andy McCall 1 month ago
296
c6aa5bd9 Andy McCall 1 month ago ↶
297
# [ arg ( long ) ]
298
json: bool ,
299
} ,
fce44ae9 Andy McCall 1 month ago ↶
300
301
Undo,
252e8cb2 Andy McCall 1 month ago ↶
302
303
Checkpoint,
d42369ab Andy McCall 1 month ago
304
305
Completions {
306
307
shell: clap_complete:: Shell,
308
} ,
309
310
Man {
311
312
# [ arg ( long ) ]
313
dir: Option< PathBuf> ,
314
} ,
3e5772cc Andy McCall 1 month ago ↶
315
316
Doctor {
317
318
# [ arg ( long ) ]
319
offline: bool ,
d42369ab Andy McCall 1 month ago
320
3e5772cc Andy McCall 1 month ago ↶
321
# [ arg ( long ) ]
322
json: bool ,
323
} ,
387335ff Andy McCall 1 month ago ↶
324
325
Fsck {
d42369ab Andy McCall 1 month ago
326
387335ff Andy McCall 1 month ago ↶
327
# [ arg ( long ) ]
328
json: bool ,
329
} ,
da652d63 Andy McCall 1 month ago ↶
330
ba160f60 Andy McCall 1 month ago ↶
331
Gc {
332
333
# [ arg ( long ) ]
334
now: bool ,
b689779e Andy McCall 24 days ago ↶
335
336
# [ arg ( long ) ]
337
expire_snapshots: bool ,
d8d93678 Andy McCall 1 month ago ↶
338
339
# [ arg ( long, value_name = " NAME" ) ]
340
remote: Option< String> ,
ba160f60 Andy McCall 1 month ago ↶
341
} ,
fce44ae9 Andy McCall 1 month ago ↶
342
343
# [ command ( name = " op" ) ]
344
Op {
345
# [ command ( subcommand ) ]
346
cmd: OpCmd,
347
} ,
cdb5beba Andy McCall 1 month ago ↶
348
d42369ab Andy McCall 1 month ago
349
Lock {
350
351
path: String ,
352
} ,
cdb5beba Andy McCall 1 month ago ↶
353
d42369ab Andy McCall 1 month ago
354
Unlock {
355
356
path: String ,
357
} ,
4e88e774 Andy McCall 1 month ago ↶
358
359
Workspace {
360
# [ command ( subcommand ) ]
361
cmd: WorkspaceCmd,
362
} ,
7b9809e6 Andy McCall 1 month ago ↶
363
364
Bookmark {
365
# [ command ( subcommand ) ]
366
cmd: BookmarkCmd,
367
} ,
368
d42369ab Andy McCall 1 month ago
369
Merge {
370
371
bookmark: String ,
372
} ,
ff1f62fe Andy McCall 1 month ago ↶
373
374
Auth {
375
# [ command ( subcommand ) ]
376
cmd: AuthCmd,
377
} ,
4dee277c Andy McCall 1 month ago ↶
378
379
Submodule {
380
# [ command ( subcommand ) ]
381
cmd: SubmoduleCmd,
382
} ,
fc1a466a Andy McCall 1 month ago ↶
383
384
Receipt {
385
# [ command ( subcommand ) ]
386
cmd: ReceiptCmd,
387
} ,
132b884b Andy McCall 1 month ago ↶
388
389
Tag {
390
# [ command ( subcommand ) ]
391
cmd: TagCmd,
392
} ,
fce44ae9 Andy McCall 1 month ago ↶
393
394
Remote {
395
# [ command ( subcommand ) ]
396
cmd: RemoteCmd,
397
} ,
398
c6aa5bd9 Andy McCall 1 month ago ↶
399
Fetch {
d42369ab Andy McCall 1 month ago
400
c6aa5bd9 Andy McCall 1 month ago ↶
401
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
402
c6aa5bd9 Andy McCall 1 month ago ↶
403
# [ arg ( long ) ]
404
json: bool ,
405
} ,
fce44ae9 Andy McCall 1 month ago ↶
406
c6aa5bd9 Andy McCall 1 month ago ↶
407
Pull {
d42369ab Andy McCall 1 month ago
408
c6aa5bd9 Andy McCall 1 month ago ↶
409
remote: Option< String> ,
d42369ab Andy McCall 1 month ago
410
c6aa5bd9 Andy McCall 1 month ago ↶
411
# [ arg ( long ) ]
412
json: bool ,
413
} ,
fce44ae9 Andy McCall 1 month ago ↶
414
415
Push {
d42369ab Andy McCall 1 month ago
416
fce44ae9 Andy McCall 1 month ago ↶
417
remote: Option< String> ,
418
419
# [ arg ( long ) ]
420
force: bool ,
7b9809e6 Andy McCall 1 month ago ↶
421
422
# [ arg ( short = 'b', long ) ]
423
bookmark: Option< String> ,
f8c69576 Andy McCall 1 month ago ↶
424
425
426
# [ arg ( long, value_name = " NAME" , conflicts_with_all = [" bookmark" , " force" ] ) ]
427
delete: Option< String> ,
d42369ab Andy McCall 1 month ago
428
c6aa5bd9 Andy McCall 1 month ago ↶
429
# [ arg ( long ) ]
430
json: bool ,
fce44ae9 Andy McCall 1 month ago ↶
431
} ,
2b5ee371 Andy McCall 1 month ago ↶
432
fce44ae9 Andy McCall 1 month ago ↶
433
Serve {
434
435
# [ arg ( long, default_value = " ." ) ]
436
root: PathBuf,
d42369ab Andy McCall 1 month ago
437
fce44ae9 Andy McCall 1 month ago ↶
438
# [ arg ( long, default_value = " 127.0.0.1:8890" ) ]
439
bind: String ,
440
441
# [ arg ( long = " token" ) ]
442
tokens: Vec< String> ,
2b5ee371 Andy McCall 1 month ago ↶
443
444
# [ arg ( long, requires = " tls_key" ) ]
445
tls_cert: Option< PathBuf> ,
446
447
# [ arg ( long, requires = " tls_cert" ) ]
448
tls_key: Option< PathBuf> ,
fce44ae9 Andy McCall 1 month ago ↶
449
} ,
450
451
Identity {
452
# [ command ( subcommand ) ]
453
cmd: IdentityCmd,
454
} ,
05e71ed6 Andy McCall 1 month ago ↶
455
456
Seal {
d42369ab Andy McCall 1 month ago
457
05e71ed6 Andy McCall 1 month ago ↶
458
changes: Vec< String> ,
d82e4409 Andy McCall 1 month ago ↶
459
460
# [ arg ( long, conflicts_with = " changes" ) ]
461
proposal: Option< String> ,
b582948f Andy McCall 19 days ago ↶
462
463
# [ arg ( long, conflicts_with_all = [" changes" , " proposal" ], requires = " job" ) ]
464
flow: Option< String> ,
465
466
# [ arg ( long, requires = " flow" ) ]
467
job: Option< String> ,
468
469
# [ arg ( long, requires = " flow" ) ]
470
reject: bool ,
d42369ab Andy McCall 1 month ago
471
05e71ed6 Andy McCall 1 month ago ↶
472
# [ arg ( long ) ]
473
json: bool ,
474
} ,
d82e4409 Andy McCall 1 month ago ↶
475
476
Proposal {
477
# [ command ( subcommand ) ]
478
cmd: ProposalCmd,
479
} ,
fce44ae9 Andy McCall 1 month ago ↶
480
c6aa5bd9 Andy McCall 1 month ago ↶
481
Verify {
d42369ab Andy McCall 1 month ago
482
c6aa5bd9 Andy McCall 1 month ago ↶
483
change: Option< String> ,
2c9ddac3 Andy McCall 1 month ago ↶
484
485
# [ arg ( short = 'r', long, value_name = " REVSET" , conflicts_with = " change" ) ]
486
revset: Option< String> ,
d42369ab Andy McCall 1 month ago
487
c6aa5bd9 Andy McCall 1 month ago ↶
488
# [ arg ( long ) ]
489
json: bool ,
490
} ,
79ab8528 Andy McCall 1 month ago ↶
491
492
Git {
493
# [ command ( subcommand ) ]
494
cmd: GitCmd,
495
} ,
83e0677b Andy McCall 1 month ago ↶
496
497
Policy {
498
# [ command ( subcommand ) ]
499
cmd: PolicyCmd,
500
} ,
5ad2b565 Andy McCall 1 month ago ↶
501
fce44ae9 Andy McCall 1 month ago ↶
502
Config {
d42369ab Andy McCall 1 month ago
503
fce44ae9 Andy McCall 1 month ago ↶
504
key: String ,
8e9c64d1 Andy McCall 20 days ago ↶
505
614f55e1 Andy McCall 1 month ago ↶
506
# [ arg ( required_unless_present = " unset" ) ]
507
value: Option< String> ,
fce44ae9 Andy McCall 1 month ago ↶
508
509
# [ arg ( long ) ]
510
user: bool ,
614f55e1 Andy McCall 1 month ago ↶
511
512
# [ arg ( long ) ]
513
unset: bool ,
fce44ae9 Andy McCall 1 month ago ↶
514
} ,
515
}
516
517
# [ derive ( Subcommand ) ]
518
enum OpCmd {
98a1620a Andy McCall 1 month ago ↶
519
c6aa5bd9 Andy McCall 1 month ago ↶
520
Log {
98a1620a Andy McCall 1 month ago ↶
521
522
# [ arg ( short = 'n', long ) ]
523
limit: Option< usize > ,
d42369ab Andy McCall 1 month ago
524
c6aa5bd9 Andy McCall 1 month ago ↶
525
# [ arg ( long ) ]
526
json: bool ,
98a1620a Andy McCall 1 month ago ↶
527
} ,
528
529
Restore {
530
531
op: String ,
532
533
# [ arg ( long ) ]
534
discard: bool ,
535
} ,
536
537
Revert {
538
539
op: String ,
c6aa5bd9 Andy McCall 1 month ago ↶
540
} ,
fce44ae9 Andy McCall 1 month ago ↶
541
}
542
543
# [ derive ( Subcommand ) ]
4e88e774 Andy McCall 1 month ago ↶
544
enum WorkspaceCmd {
545
d42369ab Andy McCall 1 month ago
546
Add {
547
548
path: PathBuf,
549
550
changes: Vec< String> ,
551
} ,
552
1196b29b Andy McCall 1 month ago ↶
553
List {
d42369ab Andy McCall 1 month ago
554
1196b29b Andy McCall 1 month ago ↶
555
# [ arg ( long ) ]
556
json: bool ,
557
} ,
4e88e774 Andy McCall 1 month ago ↶
558
d42369ab Andy McCall 1 month ago
559
Forget {
560
561
workspace: String ,
562
} ,
4e88e774 Andy McCall 1 month ago ↶
563
}
564
565
# [ derive ( Subcommand ) ]
957fee30 Andy McCall 1 month ago ↶
566
enum BisectCmd {
567
568
Start,
569
d42369ab Andy McCall 1 month ago
570
Good {
571
572
changes: Vec< String> ,
573
} ,
957fee30 Andy McCall 1 month ago ↶
574
d42369ab Andy McCall 1 month ago
575
Bad {
576
577
changes: Vec< String> ,
578
} ,
957fee30 Andy McCall 1 month ago ↶
579
580
Skip,
581
582
Run {
d42369ab Andy McCall 1 month ago
583
957fee30 Andy McCall 1 month ago ↶
584
# [ arg ( required = true, trailing_var_arg = true ) ]
585
command: Vec< String> ,
586
} ,
587
c6aa5bd9 Andy McCall 1 month ago ↶
588
Status {
d42369ab Andy McCall 1 month ago
589
c6aa5bd9 Andy McCall 1 month ago ↶
590
# [ arg ( long ) ]
591
json: bool ,
592
} ,
957fee30 Andy McCall 1 month ago ↶
593
594
Reset,
595
}
596
597
# [ derive ( Subcommand ) ]
7b9809e6 Andy McCall 1 month ago ↶
598
enum BookmarkCmd {
599
d42369ab Andy McCall 1 month ago
600
Create {
601
602
name: String ,
4fe7d604 Andy McCall 1 month ago ↶
603
604
605
606
d42369ab Andy McCall 1 month ago
607
changes: Vec< String> ,
4fe7d604 Andy McCall 1 month ago ↶
608
609
610
# [ arg ( long, conflicts_with = " only" ) ]
611
upto: bool ,
b9bf7eec Andy McCall 22 days ago ↶
612
613
614
615
4fe7d604 Andy McCall 1 month ago ↶
616
# [ arg ( long ) ]
617
only: bool ,
d42369ab Andy McCall 1 month ago
618
} ,
7b9809e6 Andy McCall 1 month ago ↶
619
d42369ab Andy McCall 1 month ago
620
Set {
621
622
name: String ,
06d16dc2 Andy McCall 1 month ago ↶
623
624
625
d42369ab Andy McCall 1 month ago
626
changes: Vec< String> ,
06d16dc2 Andy McCall 1 month ago ↶
627
628
629
# [ arg ( long, conflicts_with = " only" ) ]
630
upto: bool ,
b9bf7eec Andy McCall 22 days ago ↶
631
632
633
634
06d16dc2 Andy McCall 1 month ago ↶
635
# [ arg ( long ) ]
636
only: bool ,
d42369ab Andy McCall 1 month ago
637
} ,
7b9809e6 Andy McCall 1 month ago ↶
638
d42369ab Andy McCall 1 month ago
639
Delete {
640
641
name: String ,
642
} ,
7b9809e6 Andy McCall 1 month ago ↶
643
c6aa5bd9 Andy McCall 1 month ago ↶
644
List {
14edbaaf Andy McCall 1 month ago ↶
645
646
# [ arg ( long, short ) ]
647
all: bool ,
bf3a6781 Andy McCall 1 month ago ↶
648
649
# [ arg ( long, short ) ]
650
verbose: bool ,
d42369ab Andy McCall 1 month ago
651
c6aa5bd9 Andy McCall 1 month ago ↶
652
# [ arg ( long ) ]
653
json: bool ,
654
} ,
bf3a6781 Andy McCall 1 month ago ↶
655
656
657
658
Show {
659
660
name: Option< String> ,
661
662
# [ arg ( long ) ]
663
json: bool ,
664
} ,
61e3bce7 Andy McCall 1 month ago ↶
665
7b9809e6 Andy McCall 1 month ago ↶
666
Switch {
14edbaaf Andy McCall 1 month ago ↶
667
7b9809e6 Andy McCall 1 month ago ↶
668
name: String ,
669
670
# [ arg ( long ) ]
671
discard: bool ,
61e3bce7 Andy McCall 1 month ago ↶
672
673
674
# [ arg ( long, conflicts_with = " discard" ) ]
675
carry: bool ,
ff1f62fe Andy McCall 1 month ago ↶
676
} ,
677
}
678
679
# [ derive ( Subcommand ) ]
680
enum AuthCmd {
681
682
683
Login {
684
685
hub: Option< String> ,
686
687
# [ arg ( long ) ]
688
with_token: bool ,
689
690
# [ arg ( long ) ]
691
ca: Option< PathBuf> ,
7b9809e6 Andy McCall 1 month ago ↶
692
} ,
ff1f62fe Andy McCall 1 month ago ↶
693
694
Status,
695
696
Logout {
697
698
hub: Option< String> ,
699
} ,
c895bc52 Andy McCall 18 days ago ↶
700
701
702
703
704
705
Grant {
706
707
hub: Option< String> ,
708
} ,
7b9809e6 Andy McCall 1 month ago ↶
709
}
710
711
# [ derive ( Subcommand ) ]
4dee277c Andy McCall 1 month ago ↶
712
enum SubmoduleCmd {
713
714
Add {
d42369ab Andy McCall 1 month ago
715
4dee277c Andy McCall 1 month ago ↶
716
url: String ,
d42369ab Andy McCall 1 month ago
717
4dee277c Andy McCall 1 month ago ↶
718
path: String ,
719
720
# [ arg ( long ) ]
721
bookmark: Option< String> ,
722
} ,
723
724
Update {
725
726
# [ arg ( long ) ]
727
init: bool ,
d42369ab Andy McCall 1 month ago
728
4dee277c Andy McCall 1 month ago ↶
729
paths: Vec< String> ,
730
} ,
731
c6aa5bd9 Andy McCall 1 month ago ↶
732
Status {
d42369ab Andy McCall 1 month ago
733
c6aa5bd9 Andy McCall 1 month ago ↶
734
# [ arg ( long ) ]
735
json: bool ,
736
} ,
4dee277c Andy McCall 1 month ago ↶
737
d42369ab Andy McCall 1 month ago
738
Remove {
739
740
path: String ,
741
} ,
4dee277c Andy McCall 1 month ago ↶
742
}
743
744
# [ derive ( Subcommand ) ]
fc1a466a Andy McCall 1 month ago ↶
745
enum ReceiptCmd {
746
747
List {
748
749
rev: Option< String> ,
750
751
# [ arg ( long ) ]
752
json: bool ,
753
} ,
754
755
Show {
756
757
receipt: String ,
758
759
# [ arg ( long ) ]
760
rev: Option< String> ,
761
762
# [ arg ( long ) ]
763
json: bool ,
764
} ,
765
766
Export {
767
768
receipt: String ,
769
770
file: String ,
771
772
# [ arg ( long ) ]
773
rev: Option< String> ,
a39754d0 Andy McCall 18 days ago ↶
774
775
776
777
778
# [ arg ( long, default_value = " oxygen" , value_parser = [" oxygen" , " slsa" ] ) ]
779
format: String ,
fc1a466a Andy McCall 1 month ago ↶
780
} ,
781
782
Verify {
783
784
file: String ,
785
786
# [ arg ( long ) ]
787
json: bool ,
788
} ,
789
790
Import {
791
792
file: String ,
793
} ,
794
}
795
796
# [ derive ( Subcommand ) ]
132b884b Andy McCall 1 month ago ↶
797
enum TagCmd {
798
799
Create {
d42369ab Andy McCall 1 month ago
800
132b884b Andy McCall 1 month ago ↶
801
name: String ,
d42369ab Andy McCall 1 month ago
802
132b884b Andy McCall 1 month ago ↶
803
changes: Vec< String> ,
d42369ab Andy McCall 1 month ago
804
132b884b Andy McCall 1 month ago ↶
805
# [ arg ( short, long, default_value = " " ) ]
806
message: String ,
807
} ,
d42369ab Andy McCall 1 month ago
808
1196b29b Andy McCall 1 month ago ↶
809
List {
d42369ab Andy McCall 1 month ago
810
1196b29b Andy McCall 1 month ago ↶
811
# [ arg ( long ) ]
812
json: bool ,
813
} ,
132b884b Andy McCall 1 month ago ↶
814
}
815
816
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
817
enum RemoteCmd {
d42369ab Andy McCall 1 month ago
818
75167672 Andy McCall 1 month ago
819
Add {
d42369ab Andy McCall 1 month ago
820
75167672 Andy McCall 1 month ago
821
name: String ,
9aa39904 Andy McCall 1 month ago ↶
822
75167672 Andy McCall 1 month ago
823
url: String ,
9aa39904 Andy McCall 1 month ago ↶
824
825
# [ arg ( long ) ]
826
profile: Option< String> ,
827
828
# [ arg ( long ) ]
829
region: Option< String> ,
830
831
# [ arg ( long ) ]
832
endpoint: Option< String> ,
833
834
# [ arg ( long ) ]
835
credentials: Option< String> ,
75167672 Andy McCall 1 month ago
836
} ,
9aa39904 Andy McCall 1 month ago ↶
837
838
Check {
839
840
name: String ,
841
} ,
d42369ab Andy McCall 1 month ago
842
75167672 Andy McCall 1 month ago
843
Remove {
d42369ab Andy McCall 1 month ago
844
75167672 Andy McCall 1 month ago
845
name: String ,
846
} ,
d42369ab Andy McCall 1 month ago
847
c6aa5bd9 Andy McCall 1 month ago ↶
848
List {
d42369ab Andy McCall 1 month ago
849
c6aa5bd9 Andy McCall 1 month ago ↶
850
# [ arg ( long ) ]
851
json: bool ,
852
} ,
fce44ae9 Andy McCall 1 month ago ↶
853
}
854
855
# [ derive ( Subcommand ) ]
d82e4409 Andy McCall 1 month ago ↶
856
enum ProposalCmd {
857
858
Show {
d42369ab Andy McCall 1 month ago
859
d82e4409 Andy McCall 1 month ago ↶
860
url: String ,
d42369ab Andy McCall 1 month ago
861
d82e4409 Andy McCall 1 month ago ↶
862
# [ arg ( long ) ]
863
json: bool ,
864
} ,
865
866
Land {
d42369ab Andy McCall 1 month ago
867
d82e4409 Andy McCall 1 month ago ↶
868
url: String ,
869
870
# [ arg ( long ) ]
871
force: bool ,
872
} ,
873
}
874
875
# [ derive ( Subcommand ) ]
fce44ae9 Andy McCall 1 month ago ↶
876
enum IdentityCmd {
877
878
Create {
d42369ab Andy McCall 1 month ago
879
fce44ae9 Andy McCall 1 month ago ↶
880
# [ arg ( long ) ]
881
name: Option< String> ,
d42369ab Andy McCall 1 month ago
882
fce44ae9 Andy McCall 1 month ago ↶
883
# [ arg ( long ) ]
884
email: Option< String> ,
885
886
# [ arg ( long ) ]
887
local: bool ,
28fc23d7 Andy McCall 1 month ago ↶
888
889
# [ arg ( long ) ]
890
expires: Option< u64 > ,
fce44ae9 Andy McCall 1 month ago ↶
891
} ,
892
893
Show,
83e0677b Andy McCall 1 month ago ↶
894
d42369ab Andy McCall 1 month ago
895
Export {
a39754d0 Andy McCall 18 days ago ↶
896
d42369ab Andy McCall 1 month ago
897
path: Option< PathBuf> ,
a39754d0 Andy McCall 18 days ago ↶
898
899
900
# [ arg ( long ) ]
901
pem: bool ,
d42369ab Andy McCall 1 month ago
902
} ,
7aa2dc93 Andy McCall 1 month ago ↶
903
904
SignChallenge {
d42369ab Andy McCall 1 month ago
905
7aa2dc93 Andy McCall 1 month ago ↶
906
challenge: String ,
d42369ab Andy McCall 1 month ago
907
7aa2dc93 Andy McCall 1 month ago ↶
908
# [ arg ( long ) ]
909
json: bool ,
910
} ,
28fc23d7 Andy McCall 1 month ago ↶
911
912
Rotate,
913
914
Renew {
d42369ab Andy McCall 1 month ago
915
28fc23d7 Andy McCall 1 month ago ↶
916
# [ arg ( long ) ]
917
expires: u64 ,
918
} ,
919
920
Revoke {
921
922
key: Option< String> ,
d42369ab Andy McCall 1 month ago
923
28fc23d7 Andy McCall 1 month ago ↶
924
# [ arg ( long, default_value = " " ) ]
925
reason: String ,
926
} ,
927
928
Delegate {
929
# [ command ( subcommand ) ]
930
cmd: DelegateCmd,
931
} ,
932
}
933
934
# [ derive ( Subcommand ) ]
935
enum DelegateCmd {
936
d42369ab Andy McCall 1 month ago
937
Add {
614f55e1 Andy McCall 1 month ago ↶
938
939
# [ arg ( required = true ) ]
940
identity_file: Vec< PathBuf> ,
7ba155f2 Andy McCall 1 month ago ↶
941
942
943
# [ arg ( long, default_value = " changes" ) ]
944
scope: String ,
945
946
# [ arg ( long ) ]
947
expires: Option< String> ,
d42369ab Andy McCall 1 month ago
948
} ,
28fc23d7 Andy McCall 1 month ago ↶
949
d42369ab Andy McCall 1 month ago
950
Remove {
951
952
key: String ,
953
} ,
28fc23d7 Andy McCall 1 month ago ↶
954
955
List,
fce44ae9 Andy McCall 1 month ago ↶
956
}
957
83e0677b Andy McCall 1 month ago ↶
958
# [ derive ( Subcommand ) ]
79ab8528 Andy McCall 1 month ago ↶
959
enum GitCmd {
960
30ea9c1e Andy McCall 1 month ago ↶
961
Export {
d42369ab Andy McCall 1 month ago
962
30ea9c1e Andy McCall 1 month ago ↶
963
git_dir: PathBuf,
964
965
# [ arg ( long ) ]
966
branch: Option< String> ,
967
} ,
968
969
Fetch {
d42369ab Andy McCall 1 month ago
970
30ea9c1e Andy McCall 1 month ago ↶
971
url: String ,
d42369ab Andy McCall 1 month ago
972
30ea9c1e Andy McCall 1 month ago ↶
973
# [ arg ( long, default_value = " main" ) ]
974
branch: String ,
d6e0d5b8 Andy McCall 25 days ago ↶
975
976
# [ arg ( long ) ]
977
claim: bool ,
30ea9c1e Andy McCall 1 month ago ↶
978
} ,
979
980
Push {
d42369ab Andy McCall 1 month ago
981
30ea9c1e Andy McCall 1 month ago ↶
982
url: String ,
d42369ab Andy McCall 1 month ago
983
30ea9c1e Andy McCall 1 month ago ↶
984
# [ arg ( long, default_value = " main" ) ]
985
branch: String ,
986
} ,
54e2e630 Andy McCall 29 days ago ↶
987
988
Recover,
62794ecc Andy McCall 1 month ago ↶
989
990
Verify {
991
992
git_dir: PathBuf,
993
994
# [ arg ( long, default_value = " main" ) ]
995
branch: String ,
7eac74ab Andy McCall 1 month ago ↶
996
997
# [ arg ( long, value_name = " N" ) ]
998
last: Option< usize > ,
8b7986dd Andy McCall 26 days ago ↶
999
1000
# [ arg ( long, value_name = " N" , default_value_t = 50 ) ]
1001
max_differences: usize ,
62794ecc Andy McCall 1 month ago ↶
1002
} ,
c3069537 Andy McCall 1 month ago ↶
1003
1004
Import {
d42369ab Andy McCall 1 month ago
1005
c3069537 Andy McCall 1 month ago ↶
1006
git_dir: PathBuf,
d42369ab Andy McCall 1 month ago
1007
c3069537 Andy McCall 1 month ago ↶
1008
dest: PathBuf,
d42369ab Andy McCall 1 month ago
1009
c3069537 Andy McCall 1 month ago ↶
1010
# [ arg ( long, default_value = " main" ) ]
1011
branch: String ,
d6e0d5b8 Andy McCall 25 days ago ↶
1012
1013
# [ arg ( long ) ]
1014
claim: bool ,
c3069537 Andy McCall 1 month ago ↶
1015
} ,
79ab8528 Andy McCall 1 month ago ↶
1016
}
1017
1018
# [ derive ( Subcommand ) ]
83e0677b Andy McCall 1 month ago ↶
1019
enum PolicyCmd {
1020
1021
Init,
1022
c6aa5bd9 Andy McCall 1 month ago ↶
1023
Show {
d42369ab Andy McCall 1 month ago
1024
c6aa5bd9 Andy McCall 1 month ago ↶
1025
# [ arg ( long ) ]
1026
json: bool ,
1027
} ,
83e0677b Andy McCall 1 month ago ↶
1028
1029
Grant {
d42369ab Andy McCall 1 month ago
1030
83e0677b Andy McCall 1 month ago ↶
1031
identity_file: PathBuf,
1032
1033
# [ arg ( long ) ]
1034
pattern: Option< String> ,
28fc23d7 Andy McCall 1 month ago ↶
1035
1036
# [ arg ( long ) ]
1037
out: Option< PathBuf> ,
83e0677b Andy McCall 1 month ago ↶
1038
} ,
3a6effc7 Andy McCall 18 days ago ↶
1039
1040
GrantSubject {
1041
1042
subject: String ,
1043
1044
# [ arg ( long ) ]
1045
issuer: PathBuf,
1046
1047
# [ arg ( long, default_value = " changes,refs" ) ]
1048
scope: String ,
1049
1050
# [ arg ( long ) ]
1051
pattern: Option< String> ,
1052
1053
# [ arg ( long ) ]
1054
out: Option< PathBuf> ,
1055
} ,
83e0677b Andy McCall 1 month ago ↶
1056
28fc23d7 Andy McCall 1 month ago ↶
1057
Revoke {
d42369ab Andy McCall 1 month ago
1058
28fc23d7 Andy McCall 1 month ago ↶
1059
key: String ,
1060
1061
# [ arg ( long ) ]
1062
out: Option< PathBuf> ,
1063
} ,
1064
1065
Root {
1066
# [ command ( subcommand ) ]
1067
cmd: RootCmd,
1068
} ,
1069
1070
Sign {
d42369ab Andy McCall 1 month ago
1071
28fc23d7 Andy McCall 1 month ago ↶
1072
proposal: PathBuf,
1073
1074
# [ arg ( long ) ]
1075
out: Option< PathBuf> ,
1076
} ,
1077
}
1078
1079
# [ derive ( Subcommand ) ]
1080
enum RootCmd {
1081
1082
Add {
d42369ab Andy McCall 1 month ago
1083
28fc23d7 Andy McCall 1 month ago ↶
1084
identity_file: PathBuf,
d42369ab Andy McCall 1 month ago
1085
28fc23d7 Andy McCall 1 month ago ↶
1086
# [ arg ( long ) ]
1087
out: Option< PathBuf> ,
1088
} ,
1089
1090
Remove {
d42369ab Andy McCall 1 month ago
1091
28fc23d7 Andy McCall 1 month ago ↶
1092
key: String ,
d42369ab Andy McCall 1 month ago
1093
28fc23d7 Andy McCall 1 month ago ↶
1094
# [ arg ( long ) ]
1095
out: Option< PathBuf> ,
1096
} ,
1097
1098
Threshold {
d42369ab Andy McCall 1 month ago
1099
28fc23d7 Andy McCall 1 month ago ↶
1100
n: u32 ,
d42369ab Andy McCall 1 month ago
1101
28fc23d7 Andy McCall 1 month ago ↶
1102
# [ arg ( long ) ]
1103
out: Option< PathBuf> ,
1104
} ,
83e0677b Andy McCall 1 month ago ↶
1105
}
1106
fce44ae9 Andy McCall 1 month ago ↶
1107
1108
fn open ( ) -> Result< Repo> {
98a1620a Andy McCall 1 month ago ↶
1109
let repo = Repo:: open( & std:: env:: current_dir( ) ? ) .context ( " opening repository" ) ? ;
1110
match AT_OP .get ( ) .and_then ( | o | o.as_deref ( ) ) {
1111
Some ( op) => Ok ( repo.at_op ( op) ? ) ,
1112
None => Ok ( repo) ,
1113
}
fce44ae9 Andy McCall 1 month ago ↶
1114
}
1115
d42369ab Andy McCall 1 month ago
1116
1117
fn man ( dir : Option< PathBuf> ) -> Result< i32 > {
1118
use clap:: CommandFactory;
1119
let cmd = Cli:: command( ) ;
1120
match dir {
1121
Some ( dir) => {
1122
std:: fs:: create_dir_all( & dir) ? ;
1123
clap_mangen:: generate_to( cmd, & dir) ? ;
1124
let pages = std:: fs:: read_dir( & dir) ?
1125
.filter ( | e | {
1126
e.as_ref ( )
1127
.is_ok_and ( | e | e.path ( ) .extension ( ) .is_some_and ( | x | x = = " 1" ) )
1128
} )
1129
.count ( ) ;
1130
println! (
1131
" {} " ,
1132
ui:: done( format! ( " Wrote {pages} man pages to {} " , dir.display ( ) ) )
1133
) ;
1134
}
1135
None => clap_mangen:: Man:: new( cmd) .render ( & mut std:: io:: stdout( ) ) ? ,
1136
}
1137
Ok ( 0 )
1138
}
1139
fce44ae9 Andy McCall 1 month ago ↶
1140
1141
pub fn run ( ) -> Result< i32 > {
8d803563 Andy McCall 1 month ago ↶
1142
1143
oxy_strata:: register( ) ;
fce44ae9 Andy McCall 1 month ago ↶
1144
let cli = Cli:: parse( ) ;
135212de Andy McCall 1 month ago ↶
1145
ui:: init( cli.plain) ;
98a1620a Andy McCall 1 month ago ↶
1146
AT_OP .set ( cli.at_op.clone ( ) ) .ok ( ) ;
fce44ae9 Andy McCall 1 month ago ↶
1147
match cli.cmd {
d42369ab Andy McCall 1 month ago
1148
Cmd:: Completions { shell } => {
1149
use clap:: CommandFactory;
1150
clap_complete:: generate( shell, & mut Cli:: command( ) , " oxy" , & mut std:: io:: stdout( ) ) ;
1151
Ok ( 0 )
1152
}
1153
Cmd:: Man { dir } => man ( dir) ,
d069701a Andy McCall 1 month ago ↶
1154
Cmd:: Init { path, bare, store } => workspace:: init( path, bare, store.as_deref ( ) ) ,
50a046e4 Andy McCall 1 month ago ↶
1155
Cmd:: Status { json } => workspace:: status( json) ,
75167672 Andy McCall 1 month ago
1156
Cmd:: Prompt {
1157
format,
1158
glyphs,
1159
color,
1160
} => workspace:: prompt( & format, glyphs, color.as_deref ( ) ) ,
1161
Cmd:: Commit {
1162
message,
6a81dbab Andy McCall 1 month ago ↶
1163
file,
75167672 Andy McCall 1 month ago
1164
depends_on,
1165
paths,
1166
interactive,
1167
hunks,
6a81dbab Andy McCall 1 month ago ↶
1168
} => {
1169
let message = match ( message, file) {
1170
( Some ( m) , _ ) => m,
1171
( None , Some ( f) ) if f.as_os_str ( ) = = " -" => {
1172
let mut s = String :: new( ) ;
1173
std:: io:: Read:: read_to_string( & mut std:: io:: stdin( ) , & mut s) ? ;
1174
s
1175
}
1176
( None , Some ( f) ) => std:: fs:: read_to_string( & f) .map_err ( | e | {
1177
anyhow:: anyhow! ( " reading the message from {}: {e}" , f.display ( ) )
1178
} ) ? ,
1179
( None , None ) => anyhow:: bail! ( " a commit message is required (-m or -F)" ) ,
1180
} ;
1181
workspace:: commit( & message, & depends_on, & paths, interactive, & hunks)
1182
}
c6aa5bd9 Andy McCall 1 month ago ↶
1183
Cmd:: Cat { path, change } => workspace:: cat( & path, change.as_deref ( ) ) ,
1184
Cmd:: Root { json } => workspace:: root( json) ,
1185
Cmd:: Version { json } => workspace:: version( json) ,
1186
Cmd:: Discard { paths, hunks } => workspace:: discard( & paths, & hunks) ,
1187
Cmd:: Hunks { json } => workspace:: hunks( json) ,
728da0f9 Andy McCall 1 month ago ↶
1188
Cmd:: Squash { change, into } => workspace:: squash( & change, & into) ,
e266b7d4 Andy McCall 1 month ago ↶
1189
Cmd:: Rebase {
1190
change,
1191
onto,
1192
into_working_copy,
1193
} => workspace:: rebase( & change, & onto, into_working_copy) ,
957fee30 Andy McCall 1 month ago ↶
1194
Cmd:: Blame { path, json } => workspace:: blame( & path, json) ,
1195
Cmd:: Bisect { cmd } => match cmd {
1196
BisectCmd:: Start => workspace:: bisect_start( ) ,
1197
BisectCmd:: Good { changes } => workspace:: bisect_mark( Some ( true ) , & changes) ,
1198
BisectCmd:: Bad { changes } => workspace:: bisect_mark( Some ( false ) , & changes) ,
1199
BisectCmd:: Skip => workspace:: bisect_mark( None , & [ ] ) ,
1200
BisectCmd:: Run { command } => workspace:: bisect_run( & command) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1201
BisectCmd:: Status { json } => workspace:: bisect_status( json) ,
957fee30 Andy McCall 1 month ago ↶
1202
BisectCmd:: Reset => workspace:: bisect_reset( ) ,
1203
} ,
75167672 Andy McCall 1 month ago
1204
Cmd:: Log {
47ce8b8e Andy McCall 1 month ago ↶
1205
revset,
75167672 Andy McCall 1 month ago
1206
limit,
1207
verbose,
1208
path,
83d61e80 Andy McCall 1 month ago ↶
1209
lines,
75167672 Andy McCall 1 month ago
1210
json,
47ce8b8e Andy McCall 1 month ago ↶
1211
} => workspace:: log(
1212
revset.as_deref ( ) ,
1213
limit,
1214
verbose,
1215
path.as_deref ( ) ,
1216
lines.as_deref ( ) ,
1217
json,
1218
) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1219
Cmd:: Diff { change, json } => workspace:: diff( change.as_deref ( ) , json) ,
6a81dbab Andy McCall 1 month ago ↶
1220
Cmd:: Describe {
1221
message,
1222
change,
1223
json,
1224
} => match message {
1225
Some ( m) => workspace:: describe( & m, change.as_deref ( ) ) ,
1226
None if change.is_some ( ) => {
1227
anyhow:: bail! (
1228
" naming works on the working copy; to change a head's message pass -m"
1229
)
1230
}
1231
None => workspace:: describe_name( json) ,
1232
} ,
23b217d7 Andy McCall 1 month ago ↶
1233
Cmd:: Amend { message, into } => workspace:: amend( message.as_deref ( ) , into.as_deref ( ) ) ,
1234
Cmd:: Split { change, paths } => workspace:: split( & change, & paths) ,
2c9ddac3 Andy McCall 1 month ago ↶
1235
Cmd:: Abandon {
1236
change,
1237
revset,
1238
yes,
1239
} => workspace:: abandon( change.as_deref ( ) , revset.as_deref ( ) , yes) ,
1240
Cmd:: Show {
1241
change,
1242
revset,
1243
json,
1244
} => workspace:: show( change.as_deref ( ) , revset.as_deref ( ) , json) ,
1c2bd9ab Andy McCall 1 month ago ↶
1245
Cmd:: Checkout {
1246
changes,
1247
discard,
1248
carry,
1249
} => workspace:: checkout( & changes, discard, carry) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1250
Cmd:: Resolve { json } => workspace:: resolve( json) ,
fce44ae9 Andy McCall 1 month ago ↶
1251
Cmd:: Undo => workspace:: undo( ) ,
b689779e Andy McCall 24 days ago ↶
1252
Cmd:: Gc {
1253
now,
1254
expire_snapshots,
1255
remote,
1256
} => match remote {
d8d93678 Andy McCall 1 month ago ↶
1257
Some ( name) => workspace:: gc_remote( & name, now) ,
b689779e Andy McCall 24 days ago ↶
1258
None => workspace:: gc( now, expire_snapshots) ,
d8d93678 Andy McCall 1 month ago ↶
1259
} ,
387335ff Andy McCall 1 month ago ↶
1260
Cmd:: Fsck { json } => workspace:: fsck( json) ,
3e5772cc Andy McCall 1 month ago ↶
1261
Cmd:: Doctor { offline, json } => workspace:: doctor( offline, json) ,
252e8cb2 Andy McCall 1 month ago ↶
1262
Cmd:: Checkpoint => workspace:: checkpoint( ) ,
98a1620a Andy McCall 1 month ago ↶
1263
Cmd:: Op { cmd } => match cmd {
1264
OpCmd:: Log { limit, json } => workspace:: op_log( limit, json) ,
1265
OpCmd:: Restore { op, discard } => workspace:: op_restore( & op, discard) ,
1266
OpCmd:: Revert { op } => workspace:: op_revert( & op) ,
1267
} ,
75167672 Andy McCall 1 month ago
1268
Cmd:: Clone {
1269
url,
1270
dest,
1271
max_blob,
1272
sparse,
1273
depth,
14edbaaf Andy McCall 1 month ago ↶
1274
recursive,
1275
} => sync:: clone( & url, dest, max_blob.as_deref ( ) , & sparse, depth, recursive) ,
2863456a Andy McCall 1 month ago ↶
1276
Cmd:: Deepen { depth, remote } => sync:: deepen( & remote, depth) ,
7421309f Andy McCall 1 month ago ↶
1277
Cmd:: Sparse { paths } => workspace:: sparse( & paths) ,
cdb5beba Andy McCall 1 month ago ↶
1278
Cmd:: Lock { path } => workspace:: lock( & path) ,
1279
Cmd:: Unlock { path } => workspace:: unlock( & path) ,
4e88e774 Andy McCall 1 month ago ↶
1280
Cmd:: Workspace { cmd } => match cmd {
1281
WorkspaceCmd:: Add { path, changes } => workspace:: workspace_add( & path, & changes) ,
1196b29b Andy McCall 1 month ago ↶
1282
WorkspaceCmd:: List { json } => workspace:: workspace_list( json) ,
4e88e774 Andy McCall 1 month ago ↶
1283
WorkspaceCmd:: Forget { workspace } => workspace:: workspace_forget( & workspace) ,
1284
} ,
7b9809e6 Andy McCall 1 month ago ↶
1285
Cmd:: Bookmark { cmd } => match cmd {
4fe7d604 Andy McCall 1 month ago ↶
1286
BookmarkCmd:: Create {
1287
name,
1288
changes,
1289
upto,
1290
only,
1291
} => workspace:: bookmark_create( & name, & changes, upto, only) ,
06d16dc2 Andy McCall 1 month ago ↶
1292
BookmarkCmd:: Set {
1293
name,
1294
changes,
1295
upto,
1296
only,
1297
} => workspace:: bookmark_set( & name, & changes, upto, only) ,
7b9809e6 Andy McCall 1 month ago ↶
1298
BookmarkCmd:: Delete { name } => workspace:: bookmark_delete( & name) ,
bf3a6781 Andy McCall 1 month ago ↶
1299
BookmarkCmd:: List { all, verbose, json } => {
1300
workspace:: bookmark_list( all, verbose, json)
1301
}
1302
BookmarkCmd:: Show { name, json } => workspace:: bookmark_show( name.as_deref ( ) , json) ,
61e3bce7 Andy McCall 1 month ago ↶
1303
BookmarkCmd:: Switch {
1304
name,
1305
discard,
1306
carry,
1307
} => workspace:: bookmark_switch( & name, discard, carry) ,
7b9809e6 Andy McCall 1 month ago ↶
1308
} ,
1309
Cmd:: Merge { bookmark } => workspace:: merge( & bookmark) ,
ff1f62fe Andy McCall 1 month ago ↶
1310
Cmd:: Auth { cmd } => match cmd {
1311
AuthCmd:: Login {
1312
hub,
1313
with_token,
1314
ca,
1315
} => auth:: login( hub.as_deref ( ) , with_token, ca) ,
1316
AuthCmd:: Status => auth:: status( ) ,
1317
AuthCmd:: Logout { hub } => auth:: logout( hub.as_deref ( ) ) ,
c895bc52 Andy McCall 18 days ago ↶
1318
AuthCmd:: Grant { hub } => auth:: grant( hub.as_deref ( ) ) ,
ff1f62fe Andy McCall 1 month ago ↶
1319
} ,
4dee277c Andy McCall 1 month ago ↶
1320
Cmd:: Submodule { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1321
SubmoduleCmd:: Add {
1322
url,
1323
path,
1324
bookmark,
1325
} => sync:: submodule_add( & url, & path, bookmark.as_deref ( ) ) ,
4dee277c Andy McCall 1 month ago ↶
1326
SubmoduleCmd:: Update { init, paths } => sync:: submodule_update( init, & paths) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1327
SubmoduleCmd:: Status { json } => sync:: submodule_status( json) ,
4dee277c Andy McCall 1 month ago ↶
1328
SubmoduleCmd:: Remove { path } => sync:: submodule_remove( & path) ,
fc1a466a Andy McCall 1 month ago ↶
1329
} ,
1330
Cmd:: Receipt { cmd } => match cmd {
1331
ReceiptCmd:: List { rev, json } => receipt:: list( rev.as_deref ( ) , json) ,
1332
ReceiptCmd:: Show {
1333
receipt: r,
1334
rev,
1335
json,
1336
} => receipt:: show( & r, rev.as_deref ( ) , json) ,
1337
ReceiptCmd:: Export {
1338
receipt: r,
1339
file,
1340
rev,
a39754d0 Andy McCall 18 days ago ↶
1341
format,
1342
} => receipt:: export( & r, & file, rev.as_deref ( ) , & format) ,
fc1a466a Andy McCall 1 month ago ↶
1343
ReceiptCmd:: Verify { file, json } => receipt:: verify( & file, json) ,
1344
ReceiptCmd:: Import { file } => receipt:: import( & file) ,
4dee277c Andy McCall 1 month ago ↶
1345
} ,
132b884b Andy McCall 1 month ago ↶
1346
Cmd:: Tag { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1347
TagCmd:: Create {
1348
name,
1349
changes,
1350
message,
1351
} => workspace:: tag_create( & name, & changes, & message) ,
1196b29b Andy McCall 1 month ago ↶
1352
TagCmd:: List { json } => workspace:: tag_list( json) ,
132b884b Andy McCall 1 month ago ↶
1353
} ,
fce44ae9 Andy McCall 1 month ago ↶
1354
Cmd:: Remote { cmd } => match cmd {
9aa39904 Andy McCall 1 month ago ↶
1355
RemoteCmd:: Add {
1356
name,
1357
url,
1358
profile,
1359
region,
1360
endpoint,
1361
credentials,
1362
} => sync:: remote_add(
1363
& name,
1364
& url,
1365
& [
1366
( " profile" , profile) ,
1367
( " region" , region) ,
1368
( " endpoint" , endpoint) ,
1369
( " credentials" , credentials) ,
1370
] ,
1371
) ,
1372
RemoteCmd:: Check { name } => sync:: remote_check( & name) ,
fce44ae9 Andy McCall 1 month ago ↶
1373
RemoteCmd:: Remove { name } => sync:: remote_remove( & name) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1374
RemoteCmd:: List { json } => sync:: remote_list( json) ,
fce44ae9 Andy McCall 1 month ago ↶
1375
} ,
c6aa5bd9 Andy McCall 1 month ago ↶
1376
Cmd:: Fetch { remote, json } => sync:: fetch( remote.as_deref ( ) , json) ,
1377
Cmd:: Pull { remote, json } => sync:: pull( remote.as_deref ( ) , json) ,
75167672 Andy McCall 1 month ago
1378
Cmd:: Push {
1379
remote,
1380
force,
1381
bookmark,
f8c69576 Andy McCall 1 month ago ↶
1382
delete,
75167672 Andy McCall 1 month ago
1383
json,
f8c69576 Andy McCall 1 month ago ↶
1384
} => match delete {
1385
Some ( name) => sync:: push_delete( remote.as_deref ( ) , & name, json) ,
1386
None => sync:: push( remote.as_deref ( ) , force, bookmark.as_deref ( ) , json) ,
1387
} ,
75167672 Andy McCall 1 month ago
1388
Cmd:: Serve {
1389
root,
1390
bind,
1391
tokens,
1392
tls_cert,
1393
tls_key,
1394
} => sync:: serve( root, & bind, tokens, tls_cert.zip ( tls_key) ) ,
fce44ae9 Andy McCall 1 month ago ↶
1395
Cmd:: Identity { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1396
IdentityCmd:: Create {
1397
name,
1398
email,
1399
local,
1400
expires,
1401
} => identity:: create( name, email, local, expires) ,
fce44ae9 Andy McCall 1 month ago ↶
1402
IdentityCmd:: Show => identity:: show( ) ,
a39754d0 Andy McCall 18 days ago ↶
1403
IdentityCmd:: Export { path, pem } => identity:: export( path, pem) ,
119bbf50 Andy McCall 1 month ago ↶
1404
IdentityCmd:: SignChallenge { challenge, json } => {
1405
identity:: sign_challenge( & challenge, json)
1406
}
28fc23d7 Andy McCall 1 month ago ↶
1407
IdentityCmd:: Rotate => identity:: rotate( ) ,
1408
IdentityCmd:: Renew { expires } => identity:: renew( expires) ,
1409
IdentityCmd:: Revoke { key, reason } => identity:: revoke( key.as_deref ( ) , & reason) ,
1410
IdentityCmd:: Delegate { cmd } => match cmd {
7ba155f2 Andy McCall 1 month ago ↶
1411
DelegateCmd:: Add {
1412
identity_file,
1413
scope,
1414
expires,
1415
} => identity:: delegate_add( & identity_file, & scope, expires.as_deref ( ) ) ,
28fc23d7 Andy McCall 1 month ago ↶
1416
DelegateCmd:: Remove { key } => identity:: delegate_remove( & key) ,
1417
DelegateCmd:: List => identity:: delegate_list( ) ,
1418
} ,
83e0677b Andy McCall 1 month ago ↶
1419
} ,
75167672 Andy McCall 1 month ago
1420
Cmd:: Git {
1421
cmd: GitCmd:: Export { git_dir, branch } ,
1422
} => sync:: git_export( & git_dir, branch.as_deref ( ) ) ,
1423
Cmd:: Git {
d6e0d5b8 Andy McCall 25 days ago ↶
1424
cmd: GitCmd:: Fetch { url, branch, claim } ,
1425
} => sync:: git_fetch( & url, & branch, claim) ,
75167672 Andy McCall 1 month ago
1426
Cmd:: Git {
1427
cmd: GitCmd:: Push { url, branch } ,
1428
} => sync:: git_push( & url, & branch) ,
1429
Cmd:: Git {
54e2e630 Andy McCall 29 days ago ↶
1430
cmd: GitCmd:: Recover,
1431
} => sync:: git_recover( ) ,
1432
Cmd:: Git {
75167672 Andy McCall 1 month ago
1433
cmd:
1434
GitCmd:: Import {
1435
git_dir,
1436
dest,
1437
branch,
d6e0d5b8 Andy McCall 25 days ago ↶
1438
claim,
75167672 Andy McCall 1 month ago
1439
} ,
d6e0d5b8 Andy McCall 25 days ago ↶
1440
} => sync:: git_import( & git_dir, & dest, & branch, claim) ,
62794ecc Andy McCall 1 month ago ↶
1441
Cmd:: Git {
7eac74ab Andy McCall 1 month ago ↶
1442
cmd:
1443
GitCmd:: Verify {
1444
git_dir,
1445
branch,
1446
last,
8b7986dd Andy McCall 26 days ago ↶
1447
max_differences,
7eac74ab Andy McCall 1 month ago ↶
1448
} ,
8b7986dd Andy McCall 26 days ago ↶
1449
} => sync:: git_verify( & git_dir, & branch, last, max_differences) ,
83e0677b Andy McCall 1 month ago ↶
1450
Cmd:: Policy { cmd } => match cmd {
1451
PolicyCmd:: Init => identity:: policy_init( ) ,
c6aa5bd9 Andy McCall 1 month ago ↶
1452
PolicyCmd:: Show { json } => identity:: policy_show( json) ,
75167672 Andy McCall 1 month ago
1453
PolicyCmd:: Grant {
1454
identity_file,
1455
pattern,
1456
out,
1457
} => identity:: policy_grant( & identity_file, pattern.as_deref ( ) , out) ,
3a6effc7 Andy McCall 18 days ago ↶
1458
PolicyCmd:: GrantSubject {
1459
subject,
1460
issuer,
1461
scope,
1462
pattern,
1463
out,
1464
} => identity:: policy_grant_subject( & subject, & issuer, & scope, pattern.as_deref ( ) , out) ,
28fc23d7 Andy McCall 1 month ago ↶
1465
PolicyCmd:: Revoke { key, out } => identity:: policy_revoke( & key, out) ,
1466
PolicyCmd:: Root { cmd } => match cmd {
75167672 Andy McCall 1 month ago
1467
RootCmd:: Add { identity_file, out } => {
1468
identity:: policy_root_add( & identity_file, out)
1469
}
28fc23d7 Andy McCall 1 month ago ↶
1470
RootCmd:: Remove { key, out } => identity:: policy_root_remove( & key, out) ,
1471
RootCmd:: Threshold { n, out } => identity:: policy_threshold( n, out) ,
1472
} ,
1473
PolicyCmd:: Sign { proposal, out } => identity:: policy_sign( & proposal, out) ,
fce44ae9 Andy McCall 1 month ago ↶
1474
} ,
4213c41d Andy McCall 1 month ago ↶
1475
Cmd:: Seal {
b582948f Andy McCall 19 days ago ↶
1476
flow: Some ( url) ,
1477
job: Some ( job) ,
1478
reject,
1479
json,
1480
..
1481
} => approve:: seal( & url, & job, reject, json) ,
1482
Cmd:: Seal {
4213c41d Andy McCall 1 month ago ↶
1483
changes,
1484
proposal: Some ( url) ,
1485
json,
b582948f Andy McCall 19 days ago ↶
1486
..
4213c41d Andy McCall 1 month ago ↶
1487
} if changes.is_empty ( ) => proposal:: seal( & url, json) ,
d82e4409 Andy McCall 1 month ago ↶
1488
Cmd:: Seal { changes, json, .. } => identity:: seal( & changes, json) ,
1489
Cmd:: Proposal { cmd } => match cmd {
1490
ProposalCmd:: Show { url, json } => proposal:: show( & url, json) ,
1491
ProposalCmd:: Land { url, force } => proposal:: land( & url, force) ,
1492
} ,
2c9ddac3 Andy McCall 1 month ago ↶
1493
Cmd:: Verify {
1494
change,
1495
revset,
1496
json,
1497
} => identity:: verify( change.as_deref ( ) , revset.as_deref ( ) , json) ,
614f55e1 Andy McCall 1 month ago ↶
1498
Cmd:: Config {
1499
key,
1500
value,
1501
user,
1502
unset,
1503
} => identity:: config( & key, value.as_deref ( ) .unwrap_or ( " " ) , user, unset) ,
fce44ae9 Andy McCall 1 month ago ↶
1504
}
1505
}
d42369ab Andy McCall 1 month ago
1506
1507
# [ cfg ( test ) ]
1508
mod help_tests {
1509
use super :: Cli;
1510
use clap:: CommandFactory;
1511
1512
1513
1514
# [ test ]
1515
fn every_command_and_argument_has_help ( ) {
1516
fn walk ( cmd : & clap:: Command, path : & str , missing : & mut Vec< String> ) {
1517
let here = format! ( " {path} {} " , cmd.get_name ( ) ) .trim ( ) .to_string ( ) ;
99e3e0af Andy McCall 1 month ago ↶
1518
if cmd.get_about ( ) .is_none ( ) & & ! path.is_empty ( ) {
d42369ab Andy McCall 1 month ago
1519
missing.push ( format! ( " {here} (command)" ) ) ;
1520
}
1521
for a in cmd.get_arguments ( ) {
1522
let id = a.get_id ( ) .as_str ( ) ;
99e3e0af Andy McCall 1 month ago ↶
1523
if id = = " help" | | id = = " version" | | ( a.is_global_set ( ) & & ! path.is_empty ( ) ) {
d42369ab Andy McCall 1 month ago
1524
continue ;
1525
}
1526
if a.get_help ( ) .is_none ( ) & & a.get_long_help ( ) .is_none ( ) {
1527
missing.push ( format! ( " {here} {id} " ) ) ;
1528
}
1529
}
1530
for sub in cmd.get_subcommands ( ) {
1531
walk ( sub, & here, missing) ;
1532
}
1533
}
1534
let mut missing = Vec :: new( ) ;
1535
walk ( & Cli:: command( ) , " " , & mut missing) ;
1536
assert! (
1537
missing.is_empty ( ) ,
1538
" {} without help:\n {}" ,
1539
missing.len ( ) ,
1540
missing.join ( " \n " )
1541
) ;
1542
}
1543
}