-
Notifications
You must be signed in to change notification settings - Fork 0
/
fetch.js
45 lines (38 loc) · 1.23 KB
/
fetch.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
const GitHub = require('github-api/dist/GitHub.js')
const { fetchIssue } = require('./src/web.js')
const db = require('./src/db.js')
db.config({ basePath: 'db/incubator-weex' })
const GitHubAgent = new GitHub({
username: 'Hanks-bot',
password: 'Hanks10100'
})
const issueAgent = GitHubAgent.getIssues('apache', 'incubator-weex')
function fetchAndSave (agent, number) {
console.log(` => fetching #${number} ...`)
return fetchIssue(agent, number)
.then(issue => {
const type = issue.pull_request ? 'PR': 'issue'
if (issue.pull_request && issue.state !== 'closed') {
console.log(` => [${type}] #${number} ${issue.title}`)
db.save(`${type.toLowerCase()}s/${number}`, issue)
}
})
}
const RETRY_COUNT = 3
function fetchNext (agent, number = 1, retry = RETRY_COUNT) {
return fetchAndSave(agent, number)
.then(() => fetchNext(agent, number + 1, retry))
.catch(({ response }) => {
console.log(` => ${response.status}`)
if (response.status === 404 || retry <= 0) {
fetchNext(agent, number + 1, RETRY_COUNT)
} else {
fetchNext(agent, number, retry - 1)
}
})
}
let start = 1
if (process.argv[2]) {
start = Number(process.argv[2])
}
fetchNext(issueAgent, start)