This repository has been archived by the owner on Apr 16, 2019. It is now read-only.
/
github.js
86 lines (73 loc) · 2.1 KB
/
github.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var log = console.log
, render = require('render')
, overwrite = require('../model/overwrite')
module.exports = function (db,Repo,config) { //I think dependency injection may be an antipattern
function filter (obj,keys) {
var n = {}
Object.keys(obj).forEach(function (i){
if(!~keys.indexOf(i))
n[i] = obj[i]
})
return n
}
function save (repo) { //pull this out also.
if(repo._id && !repo.saving){
repo.saving = true
db.get('' + repo._id, function (err, doc){
var obj = filter (doc,['_events'])
obj._id = '' + repo._id
obj._rev = doc && doc._rev
obj.time = new Date()
db.save(obj,
function (err, data){
repo._rev = data._rev
repo.saving = null
if(repo.changed){
save(repo)
repo.changed = null
}
})
})
} else {
repo.changed = true
}
}
return function (req,cont){
var payload
if(!req.body)
return cont ({statusCode: 400, error: "Expected payload: property"})
try {
payload = JSON.parse(req.body.payload)
} catch (err) {
console.error('could not parse POST JSON')
return cont ({
statusCode: 400,
error: "was not valid JSON",
was: req.body.payload,
exception: err.stack
})
}
log('loading new repo')
render.ct.log(payload)
repo = Repo(
payload.repository.owner.name,
payload.repository.name,
config.basedir) // load that from config.
repo.post = payload
repo.on('change',function (event){
console.log('change',event, repo._id)
save(repo)
})
repo.integrate(function (err,data){
//log
if(err){//not necessarily the right error message.
return cont({statusCode: 503, error: err, reason: "could not connect to github or npm", data: data})
}
//,function (err2,data2){ //save to database.
if(err)
return cont({statusCode: 503, error: err, reason: "database error", data: data})
cont(null, {ok: true} )
//})
})
}
}