UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

221 lines (214 loc) 7.89 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib_es6 = require('../tslib.es6-01322ba9.js'); var child_process = require('child_process'); var fs = require('fs'); var path = require('path'); var fs_fs = require('../fs/fs.js'); var tencentCloud_cos_cos = require('../tencent-cloud/cos/cos.js'); var time_time = require('../time/time.js'); require('../tencent-cloud/cos/helper.js'); require('../bite/format-bite.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); var path__default = /*#__PURE__*/_interopDefaultLegacy(path); function getGitLog(root, filePath, days) { if (days === void 0) { days = 365 * 10; } var since = new Date(); since.setDate(since.getDate() - days); var sinceStr = since.toISOString().split('T')[0]; var cmd = "git log --since=\"".concat(sinceStr, "\" --pretty=format:\"%H|%h|%an|%ae|%ad|%s|%b\" --date=format:'%Y-%m-%d %H:%M:%S' -- ").concat(filePath); var output = child_process.execSync(cmd, { encoding: 'utf8', cwd: root }); var commits = []; output.split('\n').forEach(function (line) { if (!line.trim()) return; var _a = line.split('|'), hash = _a[0], shortHash = _a[1], author = _a[2], email = _a[3], date = _a[4], subject = _a[5], bodyParts = _a.slice(6); var body = bodyParts.join('|').replace(/\n/g, '\\n'); commits.push({ hash: hash, shortHash: shortHash, author: author, email: email, date: date, subject: subject, body: body }); }); return commits; } function getDirs(root) { var dirs = fs__default["default"].readdirSync(root); return dirs; } function libraryChangeStatistics(_a) { var analyzeList = _a.analyzeList, saveDataDir = _a.saveDataDir, cosInfo = _a.cosInfo, analyzeBlackList = _a.analyzeBlackList; return tslib_es6.__awaiter(this, void 0, void 0, function () { var result, _i, analyzeList_1, project, _b, data, cdnLink; return tslib_es6.__generator(this, function (_c) { switch (_c.label) { case 0: result = []; _i = 0, analyzeList_1 = analyzeList; _c.label = 1; case 1: if (!(_i < analyzeList_1.length)) return [3 /*break*/, 4]; project = analyzeList_1[_i]; return [4 /*yield*/, parseOneProject({ project: project, saveDataDir: saveDataDir, cosInfo: cosInfo, analyzeBlackList: analyzeBlackList })]; case 2: _b = _c.sent(), data = _b.result, cdnLink = _b.cdnLink; result.push({ data: data, project: project, cdnLink: cdnLink }); _c.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/, result]; } }); }); } function getTargetAnalyzeDir(_a) { var root = _a.root, analyzeDir = _a.analyzeDir, needAnalyzeSubDir = _a.needAnalyzeSubDir, _b = _a.analyzeBlackList, analyzeBlackList = _b === void 0 ? [] : _b; if (!analyzeDir) { return [root]; } var dirs = getDirs(path__default["default"].resolve(root, analyzeDir)); var targetAnalyzeDir = []; var _loop_1 = function _loop_1(dir) { var srcDir = path__default["default"].resolve(root, analyzeDir, dir, 'src'); if (needAnalyzeSubDir === null || needAnalyzeSubDir === void 0 ? void 0 : needAnalyzeSubDir.includes(dir)) { targetAnalyzeDir.push.apply(targetAnalyzeDir, getDirs(srcDir).filter(function (subDir) { return !analyzeBlackList.includes(subDir); }).map(function (subDir) { return path__default["default"].resolve(srcDir, subDir); })); } else if (!fs__default["default"].existsSync(srcDir)) { targetAnalyzeDir.push(path__default["default"].resolve(root, analyzeDir, dir)); } else { targetAnalyzeDir.push(srcDir); } }; for (var _i = 0, dirs_1 = dirs; _i < dirs_1.length; _i++) { var dir = dirs_1[_i]; _loop_1(dir); } return targetAnalyzeDir; } function filterCommit(commits) { if (commits === void 0) { commits = []; } return commits.filter(function (item) { var _a, _b; return !((_b = (_a = item.subject) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, 'chore(release): publish')); }).filter(function (item) { return item.email && item.author && item.hash; }).filter(function (item) { return item.author !== 'mobilehelper'; }); } function parseOneProject(_a) { var project = _a.project, saveDataDir = _a.saveDataDir, cosInfo = _a.cosInfo, analyzeBlackList = _a.analyzeBlackList; return tslib_es6.__awaiter(this, void 0, void 0, function () { var root, _b, analyzeDir, simpleRoot, needAnalyzeSubDir, targetAnalyzeDir, result, _i, targetAnalyzeDir_1, dir, commits, totalCommitsLength, cdnLink, targetJsonPath, cosName; return tslib_es6.__generator(this, function (_c) { switch (_c.label) { case 0: root = project.root, _b = project.analyzeDir, analyzeDir = _b === void 0 ? '' : _b, simpleRoot = project.simpleRoot, needAnalyzeSubDir = project.needAnalyzeSubDir; targetAnalyzeDir = getTargetAnalyzeDir({ root: root, analyzeDir: analyzeDir, needAnalyzeSubDir: needAnalyzeSubDir, analyzeBlackList: analyzeBlackList }); console.log('[targetAnalyzeDir]', targetAnalyzeDir); result = []; for (_i = 0, targetAnalyzeDir_1 = targetAnalyzeDir; _i < targetAnalyzeDir_1.length; _i++) { dir = targetAnalyzeDir_1[_i]; commits = filterCommit(getGitLog(root, dir)); result.push({ project: project.project, commits: commits, commitsLength: commits.length, analyzeDir: path__default["default"].relative(path__default["default"].resolve(root), dir), git: project.git }); } result.sort(function (a, b) { return b.commitsLength - a.commitsLength; }); totalCommitsLength = result.reduce(function (sum, item) { return sum + item.commitsLength; }, 0); cdnLink = ''; if (!saveDataDir) return [3 /*break*/, 2]; if (!fs__default["default"].existsSync(saveDataDir)) { fs__default["default"].mkdirSync(saveDataDir, { recursive: true }); } targetJsonPath = path__default["default"].resolve(saveDataDir, "".concat(simpleRoot, ".json")); fs_fs.writeFileSync(targetJsonPath, { data: result, date: time_time.timeStampFormat(Date.now(), 'yyyy-MM-dd hh:mm:ss'), total: totalCommitsLength }, true); if (!cosInfo) return [3 /*break*/, 2]; cosName = "".concat(cosInfo.dir, "/").concat(simpleRoot, ".json"); console.log('[cosName]', cosName); console.log('[targetJsonPath]', targetJsonPath); return [4 /*yield*/, tencentCloud_cos_cos.uploadCOSFile({ secretId: cosInfo.secretId, secretKey: cosInfo.secretKey, bucket: cosInfo.bucket, region: cosInfo.region, files: [{ key: cosName, path: targetJsonPath }] })]; case 1: _c.sent(); cdnLink = "https://image-1251917893.file.myqcloud.com/".concat(cosName); _c.label = 2; case 2: return [2 /*return*/, { cdnLink: cdnLink, result: result }]; } }); }); } exports.libraryChangeStatistics = libraryChangeStatistics;