@@ -20,14 +20,26 @@ impl DocBuilder {
20
20
21
21
let diff = try!( repo. diff_tree_to_tree ( Some ( & old_tree) , Some ( & new_tree) , None ) ) ;
22
22
let conn = try!( connect_db ( ) ) ;
23
+ let mut line_n = 0 ;
23
24
24
- try!( diff. print ( git2:: DiffFormat :: Patch , |_, _ , diffline| -> bool {
25
+ try!( diff. print ( git2:: DiffFormat :: Patch , |_, hunk , diffline| -> bool {
25
26
let line = String :: from_utf8_lossy ( diffline. content ( ) ) . into_owned ( ) ;
26
27
// crate strings starts with '{'
27
28
// skip if line is not a crate string
28
29
if line. chars ( ) . nth ( 0 ) != Some ( '{' ) {
30
+ line_n = 0 ;
29
31
return true ;
30
32
}
33
+
34
+ line_n += 1 ;
35
+
36
+ if match hunk {
37
+ Some ( hunk) => hunk. new_lines ( ) != line_n,
38
+ None => true ,
39
+ } {
40
+ return true ;
41
+ }
42
+
31
43
let json = match Json :: from_str ( & line[ ..] ) {
32
44
Ok ( j) => j,
33
45
Err ( err) => {
@@ -37,13 +49,21 @@ impl DocBuilder {
37
49
}
38
50
} ;
39
51
52
+ // check if a crate is yanked just in case
53
+ if json. as_object ( )
54
+ . and_then ( |obj| obj. get ( "yanked" ) )
55
+ . and_then ( |y| y. as_boolean ( ) )
56
+ . unwrap_or ( true ) {
57
+ return true ;
58
+ }
59
+
40
60
if let Some ( ( krate, version) ) = json. as_object ( )
41
- . map ( |obj| {
42
- ( obj. get ( "name" )
43
- . and_then ( |n| n. as_string ( ) ) ,
44
- obj. get ( "vers" )
45
- . and_then ( |n| n. as_string ( ) ) )
46
- } ) {
61
+ . map ( |obj| {
62
+ ( obj. get ( "name" )
63
+ . and_then ( |n| n. as_string ( ) ) ,
64
+ obj. get ( "vers" )
65
+ . and_then ( |n| n. as_string ( ) ) )
66
+ } ) {
47
67
48
68
// Skip again if we can't get crate name and version
49
69
if krate. is_none ( ) || version. is_none ( ) {
@@ -67,8 +87,8 @@ impl DocBuilder {
67
87
68
88
// checkout master
69
89
try!( repo. refname_to_id ( "refs/remotes/origin/master" )
70
- . and_then ( |oid| repo. find_object ( oid, None ) )
71
- . and_then ( |object| repo. reset ( & object, git2:: ResetType :: Hard , None ) ) ) ;
90
+ . and_then ( |oid| repo. find_object ( oid, None ) )
91
+ . and_then ( |object| repo. reset ( & object, git2:: ResetType :: Hard , None ) ) ) ;
72
92
73
93
Ok ( ( ) )
74
94
}
@@ -94,8 +114,15 @@ impl DocBuilder {
94
114
let version: String = row. get ( 2 ) ;
95
115
96
116
match self . build_package ( & name[ ..] , & version[ ..] ) {
97
- Ok ( _) => { let _ = conn. execute ( "DELETE FROM queue WHERE id = $1" , & [ & id] ) ; } ,
98
- Err ( e) => error ! ( "Failed to build package {}-{} from queue: {}" , name, version, e) ,
117
+ Ok ( _) => {
118
+ let _ = conn. execute ( "DELETE FROM queue WHERE id = $1" , & [ & id] ) ;
119
+ }
120
+ Err ( e) => {
121
+ error ! ( "Failed to build package {}-{} from queue: {}" ,
122
+ name,
123
+ version,
124
+ e)
125
+ }
99
126
}
100
127
}
101
128
0 commit comments