1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- var fs = require('fs');
- var ini = require('ini');
- var path = require('path');
- module.exports = function(dir,cb){
- findGit(dir,function(config) {
- if(!config) return cb(new Error('no gitconfig to be found at '+dir))
- fs.readFile(config,function(err,data){
- if(err) return cb(err);
- try{
- var formatted = format(ini.parse(data.toString()));
- } catch (e){
- return cb(e);
- }
- cb(false,formatted);
- })
- })
- }
- function format(data){
- var out = {};
- Object.keys(data).forEach(function(k){
- if(k.indexOf('"')> -1) {
- var parts = k.split('"');
- var parentKey = parts.shift().trim();
- var childKey = parts.shift().trim();
- if(!out[parentKey]) out[parentKey] = {};
- out[parentKey][childKey] = data[k];
- } else {
- out[k] = data[k];
- }
- });
- return out;
- }
- function findGit(dir, cb) {
- var folder = path.join(dir, '.git/config')
- fs.exists(folder,function(exists) {
- if(exists) return cb(folder)
- if(dir === path.resolve(dir, '..')) return cb(false)
- findGit(path.resolve(dir, '..'), cb)
- })
- }
|