forked from scottgonzalez/pretty-diff
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgist-diff.js
executable file
·123 lines (107 loc) · 2.62 KB
/
gist-diff.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
#!/usr/bin/env node
var https = require( "https" ),
exec = require( "child_process" ).exec,
diff = require( "./diff" ),
userAgent = getUA();
function getUA() {
var os = require( "os" ),
version = require( "./package.json" ).version;
return os.platform() + "/" + os.release() + " " +
"node/" + process.versions.node + " " +
"gist-diff/" + version;
}
getAuth(function( username, password ) {
var auth = username && password ? username + ":" + password : null,
args = process.argv.slice( 2 ),
publicGist = args.indexOf( "--public" ),
isPublic = publicGist !== -1;
if ( isPublic ) {
args.splice( publicGist, 1 );
}
diff( args.join( " " ), function( error, parsedDiff ) {
var files = {};
for ( var file in parsedDiff ) {
files[ file.replace( /\//g, "-" ) + ".diff" ] = {
content: parsedDiff[ file ].join( "\n" )
};
}
postGist({
"public": isPublic,
files: files
}, auth, showGist );
});
});
function postGist( settings, auth, fn ) {
var data = JSON.stringify( settings ),
headers = {
"user-agent": userAgent,
"content-length": data.length
};
if ( auth ) {
headers.Authorization = "Basic " + new Buffer( auth ).toString( "base64" );
}
var req = https.request({
host: "api.github.com",
port: 443,
path: "/gists",
method: "POST",
headers: headers
}, function( res ) {
var response = "";
res.setEncoding( "utf8" );
res.on( "data", function( chunk ) {
response += chunk;
});
res.on( "end", function() {
fn( JSON.parse( response ) );
});
});
req.write( data );
req.end();
}
function showGist( data ) {
if ( data.html_url ) {
exec( "open " + data.html_url );
} else {
console.log( data.message );
}
}
function getUsername( fn ) {
exec( "git config --get github.user", function( error, stdout ) {
var username = stdout.trim();
if ( username ) {
fn( username );
return;
}
process.stdout.write( "GitHub username: " );
process.stdin.resume();
process.stdin.setEncoding( "utf8" );
process.stdin.once( "data", function( chunk ) {
process.stdin.pause();
fn( chunk.trim() );
});
});
}
function getPassword( username, fn ) {
process.stdout.write( "GitHub password for " + username + ": " );
process.stdin.resume();
process.stdin.setEncoding( "utf8" );
process.stdin.setRawMode( true );
var password = "";
process.stdin.on( "data", function( chunk ) {
if ( chunk.charCodeAt( 0 ) === 13 ) {
process.stdin.pause();
console.log( "" );
fn( password );
return;
}
password += chunk;
});
}
function getAuth( fn ) {
getUsername(function( username ) {
getPassword( username, function( password ) {
fn( username, password );
});
});
}