UNPKG

mrgit

Version:

A tool for managing projects build using multiple repositories.

79 lines (62 loc) 1.89 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md. */ 'use strict'; const fs = require( 'fs' ); const path = require( 'upath' ); const chalk = require( 'chalk' ); const shell = require( '../utils/shell' ); module.exports = { name: 'exec', get helpMessage() { const { italic: i, gray: g, underline: u } = chalk; return ` ${ u( 'Description:' ) } Requires a command that will be executed on all repositories. E.g. "${ g( 'mrgit exec pwd' ) }" will execute "${ i( 'pwd' ) }" command in every repository. Commands that contain spaces must be wrapped in quotation marks, e.g.: "${ g( 'mrgit exec "git remote"' ) }". `; }, /** * @param {Array.<String>} args Arguments that user provided calling the mrgit. */ beforeExecute( args ) { if ( args.length === 1 ) { throw new Error( 'Missing command to execute. Use: mrgit exec [command-to-execute].' ); } }, /** * @param {CommandData} data * @returns {Promise} */ execute( data ) { const log = require( '../utils/log' )(); return new Promise( ( resolve, reject ) => { if ( !data.isRootRepository ) { const newCwd = path.join( data.toolOptions.packages, data.repository.directory ); // Package does not exist. if ( !fs.existsSync( newCwd ) ) { log.error( `Package "${ data.packageName }" is not available. Run "mrgit sync" in order to download the package.` ); return reject( { logs: log.all() } ); } process.chdir( newCwd ); } shell( data.arguments[ 0 ] ) .then( stdout => { process.chdir( data.toolOptions.cwd ); log.info( stdout ); resolve( { logs: log.all() } ); } ) .catch( error => { process.chdir( data.toolOptions.cwd ); log.error( error ); reject( { logs: log.all() } ); } ); } ); } };