@deliverymanager/gitsync
Version:
Synchronize multiple git repos recursively
57 lines (50 loc) • 1.61 kB
JavaScript
;
const Promise = require('bluebird');
const exec = Promise.promisify(require('child_process').exec, {
multiArgs: true
});
/**
* Updates refs for cwd
* @module
*/
/**
* @param {string} path The absolute path to use as an cwd with exec
* @return {string} Repo status: diverged, fast-forward, up-to-date
*/
module.exports = function (path) {
// console.log('path:', path);
// console.log('__dirname:', __dirname);
return exec('git remote update', {
maxBuffer: 1024 * 1024 * 1024,
cwd: path || __dirname
})
.spread((stdout) => {
// console.log('stdout:', stdout);
const match = stdout.match(/diverged|Unpacking|Fetching/);
// console.log('match:', match);
if (match) {
switch (match[0]) {
case 'diverged':
return 'diverged';
case 'Unpacking':
return 'fast-forward';
default:
return exec('git status', {
maxBuffer: 1024 * 1024 * 1024,
cwd: path || __dirname
})
.spread((stdout, stderr) => {
if (stderr) console.log(stderr);
// console.log(stdout);
const match = stdout.match(/diverged|fast-forward|Changes to be committed|Untracked|working (directory|tree) clean|ahead/);
// console.log('match:', match);
return match ? match[0] : 'Untracked';
});
}
} else return 'no-remote';
})
.catch(err => {
console.log('Path with err:', path);
return Promise.reject(err);
});
};