6
6
#![ deny( warnings) ]
7
7
8
8
extern crate cargo_registry;
9
- extern crate postgres;
10
- extern crate time;
9
+ extern crate diesel;
11
10
extern crate semver;
12
11
12
+ use diesel:: prelude:: * ;
13
+ use diesel:: pg:: PgConnection ;
13
14
use std:: env;
14
15
use std:: io;
15
16
use std:: io:: prelude:: * ;
16
17
17
18
use cargo_registry:: { Crate , User } ;
18
19
use cargo_registry:: owner:: OwnerKind ;
19
- use cargo_registry:: Model ;
20
+ use cargo_registry:: schema :: * ;
20
21
21
- #[ allow( dead_code) ]
22
22
fn main ( ) {
23
- let conn = cargo_registry:: db:: connect_now_old ( ) ;
24
- {
25
- let tx = conn. transaction ( ) . unwrap ( ) ;
26
- transfer ( & tx) ;
27
- tx. set_commit ( ) ;
28
- tx. finish ( ) . unwrap ( ) ;
29
- }
23
+ let conn = cargo_registry:: db:: connect_now ( ) . unwrap ( ) ;
24
+ conn. transaction :: < _ , diesel:: result:: Error , _ > ( || {
25
+ transfer ( & conn) ;
26
+ Ok ( ( ) )
27
+ } ) . unwrap ( )
30
28
}
31
29
32
- fn transfer ( tx : & postgres :: transaction :: Transaction ) {
30
+ fn transfer ( conn : & PgConnection ) {
33
31
let from = match env:: args ( ) . nth ( 1 ) {
34
32
None => {
35
33
println ! ( "needs a from-user argument" ) ;
@@ -45,8 +43,14 @@ fn transfer(tx: &postgres::transaction::Transaction) {
45
43
Some ( s) => s,
46
44
} ;
47
45
48
- let from = User :: find_by_login ( tx, & from) . unwrap ( ) ;
49
- let to = User :: find_by_login ( tx, & to) . unwrap ( ) ;
46
+ let from = users:: table
47
+ . filter ( users:: gh_login. eq ( from) )
48
+ . first :: < User > ( conn)
49
+ . unwrap ( ) ;
50
+ let to = users:: table
51
+ . filter ( users:: gh_login. eq ( to) )
52
+ . first :: < User > ( conn)
53
+ . unwrap ( ) ;
50
54
51
55
if from. gh_id != to. gh_id {
52
56
println ! ( "====================================================" ) ;
@@ -67,27 +71,27 @@ fn transfer(tx: &postgres::transaction::Transaction) {
67
71
) ;
68
72
get_confirm ( "continue" ) ;
69
73
70
- let stmt = tx. prepare (
71
- "SELECT * FROM crate_owners
72
- WHERE owner_id = $1
73
- AND owner_kind = $2" ,
74
- ) . unwrap ( ) ;
75
- let rows = stmt. query ( & [ & from. id , & ( OwnerKind :: User as i32 ) ] ) . unwrap ( ) ;
74
+ let crate_owners = crate_owners:: table
75
+ . filter ( crate_owners:: owner_id. eq ( from. id ) )
76
+ . filter ( crate_owners:: owner_kind. eq ( OwnerKind :: User as i32 ) ) ;
77
+ let crates = Crate :: all ( )
78
+ . filter ( crates:: id. eq_any (
79
+ crate_owners. select ( crate_owners:: crate_id) ,
80
+ ) )
81
+ . load :: < Crate > ( conn)
82
+ . unwrap ( ) ;
76
83
77
- for row in rows. iter ( ) {
78
- let krate = Crate :: find ( tx, row. get ( "crate_id" ) ) . unwrap ( ) ;
79
- println ! ( "transferring {}" , krate. name) ;
80
- let owners = krate. owners_old ( tx) . unwrap ( ) ;
84
+ for krate in crates {
85
+ let owners = krate. owners ( conn) . unwrap ( ) ;
81
86
if owners. len ( ) != 1 {
82
87
println ! ( "warning: not exactly one owner for {}" , krate. name) ;
83
88
}
84
89
}
85
90
86
- tx. execute (
87
- "UPDATE crate_owners SET owner_id = $1
88
- WHERE owner_id = $2" ,
89
- & [ & to. id , & from. id ] ,
90
- ) . unwrap ( ) ;
91
+ diesel:: update ( crate_owners)
92
+ . set ( crate_owners:: owner_id. eq ( to. id ) )
93
+ . execute ( conn)
94
+ . unwrap ( ) ;
91
95
92
96
get_confirm ( "commit?" ) ;
93
97
}
0 commit comments