git-mikado/src/commands/status.js

52 lines
1.5 KiB
JavaScript

const Git = require('simple-git');
const inquirer = require('inquirer');
const report = require('yurnalist');
const _ = require('lodash');
const u = require('updeep');
const columnify = require('columnify');
const chalk = require('chalk');
module.exports = async (yargs) => {
const config = (await Git().listConfig('local')).all;
let tree = Object.entries(config).reduce(
(accum, [key,value]) => u.updateIn(key,value,accum), {}
);
const branches = {};
const current = (await Git().raw('branch','--show-current')).replace("\n",'');
for( const branch in tree.branch ) {
const entry = tree.branch[branch];
if( 'mikado-done' in entry ) {
let deps = entry['mikado-dependency'];
if(!Array.isArray(deps)) deps = [ deps ].filter(x=>x);
branches[branch] = {
bullet: branch === current ? '*': ' ',
dependencies: deps.length > 0 ? deps.map( dep => chalk.magenta(dep) ): '',
name: chalk.blue.bold(branch),
upstream: entry['mikado-upstream'],
base: chalk.cyan.italic(entry['mikado-base'] ?? ''),
done: entry['mikado-done'],
}
}
}
console.log( "\nMikado status\n" );
console.log(
columnify( Object.values(branches), {
showHeaders: false,
columns: [ 'bullet', 'name', 'base', 'dependencies' ],
config: {
base: { minWidth: 10 },
}
} )
)
}