sherry-utils
Version:
sherry-utils for Sherry
48 lines (41 loc) • 1.06 kB
JavaScript
const download = require('download')
const gitclone = require('git-clone')
const logger = require('./logger')
const GitUrlParser = require('./GitUrlParser')()
const fs = require('./fs')
/**
* Download `repo` to `dest` and callback `fn(err)`.
*
* @param {GitRepoUrl} repo
* @param {String} dest
* @param {Object} opts
*/
module.exports = async function (repo, dest, opts) {
logger.debug('repo', repo)
logger.debug('opts', opts)
await fs.remove(dest)
GitUrlParser.setOptions(opts)
repo = GitUrlParser.parse(repo)
const { downloadUrl, checkout, protocol } = repo
if (protocol === 'ssh') {
return new Promise((resolve, reject) => {
gitclone(downloadUrl, dest, {
checkout,
shallow: checkout === 'master'
}, async err => {
if (err) {
reject(err)
} else {
await fs.remove(dest + '/.git')
resolve()
}
})
})
}
return download(downloadUrl, dest, {
extract: true,
strip: 1,
mode: '666',
headers: { accept: 'application/zip' }
})
}