-
Notifications
You must be signed in to change notification settings - Fork 20
/
addTime.js
111 lines (99 loc) · 3.46 KB
/
addTime.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
const { exec } = require("child_process");
const fs = require("fs"); // 文件模块
const path = require("path"); // 路径模块
const matter = require("gray-matter"); //
const jsonToYaml = require("json2yaml");
const os = require("os");
// 第3个参数 环境
const targetFile = process.argv[2] || "docs"; // cloud df-help
// 小于10补0
function zero(d) {
return d.toString().padStart(2, "0");
}
function dateFormat(date) {
return `${date.getFullYear()}-${zero(date.getMonth() + 1)}-${zero(
date.getDate()
)}`;
}
const getFileCreateTime = (filePath) => {
return new Promise((r, j) => {
// 获取文件最早提交(创建)时间
exec(
"git log --diff-filter=A --format=%aD -- " + filePath,
(err, stdout, stderr) => {
if (err) {
// 错误处理 返回最新时间
r(dateFormat(new Date()));
} else {
const createdTime = stdout.split("\n")[0]; // 提取最早的日期
if (dateFormat(new Date(createdTime)) === "NaN-NaN-NaN") {
console.log("git log --diff-filter=A --format=%aD -- " + filePath);
throw new Error("===");
}
r(dateFormat(new Date(createdTime)));
}
}
);
});
};
const getFileUpdateTime = (filePath) => {
return new Promise((r, j) => {
// 获取文件最近提交(修改)时间
exec("git log --format=%aD -- " + filePath, (err, stdout, stderr) => {
if (err) {
// 错误处理 返回最新时间
r(dateFormat(new Date()));
} else {
const modifiedTime = stdout.split("\n")[0]; // 提取最新的日期
r(dateFormat(new Date(modifiedTime)));
}
});
});
};
const getZhUrl = (url) => {
const zh = path.sep + "zh" + path.sep;
// 如果不是带了 /zh/ 的地址,需要转为对应的中文的地址
if (url.includes(zh)) {
return path.relative(__dirname, url);
}
const translatedUrl = `${path.sep}translate${path.sep}translated${path.sep}`;
const replaceUrl = `${path.sep}docs${path.sep}zh${path.sep}`;
return path.relative(__dirname, url.replace(translatedUrl, replaceUrl));
};
const run = (sourceDir) => {
// 开始循环处理file
const files = fs.readdirSync(sourceDir);
files.forEach(async (item) => {
const filePath = path.join(sourceDir, item);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
run(filePath);
return;
}
if (!item.endsWith(".md")) {
return false;
}
const fileContent = fs.readFileSync(filePath, "utf8");
const { data: matterData, content } = matter(fileContent, {});
// 英文的是在 translate 下的,故需要使用中文版的创建时间和更新时间
const zhFilePath = getZhUrl(filePath);
// 增加创建时间和修改时间
const [createAt, updateAt] = await Promise.all([
getFileCreateTime(zhFilePath),
getFileUpdateTime(zhFilePath),
]);
// 如果没有permalink 则需要回写到md中
matterData.createAt = createAt;
matterData.updateAt = updateAt;
// 写入指定文件内即可
// 拼接新的content
let newFileContent = jsonToYaml
.stringify(matterData)
.replace(/\n\s{2}/g, "\n")
.replace(/"/g, "");
newFileContent += "---" + os.EOL + content;
// 把地址写入文件内
fs.writeFileSync(filePath, newFileContent);
});
};
run(path.join(__dirname, targetFile));