/
wazza.js
executable file
·128 lines (109 loc) · 3.44 KB
/
wazza.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/node
var Configstore = require('configstore');
var Monitor = require('svnmonitor');
var _ = require('underscore');
var moment = require('moment');
var exec = require('child_process').exec;
var prompt = require('prompt');
var argv = require('optimist').argv;
prompt.message = '';
prompt.delimiter = '';
var conf = new Configstore('wazza');
var user = conf.get('username');
var pwd = conf.get('password');
var svninfos = [];
var url = '';
var localRevision = 0;
var setup = function(callback) {
prompt.start();
prompt.get([{
name: 'username',
description: 'Username: ',
required: true
}, {
name: 'password',
description: 'Password: ',
hidden: true,
conform: function (value) {
return true;
}
}], function (err, result) {
conf.set('username', result.username);
conf.set('password', result.password);
console.log('Settings stored in', conf.path);
if (callback) {
callback();
}
});
};
/**
* Extract the value for the given key from the 'svn info' result string
* @param {String} key, One of the 'svn info' key (URL, Revision, etc...)
*
* @return {String}
*/
var getInfo = function(key) {
var urlLine = _.find(svninfos, function(line) {
return line.indexOf(key) === 0;
});
return urlLine.split(': ')[1];
};
var displayUpdates = function(nbCommits) {
console.log();
console.log(' Looking for updates on');
console.log('', url.bold);
console.log(' Local revision :', localRevision.toString().bold, '\n');
var svnPortalMon = new Monitor(url, user, pwd);
svnPortalMon.getLatestCommits(nbCommits, function(err, logs) {
if(err){
console.log('Error: ' + err);
return;
}
var nbUpdates = 0;
_.each(logs, function(log) {
if (parseInt(log.revision, 10) > localRevision) {
var header = moment(log.date, "YYYY-MM-DD HH:mm:ss Z").fromNow() + ', ' + 'revision ' + log.revision;
console.log('', header.grey.bold);
console.log(' \\o/'.bold, log.author.trim().green.bold.underline, log.message.split('\n').join(' '));
console.log('');
nbUpdates++;
}
});
if (nbUpdates === 0) {
console.log(' You\'re up to date !'.green.bold);
} else {
console.log('------------------------------');
console.log(' ',nbUpdates.toString().red.bold, 'updates available !'.blue.bold);
console.log('------------------------------');
}
});
};
var run = function() {
// Get folder SVN URL and local revision
exec('svn info', function (error, stdout, stderr) {
if (error) {
console.log(error);
console.log('\n');
return;
}
svninfos = stdout.split('\n');
url = getInfo('URL');
localRevision = parseInt(getInfo('Revision'), 10);
// FIXME: Provide a limit to avoid 'Error: Error: stdout maxBuffer exceeded.'
displayUpdates(200);
});
};
// Go go go !
var wantSetup = _.find(argv._,function(arg) {
return arg === 'setup';
});
if (wantSetup) {
setup();
} else if (!user || !pwd) {
console.log("Please set your SVN credentials.");
setup(function() {
run();
});
} else {
run();
}