ggit
Version:
Local promise-returning git command wrappers
71 lines (60 loc) • 1.83 kB
JavaScript
var log = require('debug')('ggit')
var la = require('lazy-ass')
var check = require('check-more-types')
var glob = require('glob')
var q = require('q')
var folder = require('chdir-promise')
var isTracked = require('./is-file-tracked')
var R = require('ramda')
la(check.fn(glob), 'missing glob')
la(check.fn(isTracked), 'missing is tracked')
function is3rdParty (filename) {
return /node_modules/.test(filename) || /bower_components/.test(filename)
}
function isGitFile (filename) {
return filename === '.git' || /^\.git\//.test(filename)
}
const isNotGitFile = filename => !isGitFile(filename)
const isNot3rdPartyFile = filename => !is3rdParty(filename)
function findFiles (pattern, options) {
pattern = pattern || '**/*.js'
var allFiles = glob.sync(pattern, options)
var appFiles = allFiles.filter(isNotGitFile).filter(isNot3rdPartyFile)
log('found files\n' + appFiles.join('\n'))
return q(appFiles)
}
function leaveTracked (filenames) {
la(check.arrayOfStrings(filenames), 'expected list of filenames', filenames)
return q
.all(filenames.map(isTracked))
.then(R.zipObj(filenames))
.then(R.pickBy(R.equals(true)))
.then(R.keys)
}
function sourceFiles (folderName, pattern, options) {
if (folderName) {
return folder
.to(folderName)
.then(findFiles.bind(null, pattern, options))
.then(leaveTracked)
.tap(folder.back)
}
return findFiles(pattern, options).then(leaveTracked)
}
module.exports = check.defend(
sourceFiles,
check.maybe.unemptyString,
'expected folder name',
check.maybe.unemptyString,
'expected glob pattern',
check.maybe.object,
'expected glob options'
)
if (!module.parent) {
sourceFiles('.', '**', { dot: true })
.then(console.log.bind(console))
.catch(e => {
console.error(e)
process.exit(1)
})
}