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