From 205fc3b71bd44067685c8517e7d126e3574827e1 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 17 Nov 2017 00:54:27 +0100 Subject: CommitRef::new(): Take a `JsonValue` instead of an `&str` We expect to have pre-parsed the JSON as this function will get called after `pull_request_opened_or_synchronized()`. To avoid doing the same JSON parsing work twice, take a `JsonValue` argument in both functions. --- src/main.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 9ac9570..3bb2dbb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,6 +16,7 @@ // along with Kipper. If not, see . extern crate getopts; +extern crate json; #[macro_use] extern crate log; extern crate stderrlog; @@ -129,7 +130,16 @@ fn main() { let mut body = String::new(); try_or_400!(data.read_to_string(&mut body)); - let commit_ref = match CommitRef::new(body.as_ref()) { + let json = match json::parse(body.as_ref()) { + Ok(j) => j, + Err(e) => { + error!("{}", e.to_string()); + + return internal_server_error() + }, + }; + + let commit_ref = match CommitRef::new(json) { Ok(cr) => cr, Err(e) => { error!("{}", e.to_string()); -- cgit v1.2.3 From 399e04a697e42c9a684f14349f6d94208e719832 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 17 Nov 2017 01:08:55 +0100 Subject: main(): Don't update commit status unless commits were pushed There are a bunch of events that can trigger the `pull_request` webhook. These are: "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled", "opened", "edited", "closed", or "reopened". And "synchronize". We only care about "opened" and "synchronize" because those are the only two where new commits can come through. Since we don't set commit statuses unless that commit is part of a pull request, we need a way to update the status the first time a pull request is opened, thus the "opened" action. When new commits are added we also want to update statuses, so "synchronize". But for the others, we don't want to be duplicating work and adding duplicate unnecessary statuses to PR commits. --- src/main.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 3bb2dbb..12d71eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,7 +33,7 @@ use std::time::Duration; use getopts::Options; use kipper::jenkins; -use kipper::pull_request::CommitRef; +use kipper::pull_request::{CommitRef, pull_request_opened_or_synchronized}; const DEFAULT_PORT: u16 = 8000; @@ -139,6 +139,11 @@ fn main() { }, }; + if !pull_request_opened_or_synchronized(json.clone()) { + return rouille::Response::text("No status update needed.") + .with_status_code(200) + } + let commit_ref = match CommitRef::new(json) { Ok(cr) => cr, Err(e) => { -- cgit v1.2.3