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