"use strict" ;
var builder = require ( '../lib/builder' ) ,
commenter = require ( '../lib/commenter' ) ;
/ *
* POST from github
* /
var processPush = function ( req , res , payload ) {
var repository = payload . repository ,
options = {
app : req . app ,
url : repository . url ,
owner : repository . owner . name ,
reponame : repository . name ,
rev : payload . after ,
branch : payload . ref
} ;
console . log ( "Got push event for " + options . owner + "/" + options . reponame + ":" + options . branch ) ;
builder . build ( options , function ( err , result ) {
console . log ( "Done processing request from GitHub" ) ;
console . log ( "Error: " + err ) ;
//console.log("Result:");
//console.log(result);
res . send ( "Done processing request from GitHub\r\n" + "Error: " + err + "\r\n" + "Result: " + result ) ;
} ) ;
} ;
var processPullRequest = function ( req , res , payload ) {
var action = payload . action ,
number = payload . number ,
pullRequest = payload . pull _request ,
head = pullRequest . head ,
headRepo = head . repo ,
headRepoOptions = {
url : headRepo . url ,
owner : headRepo . owner . name || headRepo . owner . login ,
reponame : headRepo . name ,
rev : head . sha ,
branchname : head . ref ,
branch : "refs/heads/" + head . ref
} ,
base = pullRequest . base ,
baseRepo = base . repo ,
baseRepoOptions = {
owner : baseRepo . owner . name || baseRepo . owner . login ,
reponame : baseRepo . name ,
branchname : base . ref
} ,
options = {
app : req . app ,
action : action ,
number : number ,
headRepoOptions : headRepoOptions ,
baseRepoOptions : baseRepoOptions
} ,
masterOptions = {
app : req . app ,
action : action ,
number : number ,
headRepoOptions : baseRepoOptions ,
baseRepoOptions : baseRepoOptions
} ;
console . log ( "Got pull request " + action + " event, from " + headRepoOptions . owner + "/" + headRepoOptions . reponame + ":" + headRepoOptions . branchname + " (" + headRepoOptions . rev + ") to " + baseRepoOptions . owner + "/" + baseRepoOptions . reponame + ":" + baseRepoOptions . branchname ) ;
if ( action !== "opened" && action !== "reopened" && action !== "synchronize" && action !== "closed" ) {
//console.log("Got '" + action + "' event:");
//console.log(req.body);
return res . send ( "Only opened/reopened/synchronize/closed actions are supported" ) ;
}
if ( action === "closed" && ! pullRequest . merged ) {
console . log ( "Pull request closed without merging" ) ;
return res . send ( "Pull request closed without merging" ) ;
}
if ( action === "closed" ) {
console . log ( pullRequest ) ;
return res . send ( "" ) ;
}
commenter . commentOnPullRequest (
action === "closed" ? masterOptions : options ,
function ( err , data ) {
if ( err ) {
console . log ( "Unable to post comment: " + err ) ;
}
res . send ( err || data ) ;
}
) ;
} ;
module . exports = function ( req , res ) {
if ( ! req . body || ( ! req . body . payload && ! req . body . repository ) ) {
return res . end ( ) ;
}
var eventType = req . header ( "x-github-event" ) ,
payload = req . body . payload ? JSON . parse ( req . body . payload || "{}" ) : req . body ;
if ( eventType === "push" ) {
return processPush ( req , res , payload ) ;
}
if ( eventType === "pull_request" ) {
return processPullRequest ( req , res , payload ) ;
}
console . log ( "Got '" + eventType + "' event:" ) ;
//console.log(req.body);
return res . send ( "Only push/pull_request events are supported" ) ;
} ;