t-comm
Version:
专业、稳定、纯粹的工具库
221 lines (214 loc) • 7.89 kB
JavaScript
;
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;