EdwardZZZ / articles

工作点滴记录
2 stars 0 forks source link

cp & x #71

Open EdwardZZZ opened 4 years ago

EdwardZZZ commented 4 years ago
/**
 * Synchronously copies src to dest. By default, dest is overwritten if it already exists.
 * @param src — A path to the source file.
 * @param dest — A path to the destination file.
 */
export async function cp(src: string, dest: string, options: {
    callback?: (dest: string) => void,
    flags?: number,
} = {}) {
    if (!fs.existsSync(src)) {
        return console.log(`Source file is not exists. "${src}"`);
    }

    if (fs.statSync(src).isFile()) {
        fs.copyFileSync(src, dest);

        if (options.callback) {
            await Promise.resolve(options.callback(dest));
        }

        return;
    }

    fs.mkdirSync(dest);

    const files: string[] = fs.readdirSync(src);

    if (files && files.length > 0) {
        for (const file of files) {
            await cp(path.resolve(src, file), path.resolve(dest, file), options);
        }
    }
}
#!/usr/bin/env node

'use strict';
const program = require('commander');

const commands = [
    {
        command: 'list',
        aliases: ['l', '--l'],
        // isDefault: true,
        description: 'list dir content',
        examples: [
            'zzz list [-ls]'
        ]
    },
    {
        command: 'remove',
        alias: 'rm',
        description: 'rm dir or file',
        examples: [
            'zzz rm <dirName|fileName>'
        ]
    },
    {
        command: 'file <type>',
        alias: 'f',
        description: 'file operation',
        examples: [
            'zzz f new <fileName>',
            'zzz f vim <fileName>'
        ]
    },
]

// zzz ex -e haha
program
    .command('exec <cmd>')
    .alias('ex')
    .description('execute the given remote cmd')
    .option("-e, --exec_mode", "Which exec mode to use", true)
    .option("-d, --ddd", "Which exec mode to use")
    .action(function (cmd, options) {
        console.log(arguments);
        console.log('exec "%s" using %s mode', cmd, options.exec_mode);
    }).on('--help', function () {
        console.log('');
        console.log('Examples:');
        console.log('');
        console.log('  $ deploy exec sequential');
        console.log('  $ deploy exec async');
    });

for (const { command, alias, aliases, isDefault, description } of commands) {
    program.command(command, { isDefault })
        [alias ? 'alias' : 'aliases'](alias || aliases)
        .description(description)
        .action((...args) => {
            console.log(args.length);
            console.log(command, args.join('\n\n'));
        });
}

program.on('--help', () => {
    console.log('----------');
    console.log('\nExamples:');
    console.log(commands.map(c => c.examples.map(e => `  ${e}`).join('\n')).join('\n'));
});

program.version('0.0.0').parse(process.argv);
EdwardZZZ commented 4 years ago
$ git rev-parse --show-toplevel

$ git rev-parse --git-dir