UNPKG

ggit

Version:

Local promise-returning git command wrappers

54 lines (45 loc) 1.3 kB
var la = require('lazy-ass') var gitBlame = require('./blame') var check = require('check-more-types') var q = require('q') var R = require('ramda') function toArray (x) { return Array.isArray(x) ? x : [x] } function zipBlames (filenames, blames) { la(check.array(blames), 'blame info', blames) console.log('found blame info for', blames.length, 'files') la( check.sameLength(filenames, blames), 'mismatch in blame lengths', filenames, blames ) var lineBlames = blames.map(toArray) var fileBlame = R.zipObj(filenames, lineBlames) return fileBlame } // assumes we are inside folder where filenames make sense // probably inside git repo folder and filenames are relative // to the repo's root function commitForEachLine (filenames) { console.log('blames for', filenames) var blamePromises = filenames.map(function (name) { return R.partial(gitBlame, [name]) }) var blameInfo = [] function keepBlameInfo (chain, fn) { return chain.then(fn).then(function (blameForFile) { blameInfo.push(blameForFile) }) } return blamePromises .reduce(keepBlameInfo, q()) .then(R.always(blameInfo)) .then(R.partial(zipBlames, [filenames])) } module.exports = check.defend( commitForEachLine, check.arrayOfStrings, 'need filenames' )