UNPKG

@serpent/common-cli

Version:

通用的 cli 相关的函数

325 lines (321 loc) 12.3 kB
'use strict'; var tslib_es6 = require('./tslib.es6-8ea38f41.cjs'); var run = require('./run.cjs'); require('node:buffer'); require('node:path'); require('node:child_process'); require('node:process'); require('./_commonjsHelpers-ed042b00.cjs'); require('child_process'); require('path'); require('fs'); require('node:url'); require('os'); require('node:os'); require('./index-94e9b39b.cjs'); require('assert'); require('events'); require('buffer'); require('stream'); require('util'); require('url'); require('./info-08047f0f.cjs'); require('./warn-8730a30c.cjs'); require('./supportColor-07ee281e.cjs'); require('./helper-a8839c0a.cjs'); require('./exists-4a19b288.cjs'); require('module'); require('crypto'); /** 执行 git fetch 更新本地仓库 */ function runGitFetch() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, run.silentRun('git fetch')]; case 1: _a.sent(); return [2 /*return*/]; } }); }); } /** * 获取 git 的配置项,如 'user.name', 'user.email' */ function getGitConfig(field) { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput(['git', 'config', '--get', field])]; case 1: return [2 /*return*/, _a.sent()]; case 2: _a.sent(); return [2 /*return*/]; case 3: return [2 /*return*/]; } }); }); } /** * 获取 git 的本地配置项,如 'user.name', 'user.email' */ function getGitLocalConfig(field) { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput(['git', 'config', '--local', '--get', field])]; case 1: return [2 /*return*/, _a.sent()]; case 2: _a.sent(); return [2 /*return*/]; case 3: return [2 /*return*/]; } }); }); } /** * 设置 git 的本地配置项,如 'user.name', 'user.email' */ function setGitLocalConfig(field, value) { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { return [2 /*return*/, run.silentRunOutput(['git', 'config', '--local', field, value])]; }); }); } /** 获取本地当前最新的 commit id */ function getCurrentGitCommitId() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { return [2 /*return*/, run.silentRunOutput('git rev-parse HEAD')]; }); }); } /** 获取本地当前 branch */ function getCurrentGitBranch() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { return [2 /*return*/, run.silentRunOutput('git symbolic-ref --short HEAD')]; }); }); } /** 本地是否有某个分支 */ function hasLocalGitBranch(branch) { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRun(['git', 'show-ref', '--verify', '--quiet', "refs/heads/".concat(branch)])]; case 1: _b.sent(); return [2 /*return*/, true]; case 2: _b.sent(); return [2 /*return*/, false]; case 3: return [2 /*return*/]; } }); }); } /** 检查某个文件是否在 gitignore 中 */ function isFileGitIgnored(pathToFile) { return tslib_es6.__awaiter(this, void 0, void 0, function () { var output, error_1; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput(['git', 'check-ignore', pathToFile])]; case 1: output = _a.sent(); return [2 /*return*/, Boolean(output)]; case 2: error_1 = _a.sent(); // If file is not ignored, `git check-ignore` throws an empty error and exits. // Check that and return false so as not to throw an unwanted error. if (error_1.stdout === '' && error_1.stderr === '') { return [2 /*return*/, false]; } throw error_1; case 3: return [2 /*return*/]; } }); }); } /** 检查当前 git status 是否是干净的 */ function isGitStatusClean() { return tslib_es6.__awaiter(this, void 0, void 0, function () { var output; return tslib_es6.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput('git status --porcelain')]; case 1: output = _b.sent(); if (output === '') { return [2 /*return*/, true]; } return [3 /*break*/, 3]; case 2: _b.sent(); return [3 /*break*/, 3]; case 3: return [2 /*return*/, false]; } }); }); } /** 检查远程是否可以更新,如果返回 false,表示本地需要执行 git pull */ function isGitRemoteHistoryClean() { return tslib_es6.__awaiter(this, void 0, void 0, function () { var history; return tslib_es6.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput(['git', 'rev-list', '--count', '--left-only', '@{u}...HEAD'])]; case 1: // Gracefully handle no remote set up. history = _b.sent(); return [3 /*break*/, 3]; case 2: _b.sent(); return [3 /*break*/, 3]; case 3: if (history && history !== '0') { return [2 /*return*/, false]; } return [2 /*return*/, true]; } }); }); } /** 判断某个 tag 是否存在,使用之前建议先执行 `git fetch` */ function isGitTagExists(tagName) { return tslib_es6.__awaiter(this, void 0, void 0, function () { var output, e_3; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, run.silentRunOutput(['git', 'rev-parse', '--quiet', '--verify', "refs/tags/".concat(tagName)])]; case 1: output = _a.sent(); return [2 /*return*/, !!output]; case 2: e_3 = _a.sent(); // Command fails with code 1 and no output if the tag does not exist, even though `--quiet` is provided // https://github.com/sindresorhus/np/pull/73#discussion_r72385685 if (e_3.stdout === '' && e_3.stderr === '') { return [2 /*return*/, false]; } throw e_3; case 3: return [2 /*return*/]; } }); }); } /** 获取最新的 tag,注意没有 tag 的话会抛出异常 */ function getLatestGitTag() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { return [2 /*return*/, run.silentRunOutput('git describe --abbrev=0 --tags')]; }); }); } /** 获取 tag 列表 */ function getGitTagList() { return tslib_es6.__awaiter(this, void 0, void 0, function () { var output; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, run.silentRunOutput('git tag --sort=creatordate')]; case 1: output = _a.sent(); if (!output) return [2 /*return*/, []]; return [2 /*return*/, output.split('\n')]; } }); }); } /** 获取第一次提交的 commit id */ function getFirstGitCommitId() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { return [2 /*return*/, run.silentRunOutput('git rev-list --max-parents=0 HEAD')]; }); }); } /** 获取版本之间的所有提交记录 */ function getGitCommitLogs(fromRevision, toRevision) { if (toRevision === void 0) { toRevision = 'HEAD'; } return tslib_es6.__awaiter(this, void 0, void 0, function () { var output; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, run.runOutput(['git', 'log', '--format=%s %h', "".concat(fromRevision, "..").concat(toRevision)])]; case 1: output = _a.sent(); if (output) { return [2 /*return*/, output.split('\n').map(function (commit) { var splitIndex = commit.lastIndexOf(' '); return { message: commit.slice(0, splitIndex), id: commit.slice(splitIndex + 1), }; })]; } return [2 /*return*/, []]; } }); }); } /** 删除本地的 tag */ function deleteLocalGitTag(tagName) { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, run.silentRun(['git', 'tag', '--delete', tagName])]; case 1: _a.sent(); return [2 /*return*/]; } }); }); } /** 删除上一次的提交记录 */ function removeLastGitCommit() { return tslib_es6.__awaiter(this, void 0, void 0, function () { return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, run.silentRun(['git', 'reset', '--hard', 'HEAD~1'])]; case 1: _a.sent(); return [2 /*return*/]; } }); }); } exports.deleteLocalGitTag = deleteLocalGitTag; exports.getCurrentGitBranch = getCurrentGitBranch; exports.getCurrentGitCommitId = getCurrentGitCommitId; exports.getFirstGitCommitId = getFirstGitCommitId; exports.getGitCommitLogs = getGitCommitLogs; exports.getGitConfig = getGitConfig; exports.getGitLocalConfig = getGitLocalConfig; exports.getGitTagList = getGitTagList; exports.getLatestGitTag = getLatestGitTag; exports.hasLocalGitBranch = hasLocalGitBranch; exports.isFileGitIgnored = isFileGitIgnored; exports.isGitRemoteHistoryClean = isGitRemoteHistoryClean; exports.isGitStatusClean = isGitStatusClean; exports.isGitTagExists = isGitTagExists; exports.removeLastGitCommit = removeLastGitCommit; exports.runGitFetch = runGitFetch; exports.setGitLocalConfig = setGitLocalConfig;