1
- // Transfer all crates from one user to another.
2
- //
3
- // Usage:
4
- // cargo run --bin transfer-crates from-user to-user
5
-
6
1
#![ warn( clippy:: all, rust_2018_idioms) ]
7
2
8
3
use cargo_registry:: {
@@ -11,13 +6,25 @@ use cargo_registry::{
11
6
schema:: { crate_owners, crates, users} ,
12
7
} ;
13
8
use std:: {
14
- env,
15
9
io:: { self , prelude:: * } ,
16
10
process:: exit,
17
11
} ;
18
12
13
+ use clap:: Clap ;
19
14
use diesel:: prelude:: * ;
20
15
16
+ #[ derive( Clap , Debug ) ]
17
+ #[ clap(
18
+ name = "transfer-crates" ,
19
+ about = "Transfer all crates from one user to another."
20
+ ) ]
21
+ struct Opts {
22
+ /// GitHub login of the "from" user
23
+ from_user : String ,
24
+ /// GitHub login of the "to" user
25
+ to_user : String ,
26
+ }
27
+
21
28
fn main ( ) {
22
29
let conn = db:: connect_now ( ) . unwrap ( ) ;
23
30
conn. transaction :: < _ , diesel:: result:: Error , _ > ( || {
@@ -28,27 +35,15 @@ fn main() {
28
35
}
29
36
30
37
fn transfer ( conn : & PgConnection ) {
31
- let from = match env:: args ( ) . nth ( 1 ) {
32
- None => {
33
- println ! ( "needs a from-user argument" ) ;
34
- return ;
35
- }
36
- Some ( s) => s,
37
- } ;
38
- let to = match env:: args ( ) . nth ( 2 ) {
39
- None => {
40
- println ! ( "needs a to-user argument" ) ;
41
- return ;
42
- }
43
- Some ( s) => s,
44
- } ;
38
+ let opts: Opts = Opts :: parse ( ) ;
45
39
46
40
let from: User = users:: table
47
- . filter ( users:: gh_login. eq ( from ) )
41
+ . filter ( users:: gh_login. eq ( opts . from_user ) )
48
42
. first ( conn)
49
43
. unwrap ( ) ;
44
+
50
45
let to: User = users:: table
51
- . filter ( users:: gh_login. eq ( to ) )
46
+ . filter ( users:: gh_login. eq ( opts . to_user ) )
52
47
. first ( conn)
53
48
. unwrap ( ) ;
54
49
0 commit comments