Skip to content

Commit 76bba56

Browse files
authored
Create index.js
Initial commit for svn-bot that uploads revision logs to arangodb foxx services
1 parent 87645fa commit 76bba56

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

svn-bot/index.js

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#!/usr/bin/env node
2+
3+
const unirest = require('unirest');
4+
const svn = require('node-svn-ultimate');
5+
const program = require('commander');
6+
const pkg = require('./package');
7+
program.version(pkg.version);
8+
9+
program
10+
.option('-v, --verbose', 'output extra information at runtime')
11+
.requiredOption('-a, --address [svn address]', 'address')
12+
.requiredOption('-u, --username [username]', 'username')
13+
.requiredOption('-p, --password [password]', 'password')
14+
.requiredOption('-d, --destination [destination]', 'API destination where data will be sent');
15+
16+
program.parse(process.argv);
17+
18+
console.log(`Probing GET ${program.destination} ...`);
19+
20+
const uploadToApi = doc =>
21+
{
22+
unirest.post(program.destination)
23+
.headers({
24+
'Accept': 'application/json',
25+
'Content-Type': 'application/json'
26+
})
27+
.send(doc)
28+
.end(res =>
29+
{
30+
console.log(`${res.status} -- #${doc.log.revision} ${doc.log.message}`);
31+
});
32+
33+
};
34+
35+
unirest.get(program.destination)
36+
.end(res =>
37+
{
38+
if (res.status === 200)
39+
{
40+
console.log('Got API working');
41+
42+
//check last revision number uploaded for this repo
43+
unirest.get(`${program.destination}/log/last?repo=${program.address}`)
44+
.end(res_last =>
45+
{
46+
if (res_last.status === 200)
47+
{
48+
const {result} = res_last.body;
49+
if (result)
50+
{
51+
const {revision} = result.log;
52+
svn.commands.log(program.address, {
53+
trustServerCert: true,
54+
revision: `HEAD:${revision}`,
55+
username: program.username,
56+
password: program.password
57+
}, (err, data) =>
58+
{
59+
if (!err)
60+
{
61+
if (!Array.isArray(data.logentry))
62+
{
63+
const doc = {
64+
repo: program.address,
65+
log: {
66+
revision: Number(data.logentry.$.revision),
67+
author: data.logentry.author,
68+
date: new Date(data.logentry.date).getTime(),
69+
message: data.logentry.msg
70+
}
71+
};
72+
73+
if (doc.log.revision > revision)
74+
{
75+
uploadToApi(doc);
76+
}
77+
}
78+
else
79+
{
80+
for (const entry of data.logentry)
81+
{
82+
const doc = {
83+
repo: program.address,
84+
log: {
85+
revision: Number(entry.$.revision), author: entry.author,
86+
date: new Date(entry.date).getTime(),
87+
message: entry.msg
88+
}
89+
};
90+
91+
if (doc.log.revision > revision)
92+
{
93+
uploadToApi(doc);
94+
}
95+
}
96+
}
97+
}
98+
});
99+
}
100+
else
101+
{
102+
process.exit(1);
103+
}
104+
}
105+
else
106+
{
107+
process.exit(127);
108+
}
109+
});
110+
}
111+
else
112+
{
113+
console.log('\33[41m' + `ERROR: ${res.body.errorMessage}` + '\33[0m');
114+
process.exit(127);
115+
}
116+
});

0 commit comments

Comments
 (0)