From a330887ed0d94233069d5ce148bef35a25245726 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Fri, 20 Apr 2018 04:22:47 +0200 Subject: [PATCH 1/7] improve rfcbot command parsing to be more human friendly. --- src/github/nag.rs | 276 +++++++++++++++++++++++----------------------- 1 file changed, 137 insertions(+), 139 deletions(-) diff --git a/src/github/nag.rs b/src/github/nag.rs index 85c147d1..2c98738c 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -535,6 +535,66 @@ impl FcpDisposition { } } +/// Parses the text of a subcommand. +fn parse_command_text<'a>(command: &'a str, subcommand: &'a str) -> &'a str { + let name_start = command.find(subcommand).unwrap() + subcommand.len(); + command[name_start..].trim() +} + +/// Parses all subcommands under the fcp command. +/// If `fcp_context` is set to false, `@rfcbot ` +/// was passed and not `@rfcbot fcp `. +fn parse_fcp_subcommand<'a>( + command: &'a str, + subcommand: &'a str, + fcp_context: bool +) -> DashResult> { + match subcommand { + // Parse a FCP merge command: + "merge" | "merged" | "merging" | "merges" => + Ok(RfcBotCommand::FcpPropose(FcpDisposition::Merge)), + + // Parse a FCP close command: + "close" | "closed" | "closing" | "closes" => + Ok(RfcBotCommand::FcpPropose(FcpDisposition::Close)), + + // Parse a FCP postpone command: + "postpone" | "postponed" | "postponing" | "postpones" => + Ok(RfcBotCommand::FcpPropose(FcpDisposition::Postpone)), + + // Parse a FCP cancel command: + "cancel" | "canceled" | "canceling" | "cancels" => + Ok(RfcBotCommand::FcpCancel), + + // Parse a FCP reviewed command: + "reviewed" | "review" | "reviewing" | "reviews" => + Ok(RfcBotCommand::Reviewed), + + // Parse a FCP concern command: + "concern" | "concerned" | "concerning" | "concerns" => { + debug!("Parsed command as NewConcern"); + let what = parse_command_text(command, subcommand); + Ok(RfcBotCommand::NewConcern(what)) + }, + + // Parse a FCP resolve command: + "resolve" | "resolved" | "resolving" | "resolves" => { + debug!("Parsed command as ResolveConcern"); + let what = parse_command_text(command, subcommand); + Ok(RfcBotCommand::ResolveConcern(what)) + }, + + _ => { + Err(if fcp_context { + error!("unrecognized subcommand for fcp: {}", subcommand); + DashError::Misc(Some(format!("found bad subcommand: {}", subcommand))) + } else { + DashError::Misc(None) + }) + } + } +} + impl<'a> RfcBotCommand<'a> { pub fn process(self, author: &GitHubUser, @@ -768,7 +828,6 @@ impl<'a> RfcBotCommand<'a> { } pub fn from_str(command: &'a str) -> DashResult> { - // get the tokens for the command line (starts with a bot mention) let command = command .lines() @@ -788,38 +847,9 @@ impl<'a> RfcBotCommand<'a> { debug!("Parsed command as new FCP proposal"); - match subcommand { - "merge" => Ok(RfcBotCommand::FcpPropose(FcpDisposition::Merge)), - "close" => Ok(RfcBotCommand::FcpPropose(FcpDisposition::Close)), - "postpone" => Ok(RfcBotCommand::FcpPropose(FcpDisposition::Postpone)), - "cancel" => Ok(RfcBotCommand::FcpCancel), - _ => { - error!("unrecognized subcommand for fcp: {}", subcommand); - Err(DashError::Misc(Some(format!("found bad subcommand: {}", subcommand)))) - } - } - } - "concern" => { - - let name_start = command.find("concern").unwrap() + "concern".len(); - - debug!("Parsed command as NewConcern"); - - Ok(RfcBotCommand::NewConcern(command[name_start..].trim())) + parse_fcp_subcommand(command, subcommand, true) } - "resolve" | "resolved" => { - // TODO handle "resolve" as well, with the correct tokenization - - let name_start = command.find("resolved").unwrap() + "resolved".len(); - - debug!("Parsed command as ResolveConcern"); - - Ok(RfcBotCommand::ResolveConcern(command[name_start..].trim())) - - } - "reviewed" => Ok(RfcBotCommand::Reviewed), "f?" => { - let user = tokens .next() @@ -831,7 +861,7 @@ impl<'a> RfcBotCommand<'a> { Ok(RfcBotCommand::FeedbackRequest(&user[1..])) } - _ => Err(DashError::Misc(None)), + _ => parse_fcp_subcommand(command, invocation, false), } } } @@ -1004,107 +1034,92 @@ impl<'a> RfcBotComment<'a> { mod test { use super::*; - #[test] - fn success_fcp_reviewed() { - let body = "@rfcbot: reviewed"; - let body_no_colon = "@rfcbot reviewed"; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::Reviewed); - } - - #[test] - fn success_fcp_merge() { - let body = "@rfcbot: fcp merge\n\nSome justification here."; - let body_no_colon = "@rfcbot fcp merge\n\nSome justification here."; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::FcpPropose(FcpDisposition::Merge)); - } - - #[test] - fn success_fcp_close() { - let body = "@rfcbot: fcp close\n\nSome justification here."; - let body_no_colon = "@rfcbot fcp close\n\nSome justification here."; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::FcpPropose(FcpDisposition::Close)); - } - - #[test] - fn success_fcp_postpone() { - let body = "@rfcbot: fcp postpone\n\nSome justification here."; - let body_no_colon = "@rfcbot fcp postpone\n\nSome justification here."; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, - RfcBotCommand::FcpPropose(FcpDisposition::Postpone)); + macro_rules! justification { + () => { "\n\nSome justification here." }; } - #[test] - fn success_fcp_cancel() { - let body = "@rfcbot: fcp cancel\n\nSome justification here."; - let body_no_colon = "@rfcbot fcp cancel\n\nSome justification here."; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::FcpCancel); - } - - #[test] - fn success_concern() { - let body = "@rfcbot: concern CONCERN_NAME -someothertext -somemoretext - -somemoretext"; - let body_no_colon = "@rfcbot concern CONCERN_NAME + macro_rules! some_text { + ($important: expr) => { + concat!(" ", $important, " someothertext somemoretext -somemoretext"; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::NewConcern("CONCERN_NAME")); +somemoretext") + }; } - #[test] - fn success_resolve() { - let body = "@rfcbot: resolved CONCERN_NAME -someothertext -somemoretext + macro_rules! test_from_str { + ($test: ident, [$($cmd: expr),+], $message: expr, $expected: expr) => { + test_from_str!($test, [$(concat!($cmd, $message)),+], $expected); + }; -somemoretext"; - let body_no_colon = "@rfcbot resolved CONCERN_NAME -someothertext -somemoretext + ($test: ident, [$($cmd: expr),+], $expected: expr) => { + #[test] + fn $test() { + let expected = $expected; -somemoretext"; + $({ + let body = concat!("@rfcbot: ", $cmd); + let body_no_colon = concat!("@rfcbot ", $cmd); - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); + let with_colon = RfcBotCommand::from_str(body).unwrap(); + let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::ResolveConcern("CONCERN_NAME")); + assert_eq!(with_colon, without_colon); + assert_eq!(with_colon, expected); + })+ + } + }; } + test_from_str!(success_fcp_reviewed, + ["reviewed", "review", "reviewing", "reviews", + "fcp reviewed", "fcp review", "fcp reviewing", + "pr reviewed", "pr review", "pr reviewing"], + RfcBotCommand::Reviewed); + + test_from_str!(success_fcp_merge, + ["merge", "merged", "merging", "merges", + "fcp merge", "fcp merged", "fcp merging", "fcp merges", + "pr merge", "pr merged", "pr merging", "pr merges"], + justification!(), + RfcBotCommand::FcpPropose(FcpDisposition::Merge)); + + test_from_str!(success_fcp_close, + ["close", "closed", "closing", "closes", + "fcp close", "fcp closed", "fcp closing", "fcp closes", + "pr close", "pr closed", "pr closing", "pr closes"], + justification!(), + RfcBotCommand::FcpPropose(FcpDisposition::Close)); + + test_from_str!(success_fcp_postpone, + ["postpone", "postponed", "postponing", "postpones", + "fcp postpone", "fcp postponed", "fcp postponing", "fcp postpones", + "pr postpone", "pr postponed", "pr postponing", "pr postpones"], + justification!(), + RfcBotCommand::FcpPropose(FcpDisposition::Postpone)); + + test_from_str!(success_fcp_cancel, + ["cancel", "canceled", "canceling", "cancels", + "fcp cancel", "fcp canceled", "fcp canceling", "fcp cancels", + "pr cancel", "pr canceled", "pr canceling", "pr cancels"], + justification!(), + RfcBotCommand::FcpCancel); + + test_from_str!(success_concern, + ["concern", "concerned", "concerning", "concerns", + "fcp concern", "fcp concerned", "fcp concerning", "fcp concerns", + "pr concern", "pr concerned", "pr concerning", "pr concerns"], + some_text!("CONCERN_NAME"), + RfcBotCommand::NewConcern("CONCERN_NAME")); + + test_from_str!(success_resolve, + ["resolve", "resolved", "resolving", "resolves", + "fcp resolve", "fcp resolved", "fcp resolving", "fcp resolves", + "pr resolve", "pr resolved", "pr resolving", "pr resolves"], + some_text!("CONCERN_NAME"), + RfcBotCommand::ResolveConcern("CONCERN_NAME")); + #[test] fn success_resolve_mid_body() { let body = "someothertext @@ -1126,23 +1141,6 @@ somemoretext"; assert_eq!(with_colon, RfcBotCommand::ResolveConcern("CONCERN_NAME")); } - #[test] - fn success_feedback() { - let body = "@rfcbot: f? @bob -someothertext -somemoretext - -somemoretext"; - let body_no_colon = "@rfcbot f? @bob -someothertext -somemoretext - -somemoretext"; - - let with_colon = RfcBotCommand::from_str(body).unwrap(); - let without_colon = RfcBotCommand::from_str(body_no_colon).unwrap(); - - assert_eq!(with_colon, without_colon); - assert_eq!(with_colon, RfcBotCommand::FeedbackRequest("bob")); - } + test_from_str!(success_feedback, ["f?"], some_text!("@bob"), + RfcBotCommand::FeedbackRequest("bob")); } From e3477950c5a99596b0226d59ea70cf45ab2f2ae7 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Fri, 20 Apr 2018 07:36:39 +0200 Subject: [PATCH 2/7] refactor + auto-close/postpone FFCPed RFCs + better FFCP comment + more labels. --- src/github/client.rs | 19 ++++ src/github/nag.rs | 205 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 193 insertions(+), 31 deletions(-) diff --git a/src/github/client.rs b/src/github/client.rs index 7ea048c5..7b6210a6 100644 --- a/src/github/client.rs +++ b/src/github/client.rs @@ -156,6 +156,25 @@ impl Client { None } + pub fn close_pr(&self, repo: &str, issue_num: i32) -> DashResult<()> { + let url = format!("{}/repos/{}/pulls/{}", BASE_URL, repo, issue_num); + + let mut obj = BTreeMap::new(); + obj.insert("status", "closed"); + let payload = serde_json::to_string(&obj)?; + + let mut res = self.patch(&url, &payload)?; + + match res.status { + StatusCode::Ok => Ok(()), + _ => { + let mut body = String::new(); + res.read_to_string(&mut body)?; + Err(DashError::Misc(Some(body))) + } + } + } + pub fn add_label(&self, repo: &str, issue_num: i32, label: &str) -> DashResult<()> { let url = format!("{}/repos/{}/issues/{}/labels", BASE_URL, repo, issue_num); let payload = serde_json::to_string(&[label])?; diff --git a/src/github/nag.rs b/src/github/nag.rs index 2c98738c..a7c0410d 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -16,6 +16,21 @@ use github::models::CommentFromJson; use teams::TEAMS; use super::GH; +const LABEL_FFCP: &'static str = "finished-final-comment-period"; +const LABEL_PFCP: &'static str = "proposed-final-comment-period"; +const LABEL_FCP: &'static str = "final-comment-period"; + +const LABEL_POSTPONED: &'static str = "postponed"; +const LABEL_CLOSED: &'static str = "closed"; + +const LABEL_DISPOSITION_MERGE: &'static str = "disposition-merge"; +const LABEL_DISPOSITION_CLOSE: &'static str = "disposition-close"; +const LABEL_DISPOSITION_POSTPONE: &'static str = "disposition-postpone"; + +const FCP_REPR_MERGE: &'static str = "merge"; +const FCP_REPR_CLOSE: &'static str = "close"; +const FCP_REPR_POSTPONE: &'static str = "postpone"; + lazy_static! { static ref NAG_LOCK: Mutex<()> = Mutex::new(()); } @@ -143,6 +158,26 @@ fn update_proposal_review_status(proposal_id: i32) -> DashResult<()> { Ok(()) } +fn remove_issue_label(issue: &Issue, label: &str) { + let _ = GH.remove_label(&issue.repository, issue.number, label); +} + +fn remove_issue_labels(issue: &Issue, labels: &[&str]) { + for label in labels { + remove_issue_label(issue, label); + } +} + +fn add_issue_label(issue: &Issue, label: &str) -> DashResult<()> { + GH.add_label(&issue.repository, issue.number, label) +} + +fn close_pull_request(issue: &Issue) { + if let Err(why) = GH.close_pr(&issue.repository, issue.number) { + error!("Unable to close PR {:?}: {:?}", issue, why); + } +} + fn evaluate_nags() -> DashResult<()> { use diesel::prelude::*; use domain::schema::fcp_proposal::dsl::*; @@ -285,13 +320,8 @@ fn evaluate_nags() -> DashResult<()> { // TODO only add label if FCP > 1 day use config::CONFIG; if CONFIG.post_comments { - let label_res = - GH.add_label(&issue.repository, issue.number, "final-comment-period"); - - let _ = GH.remove_label(&issue.repository, - issue.number, - "proposed-final-comment-period"); - + let label_res = add_issue_label(&issue, LABEL_FCP); + remove_issue_label(&issue, LABEL_PFCP); let added_label = match label_res { Ok(()) => true, Err(why) => { @@ -339,6 +369,17 @@ fn evaluate_nags() -> DashResult<()> { }; for mut proposal in finished_fcps { + let initiator = match githubuser::table + .find(proposal.fk_initiator) + .first::(conn) { + Ok(i) => i, + Err(why) => { + error!("Unable to retrieve proposal initiator for proposal id {}: {:?}", + proposal.id, + why); + continue; + } + }; let issue = match issue::table.find(proposal.fk_issue).first::(conn) { Ok(i) => i, @@ -364,7 +405,33 @@ fn evaluate_nags() -> DashResult<()> { } } - let fcp_close_comment = RfcBotComment::new(&issue, CommentType::FcpWeekPassed); + // parse the disposition: + let disp = FcpDisposition::from_str(&proposal.disposition)?; + + // Add FFCP label and remove FCP label. + let label_res = add_issue_label(&issue, LABEL_FFCP); + remove_issue_label(&issue, LABEL_FCP); + let added_label = match label_res { + Ok(()) => true, + Err(why) => { + warn!("Unable to add Finished-FCP label to {}#{}: {:?}", + &issue.repository, + issue.number, + why); + false + } + }; + + // Build the comment: + let comment_type = CommentType::FcpWeekPassed { + added_label, + author: &initiator, + status_comment_id: proposal.fk_bot_tracking_comment, + disposition: disp + }; + let fcp_close_comment = RfcBotComment::new(&issue, comment_type); + + // Post it! match fcp_close_comment.post(None) { Ok(_) => (), Err(why) => { @@ -374,6 +441,26 @@ fn evaluate_nags() -> DashResult<()> { continue; } }; + + // Execute FFCP actions: + if is_rfc_repo(&issue) { + match disp { + FcpDisposition::Merge => { + // TODO: This one will require a lot of work to + // auto-merge RFCs and create the tracking issue. + }, + FcpDisposition::Close => { + let _ = add_issue_label(&issue, LABEL_CLOSED); + remove_issue_label(&issue, LABEL_DISPOSITION_CLOSE); + close_pull_request(&issue); + }, + FcpDisposition::Postpone => { + let _ = add_issue_label(&issue, LABEL_POSTPONED); + remove_issue_label(&issue, LABEL_DISPOSITION_POSTPONE); + close_pull_request(&issue); + }, + } + } } Ok(()) @@ -489,12 +576,13 @@ fn cancel_fcp(author: &GitHubUser, issue: &Issue, existing: &FcpProposal) -> Das // leave github comment stating that FCP proposal cancelled let comment = RfcBotComment::new(issue, CommentType::FcpProposalCancelled(author)); let _ = comment.post(None); - let _ = GH.remove_label(&issue.repository, - issue.number, - "proposed-final-comment-period"); - let _ = GH.remove_label(&issue.repository, - issue.number, - "final-comment-period"); + remove_issue_labels(&issue, &[ + LABEL_FCP, + LABEL_PFCP, + LABEL_DISPOSITION_MERGE, + LABEL_DISPOSITION_CLOSE, + LABEL_DISPOSITION_POSTPONE + ]); Ok(()) } @@ -519,20 +607,28 @@ pub enum FcpDisposition { impl FcpDisposition { pub fn repr(self) -> &'static str { match self { - FcpDisposition::Merge => "merge", - FcpDisposition::Close => "close", - FcpDisposition::Postpone => "postpone", + FcpDisposition::Merge => FCP_REPR_MERGE, + FcpDisposition::Close => FCP_REPR_CLOSE, + FcpDisposition::Postpone => FCP_REPR_POSTPONE, } } pub fn from_str(string: &str) -> DashResult { match string { - "merge" => Ok(FcpDisposition::Merge), - "close" => Ok(FcpDisposition::Close), - "postpone" => Ok(FcpDisposition::Postpone), + FCP_REPR_MERGE => Ok(FcpDisposition::Merge), + FCP_REPR_CLOSE => Ok(FcpDisposition::Close), + FCP_REPR_POSTPONE => Ok(FcpDisposition::Postpone), _ => Err(DashError::Misc(None)), } } + + pub fn label(self) -> &'static str { + match self { + FcpDisposition::Merge => LABEL_DISPOSITION_MERGE, + FcpDisposition::Close => LABEL_DISPOSITION_CLOSE, + FcpDisposition::Postpone => LABEL_DISPOSITION_POSTPONE, + } + } } /// Parses the text of a subcommand. @@ -883,7 +979,16 @@ enum CommentType<'a> { status_comment_id: i32, added_label: bool, }, - FcpWeekPassed, + FcpWeekPassed { + author: &'a GitHubUser, + status_comment_id: i32, + added_label: bool, + disposition: FcpDisposition + }, +} + +fn is_rfc_repo(issue: &Issue) -> bool { + issue.repository == "rust-lang/rfcs" } impl<'a> RfcBotComment<'a> { @@ -898,6 +1003,14 @@ impl<'a> RfcBotComment<'a> { } } + fn couldnt_add_label<'b>(msg: &mut String, author: &'b GitHubUser, label: &str) { + msg.push_str("\n\n*psst @"); + msg.push_str(&author.login); + msg.push_str(", I wasn't able to add the `"); + msg.push_str(label); + msg.push_str("` label, please do so.*"); + } + fn format(issue: &Issue, comment_type: &CommentType) -> String { match *comment_type { @@ -973,16 +1086,43 @@ impl<'a> RfcBotComment<'a> { msg.push_str("). :bell:"); if !added_label { - msg.push_str("\n\n*psst @"); - msg.push_str(&author.login); - msg.push_str(", I wasn't able to add the `final-comment-period` label,"); - msg.push_str(" please do so.*"); + Self::couldnt_add_label(&mut msg, author, LABEL_FCP); } msg } - CommentType::FcpWeekPassed => "The final comment period is now complete.".to_string(), + CommentType::FcpWeekPassed { + author, + added_label, + status_comment_id, + disposition + } => { + let mut msg = String::new(); + msg.push_str("The final comment period, with a disposition to **"); + msg.push_str(disposition.repr()); + msg.push_str("**, as per the [review above]("); + Self::add_comment_url(issue, &mut msg, status_comment_id); + msg.push_str("), is now **complete**."); + + if is_rfc_repo(issue) { + match disposition { + FcpDisposition::Merge => {} + FcpDisposition::Close => { + msg.push_str("\n\nBy the power vested in me by Rust, I hereby close this RFC."); + }, + FcpDisposition::Postpone => { + msg.push_str("\n\nBy the power vested in me by Rust, I hereby postpone this RFC."); + }, + } + } + + if !added_label { + Self::couldnt_add_label(&mut msg, author, LABEL_FFCP); + } + + msg + }, } } @@ -994,6 +1134,13 @@ impl<'a> RfcBotComment<'a> { msg.push_str(&to_add); } + fn maybe_add_pfcp_label(&self) { + if let CommentType::FcpProposed(_, disposition, ..) = self.comment_type { + let _ = add_issue_label(&self.issue, LABEL_PFCP); + let _ = add_issue_label(&self.issue, disposition.label()); + } + } + fn post(&self, existing_comment: Option) -> DashResult { use config::CONFIG; @@ -1002,14 +1149,10 @@ impl<'a> RfcBotComment<'a> { if self.issue.open { match existing_comment { Some(comment_id) => { + self.maybe_add_pfcp_label(); GH.edit_comment(&self.issue.repository, comment_id, &self.body) } None => { - if let CommentType::FcpProposed(..) = self.comment_type { - let _ = GH.add_label(&self.issue.repository, - self.issue.number, - "proposed-final-comment-period"); - } GH.new_comment(&self.issue.repository, self.issue.number, &self.body) } } From 6295b0efb936226cfb446a3bb25a90594e4b1a33 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Fri, 20 Apr 2018 08:18:02 +0200 Subject: [PATCH 3/7] update toolchain := 2018-04-19 + cargo update --- Cargo.lock | 669 +++++++++++++++++++++++++++++-------------------- rust-toolchain | 2 +- 2 files changed, 396 insertions(+), 275 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a893c1ba..bbc73804 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,18 +1,9 @@ -[[package]] -name = "advapi32-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "aho-corasick" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -20,23 +11,31 @@ name = "antidote" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "arrayvec" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "base64" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bitflags" -version = "0.7.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" -version = "0.9.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -53,31 +52,28 @@ dependencies = [ [[package]] name = "byteorder" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cc" -version = "1.0.1" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "chrono" -version = "0.4.0" +name = "cfg-if" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] -name = "coco" -version = "0.1.1" +name = "chrono" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "either 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -95,8 +91,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -105,7 +101,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -113,16 +109,38 @@ name = "core-foundation-sys" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "crypt32-sys" +name = "crossbeam-deque" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -140,8 +158,8 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -170,7 +188,7 @@ name = "dotenv" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -180,7 +198,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "derive-error-chain 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -193,18 +211,13 @@ name = "dtoa" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "either" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "env_logger" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -223,28 +236,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "foreign-types" -version = "0.2.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] -name = "fuchsia-zircon" -version = "0.2.1" +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] -name = "fuchsia-zircon-sys" -version = "0.2.0" +name = "fuchsia-zircon" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "futures" -version = "0.1.16" +name = "fuchsia-zircon-sys" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -257,13 +271,13 @@ name = "handlebars" version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "pest 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -273,7 +287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "httparse" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -282,16 +296,16 @@ version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -301,7 +315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -322,22 +336,23 @@ dependencies = [ "conduit-mime-types 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "error 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "isatty" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -348,7 +363,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "itoa" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -367,18 +382,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "0.2.9" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazy_static" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.32" +version = "0.2.40" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "log" -version = "0.3.8" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "matches" @@ -387,18 +418,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "memchr" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "mime" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -408,77 +452,73 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "native-tls" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "openssl 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "num" -version = "0.1.40" +name = "nodrop" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "num-integer" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "num-iter" -version = "0.1.34" +name = "num-traits" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.1.40" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl" -version = "0.9.19" +version = "0.9.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.9.19" +version = "0.9.28" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -488,17 +528,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pear" -version = "0.0.10" +version = "0.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pear_codegen" -version = "0.0.10" +version = "0.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "percent-encoding" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -533,7 +577,15 @@ name = "pq-sys" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -546,13 +598,21 @@ name = "quote" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "quote" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "r2d2" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "scheduled-thread-pool 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -567,11 +627,22 @@ dependencies = [ [[package]] name = "rand" -version = "0.3.17" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -579,49 +650,59 @@ name = "rayon" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" -version = "0.1.31" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "regex" -version = "0.2.2" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.4.1" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "rfcbot-rs" version = "0.1.0" dependencies = [ - "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "diesel 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "diesel_codegen 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "dotenv 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -630,19 +711,19 @@ dependencies = [ "hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2-diesel 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_codegen 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket_contrib 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket_codegen 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket_contrib 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "urlencoded 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -652,56 +733,56 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "isatty 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "isatty 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "ordermap 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "pear 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "pear_codegen 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "pear 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)", + "pear_codegen 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "state 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "state 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "yansi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_codegen" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "yansi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rocket_contrib" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rocket 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -710,10 +791,10 @@ version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -728,16 +809,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "schannel" -version = "0.1.8" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -750,17 +826,8 @@ dependencies = [ [[package]] name = "scopeguard" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "secur32-sys" -version = "0.2.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "security-framework" @@ -769,7 +836,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -779,7 +846,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -789,26 +856,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.15" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.15" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive_internals 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive_internals" -version = "0.16.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", - "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -818,19 +886,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.3" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -840,7 +908,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "state" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -853,6 +921,16 @@ dependencies = [ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "syn" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "synom" version = "0.11.3" @@ -863,38 +941,38 @@ dependencies = [ [[package]] name = "tempdir" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "time" -version = "0.1.38" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "toml" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -915,6 +993,11 @@ dependencies = [ "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "ucd-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicase" version = "1.4.2" @@ -941,6 +1024,11 @@ name = "unicode-xid" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unreachable" version = "1.0.0" @@ -964,12 +1052,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "1.5.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -980,7 +1068,7 @@ dependencies = [ "bodyparser 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "iron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -990,7 +1078,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "vcpkg" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1008,33 +1096,54 @@ name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "yansi" -version = "0.3.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a" -"checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" +"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" +"checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" -"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" +"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" "checksum bodyparser 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6928e817538b74a73d1dd6e9a942a2a35c632a597b6bb14fd009480f859a6bf5" -"checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" -"checksum cc 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c674f0870e3dbd4105184ea035acb1c32c8ae69939c9e228d2b11bbfe29efad" -"checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9" -"checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" +"checksum byteorder 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b5bdfe7ee3ad0b99c9801d58807a9dbc9e09196365b0203853b99889ab3c87" +"checksum cc 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8b9d2900f78631a5876dc5d6c9033ede027253efcd33dd36b1309fc6cab97ee0" +"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" +"checksum chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" "checksum conduit-mime-types 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "95ca30253581af809925ef68c2641cc140d6183f43e12e0af4992d53768bd7b8" "checksum cookie 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "477eb650753e319be2ae77ec368a58c638f9f0c4d941c39bad95e950fb1d1d0d" "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" -"checksum crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e34988f7e069e0b2f3bfc064295161e489b2d4e04a2e4248fb94360cdf00b4ec" +"checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum derive-error-chain 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c9ca9ade651388daad7c993f005d0d20c4f6fe78c1cdc93e95f161c6f5ede4a" "checksum diesel 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "304226fa7a3982b0405f6bb95dd9c10c3e2000709f194038a60ec2c277150951" "checksum diesel_codegen 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18a42ca5c9b660add51d58bc5a50a87123380e1e458069c5504528a851ed7384" @@ -1043,104 +1152,116 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum dotenv 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "400b347fe65ccfbd8f545c9d9a75d04b0caf23fec49aaa838a9a05398f94c019" "checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" -"checksum either 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cbee135e9245416869bf52bd6ccc9b59e2482651510784e089b874272f02a252" "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" "checksum error 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e606f14042bb87cc02ef6a14db6c90ab92ed6f62d87e69377bc759fd7987cc" "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" -"checksum foreign-types 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d" -"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159" -"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82" -"checksum futures 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "05a23db7bd162d4e8265968602930c476f688f0c180b44bdaf55e0cb2c687558" +"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "checksum handlebars 0.29.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04af2006ea09d985fef82b81e0eb25337e51b691c76403332378a53d521edc" "checksum hex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa" -"checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07" +"checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" "checksum hyper-native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72332e4a35d3059583623b50e98e491b78f8b96c5521fcb3f428167955aa56e8" "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" "checksum iron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2440ae846e7a8c7f9b401db8f6e31b4ea5e7d3688b91761337da7e054520c75b" -"checksum isatty 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "00c9301a947a2eaee7ce2556b80285dcc89558d07088962e6e8b9c25730f9dc6" +"checksum isatty 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a118a53ba42790ef25c82bb481ecf36e2da892646cccd361e69a6bb881e19398" "checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1" -"checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c" +"checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" -"checksum lazy_static 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c9e5e58fa1a4c3b915a561a78a22ee0cac6ab97dca2504428bc1cb074375f8d5" -"checksum libc 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "56cce3130fd040c28df6f495c8492e5ec5808fb4c9093c310df02b0c8f030148" -"checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" +"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" +"checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" +"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" +"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" -"checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4" +"checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" +"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41f5c9112cb662acd3b204077e0de5bc66305fa8df65c8019d5adb10e9ab6e58" -"checksum native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04b781c9134a954c84f0594b9ab3f5606abc516030388e8511887ef4c204a1e5" -"checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525" -"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" -"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" -"checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0" -"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d" -"checksum openssl 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)" = "816914b22eb15671d62c73442a51978f311e911d6a6f6cbdafa6abce1b5038fc" -"checksum openssl-sys 0.9.19 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4c63a7d559c1e5afa6d6a9e6fa34bbc5f800ffc9ae08b72c605420b0c4f5e8" +"checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" +"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" +"checksum num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe" +"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +"checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" +"checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" +"checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" +"checksum openssl-sys 0.9.28 (registry+https://github.com/rust-lang/crates.io-index)" = "0bbd90640b148b46305c1691eed6039b5c8509bed16991e3562a01eeb76902a3" "checksum ordermap 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b81cf3b8cb96aa0e73bbedfcdc9708d09fec2854ba8d474be4e6f666d7379e8b" -"checksum pear 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "87dd0e084e2c18b047658e40f89b856dfc23104011fd43f9369e873d03b7f15b" -"checksum pear_codegen 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0455b67d07b3aa40a552256059f11eb8db3a848cbec81bae3e3cb366e6e74e24" -"checksum percent-encoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356" +"checksum pear 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "b9b645aa07cf1010a67e9f67b4b9b96d6c5fb9315eee678a061d6ab58e9cb77f" +"checksum pear_codegen 0.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ca34109829349aeefe22772916da5404b3f5cd0e63a72c5d91209fc809342265" +"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum persistent 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c9c94f2ef72dc272c6bcc8157ccf2bc7da14f4c58c69059ac2fc48492d6916" "checksum pest 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0a6dda33d67c26f0aac90d324ab2eb7239c819fc7b2552fe9faa4fe88441edc8" "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" "checksum plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1a6a0dc3910bc8db877ffed8e457763b317cf880df4ae19109b9f77d277cf6e0" "checksum pq-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfb5e575ef93a1b7b2a381d47ba7c5d4e4f73bff37cee932195de769aad9a54" +"checksum proc-macro2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "49b6a521dc81b643e9a51e0d1cf05df46d5a2f3c0280ea72bcb68276ba64a118" "checksum quick-error 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eda5fe9b71976e62bc81b781206aaa076401769b2143379d3eb2118388babac4" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" +"checksum quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0ff51282f28dc1b53fd154298feaa2e77c5ea0dba68e1fd8b03b72fbe13d2a" "checksum r2d2 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2c8284508b38df440f8f3527395e23c4780b22f74226b270daf58fee38e4bcce" "checksum r2d2-diesel 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f6b921696a6c45991296d21b52ed973b9fb56f6c47524fda1f99458c2d6c0478" -"checksum rand 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "61efcbcd9fa8d8fbb07c84e34a8af18a1ff177b449689ad38a6e9457ecc7b2ae" +"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" +"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" "checksum rayon 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a77c51c07654ddd93f6cb543c7a849863b03abc7e82591afda6dc8ad4ac3ac4a" -"checksum rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7febc28567082c345f10cddc3612c6ea020fc3297a1977d472cf9fdb73e6e493" -"checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509" -"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b" -"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" +"checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" +"checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" +"checksum regex 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "aec3f58d903a7d2a9dc2bf0e41a746f4530e0cab6b615494e058f67a3ef947fb" +"checksum regex-syntax 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bd90079345f4a4c3409214734ae220fd773c6f2e8a543d07370c6c1c369cfbfb" +"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum ring 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2a6dc7fc06a05e6de183c5b97058582e9da2de0c136eafe49609769c507724" -"checksum rocket 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ad92f830d1ae2e9400ff212c949f6101b794cb3f50df975a8278b30280de51e" -"checksum rocket_codegen 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a945a800964fd73054d726fcfb52dbb5ed2c77f9c97f94de81f94970779f12ad" -"checksum rocket_contrib 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c3aa9888842d219dc3561f7a91f166c48c34746429f8e436d4a8b6edbfdb39" +"checksum rocket 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c000cf7233aa997a19a43f77ddc80db11b58cdbbc12e2c1385bd62cbbace3964" +"checksum rocket_codegen 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "645dd494d1340a4c16ba8decc4bb94d3e687a7e6b57552e2341dbf436b75ffaa" +"checksum rocket_contrib 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "2b1f97dc98bf6fa9a861e3c0c71f150f1110350eaaebe56516377d7f4316a51a" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" -"checksum schannel 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7554288337c1110e34d7a2433518d889374c1de1a45f856b7bcddb03702131fc" +"checksum schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "85fd9df495640643ad2d00443b3d78aae69802ad488debab4f1dd52fc1806ade" "checksum scheduled-thread-pool 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d9fbe48ead32343b76f544c85953bf260ed39219a8bbbb62cd85f6a00f9644f" -"checksum scopeguard 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c79eb2c3ac4bc2507cda80e7f3ac5b88bd8eae4c0914d5663e6a8933994be918" -"checksum secur32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f412dfa83308d893101dd59c10d6fda8283465976c28c287c5c855bf8d216bc" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" "checksum serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" -"checksum serde 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "6a7046c9d4c6c522d10b2d098f9bebe2bef227e0e74044d8c1bfcf6b476af799" -"checksum serde_derive 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "1afcaae083fd1c46952a315062326bc9957f182358eb7da03b57ef1c688f7aa9" -"checksum serde_derive_internals 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd381f6d01a6616cdba8530492d453b7761b456ba974e98768a18cad2cd76f58" +"checksum serde 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "5f751e9d57bd42502e4362b2d84f916ed9578e9a1a46852dcdeb6f91f6de7c14" +"checksum serde_derive 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "81ec46cb12594da6750ad5a913f8175798c371d6c5ffd07f082ac4fea32789c3" +"checksum serde_derive_internals 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9d30c4596450fd7bbda79ef15559683f9a79ac0193ea819db90000d7e1cae794" "checksum serde_json 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "67f7d2e9edc3523a9c8ec8cd6ec481b3a27810aafee3e625d311febd3e656b4c" -"checksum serde_json 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d243424e06f9f9c39e3cd36147470fd340db785825e367625f79298a6ac6b7ac" +"checksum serde_json 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7bf1cbb1387028a13739cb018ee0d9b3db534f22ca3c84a5904f7eadfde14e75" "checksum smallvec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ee4f357e8cd37bf8822e1b964e96fd39e2cb5a0424f8aaa284ccaccc2162411c" -"checksum state 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "acc74e29126a281afcfd8dfa0ae83f1720a1adf5fc99524898e45ca440a73919" +"checksum state 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5562ac59585fe3d9a1ccf6b4e298ce773f5063db80d59f783776b410c1714c2" "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +"checksum syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6" -"checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14" -"checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" -"checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e" +"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" +"checksum time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098" +"checksum toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a0263c6c02c4db6c8f7681f9fd35e90de799ebd4cfdeab77a38f4ff6b3d8c0d9" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" +"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27" +"checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7" "checksum urlencoded 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8c28708636d6f7298a53b1cdb6af40f1ab523209a7cb83cf4d41b3ebc671d319" "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" -"checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b" +"checksum vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7ed0f6789c8a85ca41bbc1c9d175422116a9869bd1cf31bb08e1493ecce60380" "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum yansi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a503e4eea629f145a693c8ed1eddba88b3b9de5171c6ebd0e2820cf82d38f934" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum yansi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d60c3b48c9cdec42fb06b3b84b5b087405e1fa1c644a1af3930e4dfafe93de48" diff --git a/rust-toolchain b/rust-toolchain index 326f5894..b7e7556a 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2017-10-12 +nightly-2018-04-19 From 544d05e9ad885c8108e4b89fb8b7a1c6d6f54628 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sat, 21 Apr 2018 01:56:38 +0200 Subject: [PATCH 4/7] refactor consts into a Label enum. --- src/github/nag.rs | 104 ++++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 40 deletions(-) diff --git a/src/github/nag.rs b/src/github/nag.rs index a7c0410d..f2264f81 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -1,5 +1,6 @@ use std::collections::BTreeSet; use std::sync::Mutex; +use std::fmt; use chrono::{Duration, Utc}; use diesel::prelude::*; @@ -16,20 +17,39 @@ use github::models::CommentFromJson; use teams::TEAMS; use super::GH; -const LABEL_FFCP: &'static str = "finished-final-comment-period"; -const LABEL_PFCP: &'static str = "proposed-final-comment-period"; -const LABEL_FCP: &'static str = "final-comment-period"; - -const LABEL_POSTPONED: &'static str = "postponed"; -const LABEL_CLOSED: &'static str = "closed"; +#[derive(Copy, Clone, PartialEq, Eq, Hash)] +pub enum Label { + FFCP, + PFCP, + FCP, + Postponed, + Closed, + DispositionMerge, + DispositionClose, + DispositionPostpone, +} -const LABEL_DISPOSITION_MERGE: &'static str = "disposition-merge"; -const LABEL_DISPOSITION_CLOSE: &'static str = "disposition-close"; -const LABEL_DISPOSITION_POSTPONE: &'static str = "disposition-postpone"; +impl Label { + fn as_str(self) -> &'static str { + use self::Label::*; + match self { + FFCP => "finished-final-comment-period", + PFCP => "proposed-final-comment-period", + FCP => "final-comment-period", + Postponed => "postponed", + Closed => "closed", + DispositionMerge => "disposition-merge", + DispositionClose => "disposition-close", + DispositionPostpone => "disposition-postpone", + } + } +} -const FCP_REPR_MERGE: &'static str = "merge"; -const FCP_REPR_CLOSE: &'static str = "close"; -const FCP_REPR_POSTPONE: &'static str = "postpone"; +impl fmt::Display for Label { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + fmt.write_str(self.as_str()) + } +} lazy_static! { static ref NAG_LOCK: Mutex<()> = Mutex::new(()); @@ -158,18 +178,18 @@ fn update_proposal_review_status(proposal_id: i32) -> DashResult<()> { Ok(()) } -fn remove_issue_label(issue: &Issue, label: &str) { - let _ = GH.remove_label(&issue.repository, issue.number, label); +fn remove_issue_label(issue: &Issue, label: Label) { + let _ = GH.remove_label(&issue.repository, issue.number, label.as_str()); } -fn remove_issue_labels(issue: &Issue, labels: &[&str]) { - for label in labels { +fn remove_issue_labels(issue: &Issue, labels: &[Label]) { + for &label in labels { remove_issue_label(issue, label); } } -fn add_issue_label(issue: &Issue, label: &str) -> DashResult<()> { - GH.add_label(&issue.repository, issue.number, label) +fn add_issue_label(issue: &Issue, label: Label) -> DashResult<()> { + GH.add_label(&issue.repository, issue.number, label.as_str()) } fn close_pull_request(issue: &Issue) { @@ -320,8 +340,8 @@ fn evaluate_nags() -> DashResult<()> { // TODO only add label if FCP > 1 day use config::CONFIG; if CONFIG.post_comments { - let label_res = add_issue_label(&issue, LABEL_FCP); - remove_issue_label(&issue, LABEL_PFCP); + let label_res = add_issue_label(&issue, Label::FCP); + remove_issue_label(&issue, Label::PFCP); let added_label = match label_res { Ok(()) => true, Err(why) => { @@ -409,8 +429,8 @@ fn evaluate_nags() -> DashResult<()> { let disp = FcpDisposition::from_str(&proposal.disposition)?; // Add FFCP label and remove FCP label. - let label_res = add_issue_label(&issue, LABEL_FFCP); - remove_issue_label(&issue, LABEL_FCP); + let label_res = add_issue_label(&issue, Label::FFCP); + remove_issue_label(&issue, Label::FCP); let added_label = match label_res { Ok(()) => true, Err(why) => { @@ -450,13 +470,13 @@ fn evaluate_nags() -> DashResult<()> { // auto-merge RFCs and create the tracking issue. }, FcpDisposition::Close => { - let _ = add_issue_label(&issue, LABEL_CLOSED); - remove_issue_label(&issue, LABEL_DISPOSITION_CLOSE); + let _ = add_issue_label(&issue, Label::Closed); + remove_issue_label(&issue, Label::DispositionClose); close_pull_request(&issue); }, FcpDisposition::Postpone => { - let _ = add_issue_label(&issue, LABEL_POSTPONED); - remove_issue_label(&issue, LABEL_DISPOSITION_POSTPONE); + let _ = add_issue_label(&issue, Label::Postponed); + remove_issue_label(&issue, Label::DispositionPostpone); close_pull_request(&issue); }, } @@ -577,11 +597,11 @@ fn cancel_fcp(author: &GitHubUser, issue: &Issue, existing: &FcpProposal) -> Das let comment = RfcBotComment::new(issue, CommentType::FcpProposalCancelled(author)); let _ = comment.post(None); remove_issue_labels(&issue, &[ - LABEL_FCP, - LABEL_PFCP, - LABEL_DISPOSITION_MERGE, - LABEL_DISPOSITION_CLOSE, - LABEL_DISPOSITION_POSTPONE + Label::FCP, + Label::PFCP, + Label::DispositionMerge, + Label::DispositionClose, + Label::DispositionPostpone, ]); Ok(()) @@ -604,6 +624,10 @@ pub enum FcpDisposition { Postpone, } +const FCP_REPR_MERGE: &'static str = "merge"; +const FCP_REPR_CLOSE: &'static str = "close"; +const FCP_REPR_POSTPONE: &'static str = "postpone"; + impl FcpDisposition { pub fn repr(self) -> &'static str { match self { @@ -622,11 +646,11 @@ impl FcpDisposition { } } - pub fn label(self) -> &'static str { + pub fn label(self) -> Label { match self { - FcpDisposition::Merge => LABEL_DISPOSITION_MERGE, - FcpDisposition::Close => LABEL_DISPOSITION_CLOSE, - FcpDisposition::Postpone => LABEL_DISPOSITION_POSTPONE, + FcpDisposition::Merge => Label::DispositionMerge, + FcpDisposition::Close => Label::DispositionClose, + FcpDisposition::Postpone => Label::DispositionPostpone, } } } @@ -1003,11 +1027,11 @@ impl<'a> RfcBotComment<'a> { } } - fn couldnt_add_label<'b>(msg: &mut String, author: &'b GitHubUser, label: &str) { + fn couldnt_add_label<'b>(msg: &mut String, author: &'b GitHubUser, label: Label) { msg.push_str("\n\n*psst @"); msg.push_str(&author.login); msg.push_str(", I wasn't able to add the `"); - msg.push_str(label); + msg.push_str(label.as_str()); msg.push_str("` label, please do so.*"); } @@ -1086,7 +1110,7 @@ impl<'a> RfcBotComment<'a> { msg.push_str("). :bell:"); if !added_label { - Self::couldnt_add_label(&mut msg, author, LABEL_FCP); + Self::couldnt_add_label(&mut msg, author, Label::FCP); } msg @@ -1118,7 +1142,7 @@ impl<'a> RfcBotComment<'a> { } if !added_label { - Self::couldnt_add_label(&mut msg, author, LABEL_FFCP); + Self::couldnt_add_label(&mut msg, author, Label::FFCP); } msg @@ -1136,7 +1160,7 @@ impl<'a> RfcBotComment<'a> { fn maybe_add_pfcp_label(&self) { if let CommentType::FcpProposed(_, disposition, ..) = self.comment_type { - let _ = add_issue_label(&self.issue, LABEL_PFCP); + let _ = add_issue_label(&self.issue, Label::PFCP); let _ = add_issue_label(&self.issue, disposition.label()); } } From 2a96c07b6d3832ce62f753c43b8fb39d8df5adcb Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sat, 21 Apr 2018 02:10:29 +0200 Subject: [PATCH 5/7] add/remove_label methods on Issue instead of free functions. --- src/github/nag.rs | 57 +++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/src/github/nag.rs b/src/github/nag.rs index f2264f81..496ca5b1 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -51,6 +51,16 @@ impl fmt::Display for Label { } } +impl Issue { + fn remove_label(&self, label: Label) { + let _ = GH.remove_label(&self.repository, self.number, label.as_str()); + } + + fn add_label(&self, label: Label) -> DashResult<()> { + GH.add_label(&self.repository, self.number, label.as_str()) + } +} + lazy_static! { static ref NAG_LOCK: Mutex<()> = Mutex::new(()); } @@ -178,20 +188,6 @@ fn update_proposal_review_status(proposal_id: i32) -> DashResult<()> { Ok(()) } -fn remove_issue_label(issue: &Issue, label: Label) { - let _ = GH.remove_label(&issue.repository, issue.number, label.as_str()); -} - -fn remove_issue_labels(issue: &Issue, labels: &[Label]) { - for &label in labels { - remove_issue_label(issue, label); - } -} - -fn add_issue_label(issue: &Issue, label: Label) -> DashResult<()> { - GH.add_label(&issue.repository, issue.number, label.as_str()) -} - fn close_pull_request(issue: &Issue) { if let Err(why) = GH.close_pr(&issue.repository, issue.number) { error!("Unable to close PR {:?}: {:?}", issue, why); @@ -340,8 +336,8 @@ fn evaluate_nags() -> DashResult<()> { // TODO only add label if FCP > 1 day use config::CONFIG; if CONFIG.post_comments { - let label_res = add_issue_label(&issue, Label::FCP); - remove_issue_label(&issue, Label::PFCP); + let label_res = issue.add_label(Label::FCP); + issue.remove_label(Label::PFCP); let added_label = match label_res { Ok(()) => true, Err(why) => { @@ -429,8 +425,8 @@ fn evaluate_nags() -> DashResult<()> { let disp = FcpDisposition::from_str(&proposal.disposition)?; // Add FFCP label and remove FCP label. - let label_res = add_issue_label(&issue, Label::FFCP); - remove_issue_label(&issue, Label::FCP); + let label_res = issue.add_label(Label::FFCP); + issue.remove_label(Label::FCP); let added_label = match label_res { Ok(()) => true, Err(why) => { @@ -470,13 +466,13 @@ fn evaluate_nags() -> DashResult<()> { // auto-merge RFCs and create the tracking issue. }, FcpDisposition::Close => { - let _ = add_issue_label(&issue, Label::Closed); - remove_issue_label(&issue, Label::DispositionClose); + let _ = issue.add_label(Label::Closed); + issue.remove_label(Label::DispositionClose); close_pull_request(&issue); }, FcpDisposition::Postpone => { - let _ = add_issue_label(&issue, Label::Postponed); - remove_issue_label(&issue, Label::DispositionPostpone); + let _ = issue.add_label(Label::Postponed); + issue.remove_label(Label::DispositionPostpone); close_pull_request(&issue); }, } @@ -596,13 +592,12 @@ fn cancel_fcp(author: &GitHubUser, issue: &Issue, existing: &FcpProposal) -> Das // leave github comment stating that FCP proposal cancelled let comment = RfcBotComment::new(issue, CommentType::FcpProposalCancelled(author)); let _ = comment.post(None); - remove_issue_labels(&issue, &[ - Label::FCP, - Label::PFCP, - Label::DispositionMerge, - Label::DispositionClose, - Label::DispositionPostpone, - ]); + &[Label::FCP, + Label::PFCP, + Label::DispositionMerge, + Label::DispositionClose, + Label::DispositionPostpone, + ].iter().for_each(|&lab| issue.remove_label(lab)); Ok(()) } @@ -1160,8 +1155,8 @@ impl<'a> RfcBotComment<'a> { fn maybe_add_pfcp_label(&self) { if let CommentType::FcpProposed(_, disposition, ..) = self.comment_type { - let _ = add_issue_label(&self.issue, Label::PFCP); - let _ = add_issue_label(&self.issue, disposition.label()); + let _ = self.issue.add_label(Label::PFCP); + let _ = self.issue.add_label(disposition.label()); } } From dac6c55d457593f43214819733643af87c3cad9a Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sat, 21 Apr 2018 03:40:01 +0200 Subject: [PATCH 6/7] fix the GH.close_issue command. --- src/github/client.rs | 6 +++--- src/github/nag.rs | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/github/client.rs b/src/github/client.rs index 7b6210a6..fd2e0357 100644 --- a/src/github/client.rs +++ b/src/github/client.rs @@ -156,11 +156,11 @@ impl Client { None } - pub fn close_pr(&self, repo: &str, issue_num: i32) -> DashResult<()> { - let url = format!("{}/repos/{}/pulls/{}", BASE_URL, repo, issue_num); + pub fn close_issue(&self, repo: &str, issue_num: i32) -> DashResult<()> { + let url = format!("{}/repos/{}/issues/{}", BASE_URL, repo, issue_num); let mut obj = BTreeMap::new(); - obj.insert("status", "closed"); + obj.insert("state", "closed"); let payload = serde_json::to_string(&obj)?; let mut res = self.patch(&url, &payload)?; diff --git a/src/github/nag.rs b/src/github/nag.rs index 496ca5b1..09a7dad6 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -59,6 +59,12 @@ impl Issue { fn add_label(&self, label: Label) -> DashResult<()> { GH.add_label(&self.repository, self.number, label.as_str()) } + + fn close(&self) { + if let Err(why) = GH.close_issue(&self.repository, self.number) { + error!("Unable to close issue {:?}: {:?}", self, why); + } + } } lazy_static! { @@ -188,12 +194,6 @@ fn update_proposal_review_status(proposal_id: i32) -> DashResult<()> { Ok(()) } -fn close_pull_request(issue: &Issue) { - if let Err(why) = GH.close_pr(&issue.repository, issue.number) { - error!("Unable to close PR {:?}: {:?}", issue, why); - } -} - fn evaluate_nags() -> DashResult<()> { use diesel::prelude::*; use domain::schema::fcp_proposal::dsl::*; @@ -468,12 +468,12 @@ fn evaluate_nags() -> DashResult<()> { FcpDisposition::Close => { let _ = issue.add_label(Label::Closed); issue.remove_label(Label::DispositionClose); - close_pull_request(&issue); + issue.close(); }, FcpDisposition::Postpone => { let _ = issue.add_label(Label::Postponed); issue.remove_label(Label::DispositionPostpone); - close_pull_request(&issue); + issue.close(); }, } } From 13c38fddfc9c23918ccbc0350739a1b835baea4f Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sat, 21 Apr 2018 05:13:53 +0200 Subject: [PATCH 7/7] FCP + concern => PFCP per aturon's request; also refactor into execute_ffcp_actions. --- src/github/nag.rs | 64 +++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/src/github/nag.rs b/src/github/nag.rs index 09a7dad6..79dd4a63 100644 --- a/src/github/nag.rs +++ b/src/github/nag.rs @@ -458,30 +458,33 @@ fn evaluate_nags() -> DashResult<()> { } }; - // Execute FFCP actions: - if is_rfc_repo(&issue) { - match disp { - FcpDisposition::Merge => { - // TODO: This one will require a lot of work to - // auto-merge RFCs and create the tracking issue. - }, - FcpDisposition::Close => { - let _ = issue.add_label(Label::Closed); - issue.remove_label(Label::DispositionClose); - issue.close(); - }, - FcpDisposition::Postpone => { - let _ = issue.add_label(Label::Postponed); - issue.remove_label(Label::DispositionPostpone); - issue.close(); - }, - } - } + execute_ffcp_actions(&issue, disp); } Ok(()) } +fn execute_ffcp_actions(issue: &Issue, disposition: FcpDisposition) { + if !is_rfc_repo(&issue) { return; } + + match disposition { + FcpDisposition::Merge => { + // TODO: This one will require a lot of work to + // auto-merge RFCs and create the tracking issue. + }, + FcpDisposition::Close => { + let _ = issue.add_label(Label::Closed); + issue.remove_label(Label::DispositionClose); + issue.close(); + }, + FcpDisposition::Postpone => { + let _ = issue.add_label(Label::Postponed); + issue.remove_label(Label::DispositionPostpone); + issue.close(); + }, + } +} + fn list_review_requests(proposal_id: i32) -> DashResult> { use domain::schema::{fcp_review_request, githubuser}; @@ -846,9 +849,10 @@ impl<'a> RfcBotCommand<'a> { } RfcBotCommand::NewConcern(concern_name) => { - if let Some(proposal) = existing_proposal { + if let Some(mut proposal) = existing_proposal { // check for existing concern use domain::schema::fcp_concern::dsl::*; + use domain::schema::fcp_proposal::dsl::*; let existing_concern = fcp_concern .filter(fk_proposal.eq(proposal.id)) @@ -870,8 +874,26 @@ impl<'a> RfcBotCommand<'a> { diesel::insert(&new_concern) .into(fcp_concern) .execute(conn)?; + + // Take us out of FCP and back into PFCP if need be: + if proposal.fcp_start.is_some() { + // Update DB: FCP is not started anymore. + proposal.fcp_start = None; + match diesel::update(fcp_proposal.find(proposal.id)) + .set(&proposal) + .execute(conn) { + Ok(_) => (), + Err(why) => { + error!("Unable to mark FCP {} as unstarted: {:?}", proposal.id, why); + return Ok(()); + } + } + + // Update labels: + let _ = issue.add_label(Label::PFCP); + issue.remove_label(Label::FCP); + } } - } } RfcBotCommand::ResolveConcern(concern_name) => {