Skip to content

Commit a59f58b

Browse files
committed
Improve build queue
1 parent 6c3c447 commit a59f58b

File tree

1 file changed

+38
-11
lines changed

1 file changed

+38
-11
lines changed

src/docbuilder/queue.rs

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,26 @@ impl DocBuilder {
2020

2121
let diff = try!(repo.diff_tree_to_tree(Some(&old_tree), Some(&new_tree), None));
2222
let conn = try!(connect_db());
23+
let mut line_n = 0;
2324

24-
try!(diff.print(git2::DiffFormat::Patch, |_, _, diffline| -> bool {
25+
try!(diff.print(git2::DiffFormat::Patch, |_, hunk, diffline| -> bool {
2526
let line = String::from_utf8_lossy(diffline.content()).into_owned();
2627
// crate strings starts with '{'
2728
// skip if line is not a crate string
2829
if line.chars().nth(0) != Some('{') {
30+
line_n = 0;
2931
return true;
3032
}
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+
3143
let json = match Json::from_str(&line[..]) {
3244
Ok(j) => j,
3345
Err(err) => {
@@ -37,13 +49,21 @@ impl DocBuilder {
3749
}
3850
};
3951

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+
4060
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+
}) {
4767

4868
// Skip again if we can't get crate name and version
4969
if krate.is_none() || version.is_none() {
@@ -67,8 +87,8 @@ impl DocBuilder {
6787

6888
// checkout master
6989
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)));
7292

7393
Ok(())
7494
}
@@ -94,8 +114,15 @@ impl DocBuilder {
94114
let version: String = row.get(2);
95115

96116
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+
}
99126
}
100127
}
101128

0 commit comments

Comments
 (0)