1 | 'use strict'
|
2 |
|
3 | let cp = require('child_process')
|
4 |
|
5 | module.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 | }
|