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