UNPKG

1.2 kBJavaScriptView Raw
1'use strict'
2
3let cp = require('child_process')
4
5module.exports = function (context) {
6 function exec (args) {
7 return new Promise(function (resolve, reject) {
8 cp.execFile('git', args, function (error, stdout) {
9 if (error) return reject(error)
10 resolve(stdout.trim())
11 })
12 })
13 }
14
15 function spawn (args) {
16 return new Promise(function (resolve, reject) {
17 let s = cp.spawn('git', args, {stdio: [0, 1, 2]})
18 s.on('error', reject)
19 s.on('close', resolve)
20 })
21 }
22
23 function remoteFromGitConfig () {
24 return exec(['config', 'heroku.remote']).catch(function () {})
25 }
26
27 function sshGitUrl (app) {
28 return `git@${context.gitHost}:${app}.git`
29 }
30
31 function httpGitUrl (app) {
32 return `https://${context.httpGitHost}/${app}.git`
33 }
34
35 function remoteUrl (name) {
36 return exec(['remote', '-v'])
37 .then(function (remotes) {
38 return remotes.split('\n')
39 .map((r) => r.split('\t'))
40 .find((r) => r[0] === name)[1]
41 .split(' ')[0]
42 })
43 }
44
45 function url (app, ssh) {
46 return ssh ? sshGitUrl(app) : httpGitUrl(app)
47 }
48
49 return {
50 exec,
51 spawn,
52 remoteFromGitConfig,
53 remoteUrl,
54 url
55 }
56}