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