Skip to content

Commit 307cf0c

Browse files
author
Rodrigo Fernandes
committed
Merge pull request #8 from rtfpessoa/more-callbacks
use more callbacks
2 parents 7912342 + f88cd6d commit 307cf0c

File tree

1 file changed

+65
-36
lines changed

1 file changed

+65
-36
lines changed

src/main.js

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
*
77
*/
88

9+
var childProcess = require('child_process');
10+
var diff2Html = require('diff2html').Diff2Html;
11+
var fs = require('fs');
12+
var request = require('request');
13+
914
var argv = require('yargs')
1015
.usage('Usage: diff2html [options] -- [diff args]')
1116
.options({
@@ -90,27 +95,34 @@ var argv = require('yargs')
9095
'For support, check out https://github.com/rtfpessoa/diff2html-cli')
9196
.argv;
9297

93-
function getInput() {
94-
if (argv.input === 'file') {
95-
return readFile(argv._[0]);
96-
} else if (argv.input === 'stdin') {
97-
return readFile('/dev/stdin');
98-
} else {
99-
var gitArgs;
100-
if (argv._.length && argv._[0]) {
101-
gitArgs = argv._.join(' ');
102-
} else {
103-
gitArgs = '-M HEAD~1'
104-
}
98+
function getInput(callback) {
99+
switch (argv.input) {
100+
case 'file':
101+
readFile(argv._[0], callback);
102+
break;
103+
104+
case 'stdin':
105+
readStdin(callback);
106+
break;
105107

106-
var diffCommand = 'git diff ' + gitArgs;
107-
return runCmd(diffCommand);
108+
default:
109+
runGitDiff(callback);
108110
}
109111
}
110112

111-
function getOutput(input) {
112-
var diff2Html = require('diff2html').Diff2Html;
113+
function runGitDiff(callback) {
114+
var gitArgs;
115+
if (argv._.length && argv._[0]) {
116+
gitArgs = argv._.join(' ');
117+
} else {
118+
gitArgs = '-M HEAD~1'
119+
}
120+
121+
var diffCommand = 'git diff ' + gitArgs;
122+
return callback(null, runCmd(diffCommand));
123+
}
113124

125+
function getOutput(input) {
114126
var config = {};
115127
config.wordByWord = (argv.diff === 'word');
116128
config.charByChar = (argv.diff === 'char');
@@ -136,8 +148,8 @@ function preview(content) {
136148
}
137149

138150
function prepareHTML(content) {
139-
var template = readFile(__dirname + '/../dist/template.html', 'utf8');
140-
var css = readFile(__dirname + '/../dist/diff2html.css', 'utf8');
151+
var template = readFileSync(__dirname + '/../dist/template.html', 'utf8');
152+
var css = readFileSync(__dirname + '/../dist/diff2html.css', 'utf8');
141153
return template
142154
.replace('<!--css-->', '<style>\n' + css + '\n</style>')
143155
.replace('<!--diff-->', content);
@@ -168,8 +180,6 @@ function postToDiffy(diff, postType) {
168180
}
169181

170182
function post(url, payload, callback) {
171-
var request = require('request');
172-
173183
request({
174184
url: url,
175185
method: 'POST',
@@ -201,40 +211,59 @@ function error(msg) {
201211
console.error(msg);
202212
}
203213

204-
function readFile(filePath) {
205-
var fs = require('fs');
214+
function readFileSync(filePath) {
206215
return fs.readFileSync(filePath, 'utf8');
207216
}
208217

218+
function readFile(filePath, callback) {
219+
return fs.readFile(filePath, {'encoding': 'utf8'}, callback);
220+
}
221+
222+
function readStdin(callback) {
223+
var content = '';
224+
process.stdin.resume();
225+
process.stdin.on('data', function(buf) {
226+
content += buf.toString('utf8');
227+
});
228+
process.stdin.on('end', function() {
229+
callback(null, content);
230+
});
231+
}
232+
209233
function writeFile(filePath, content) {
210-
var fs = require('fs');
211234
fs.writeFileSync(filePath, content);
212235
}
213236

214237
function runCmd(cmd) {
215-
var childProcess = require('child_process');
216238
return childProcess.execSync(cmd).toString('utf8');
217239
}
218240

219241
/*
220242
* CLI code
221243
*/
222244

223-
var input = getInput();
245+
getInput(function(err, input) {
246+
if (err) {
247+
print(err);
248+
return;
249+
}
224250

225-
if (input && argv.diffy) {
226-
postToDiffy(input, argv.diffy);
227-
} else if (input) {
228-
var content = getOutput(input);
251+
if (!input) {
252+
error('The input is empty. Try again.');
253+
argv.help();
254+
}
229255

256+
if (argv.diffy) {
257+
postToDiffy(input, argv.diffy);
258+
return;
259+
}
260+
261+
var output = getOutput(input);
230262
if (argv.file) {
231-
writeFile(argv.file, content);
263+
writeFile(argv.file, output);
232264
} else if (argv.output === 'preview') {
233-
preview(content);
265+
preview(output);
234266
} else {
235-
print(content);
267+
print(output);
236268
}
237-
} else {
238-
error('The input is empty. Try again.');
239-
argv.help();
240-
}
269+
});

0 commit comments

Comments
 (0)