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+
914var 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
138150function 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
170182function 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+
209233function writeFile ( filePath , content ) {
210- var fs = require ( 'fs' ) ;
211234 fs . writeFileSync ( filePath , content ) ;
212235}
213236
214237function 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