wukong-gitlog-cli 1.0.38 → 1.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/.eslintrc +1 -0
  2. package/.prettierrc +2 -1
  3. package/CHANGELOG.md +103 -0
  4. package/README.md +93 -173
  5. package/README.zh-CN.md +85 -137
  6. package/doc//347/233/256/345/275/225/347/273/223/346/236/204.md +2871 -0
  7. package/package.json +33 -29
  8. package/rc/.wukonggitlogrc +53 -0
  9. package/scripts/compareHourlyCounts.mjs +42 -0
  10. package/scripts/compareLatest.mjs +106 -0
  11. package/src/app/analyzeAction.mjs +120 -0
  12. package/src/app/exportAction.mjs +215 -0
  13. package/src/app/exportActionProgress.mjs +37 -0
  14. package/src/app/helpers.mjs +292 -0
  15. package/src/app/initAction.mjs +110 -0
  16. package/src/app/initActionWithTemp.mjs +192 -0
  17. package/src/app/journalAction.mjs +117 -0
  18. package/src/app/overtimeAction.mjs +100 -0
  19. package/src/app/runProfileEnd.mjs +0 -0
  20. package/src/app/serveAction.mjs +73 -0
  21. package/src/app/versionAction.mjs +7 -0
  22. package/src/cli/defineOptions.mjs +209 -0
  23. package/src/cli/index.mjs +0 -0
  24. package/src/cli/parseOptions.mjs +126 -8
  25. package/src/constants/index.mjs +16 -2
  26. package/src/domain/author/analyze.mjs +6 -0
  27. package/src/domain/author/map.mjs +0 -0
  28. package/src/domain/export/exportAuthor.mjs +28 -0
  29. package/src/domain/export/exportAuthorChanges.mjs +27 -0
  30. package/src/domain/export/exportAuthorChangesJson.mjs +31 -0
  31. package/src/domain/export/exportByMonth.mjs +157 -0
  32. package/src/domain/export/exportByWeek.mjs +121 -0
  33. package/src/domain/export/exportCommits.mjs +26 -0
  34. package/src/domain/export/exportCommitsExcel.mjs +45 -0
  35. package/src/domain/export/exportCommitsJson.mjs +31 -0
  36. package/src/domain/export/index.mjs +91 -0
  37. package/src/domain/git/ensureGitAvailable.mjs +66 -0
  38. package/src/domain/git/ensureGitRepo.mjs +41 -0
  39. package/src/domain/git/getGitFeatures.mjs +59 -0
  40. package/src/domain/git/getGitLogs.mjs +326 -0
  41. package/src/domain/git/getGitUser.mjs +44 -0
  42. package/src/domain/git/getRepoRoot.mjs +32 -0
  43. package/src/domain/git/gitCapability.mjs +119 -0
  44. package/src/domain/git/index.mjs +96 -0
  45. package/src/domain/git/resolveGerrit.mjs +102 -0
  46. package/src/domain/overtime/analyze.mjs +48 -0
  47. package/src/domain/overtime/index.mjs +3 -0
  48. package/src/domain/overtime/perPeriod.mjs +15 -0
  49. package/src/domain/overtime/render.mjs +15 -0
  50. package/src/i18n/index.mjs +38 -0
  51. package/src/i18n/resources.mjs +252 -0
  52. package/src/index.mjs +132 -649
  53. package/src/infra/cache.mjs +0 -0
  54. package/src/infra/configStore.mjs +128 -0
  55. package/src/infra/fs.mjs +0 -0
  56. package/src/infra/path.mjs +0 -0
  57. package/src/output/csv/overtime.mjs +12 -0
  58. package/src/output/csv.mjs +0 -0
  59. package/src/output/data/readData.mjs +54 -0
  60. package/src/output/data/writeData.mjs +145 -0
  61. package/src/output/excel/commits.mjs +9 -0
  62. package/src/output/excel/outputExcelDayReport.mjs +92 -0
  63. package/src/output/excel/perPeriod.mjs +24 -0
  64. package/src/{excel.mjs → output/excel.mjs} +3 -2
  65. package/src/output/index.mjs +79 -0
  66. package/src/output/json/overtime.mjs +9 -0
  67. package/src/output/tab/overtime.mjs +12 -0
  68. package/src/output/tab.mjs +0 -0
  69. package/src/output/text/commits.mjs +9 -0
  70. package/src/output/text/index.mjs +3 -0
  71. package/src/output/text/outputTxtDayReport.mjs +74 -0
  72. package/src/output/text/overtime.mjs +18 -0
  73. package/src/output/utils/getEsmJs.mjs +10 -0
  74. package/src/output/utils/index.mjs +14 -0
  75. package/src/output/utils/outputPath.mjs +19 -0
  76. package/src/output/utils/writeFile.mjs +10 -0
  77. package/src/serve/index.mjs +0 -0
  78. package/src/{server.mjs → serve/startServer.mjs} +21 -3
  79. package/src/serve/writeData.mjs +0 -0
  80. package/src/utils/authorNormalizer.mjs +28 -2
  81. package/src/utils/buildAuthorChangeStats.mjs +44 -0
  82. package/src/utils/deepMerge.mjs +13 -0
  83. package/src/utils/getPackage.mjs +11 -0
  84. package/src/utils/getProfileDirFile.mjs +12 -0
  85. package/src/utils/{file.mjs → groupRecords.mjs} +8 -9
  86. package/src/utils/index.mjs +5 -2
  87. package/src/utils/logger.mjs +28 -17
  88. package/src/utils/profiler.mjs +0 -101
  89. package/src/utils/resolve.mjs +11 -0
  90. package/src/utils/showVersionInfo.mjs +6 -2
  91. package/src/utils/time.mjs +0 -0
  92. package/src/utils/wait.mjs +2 -0
  93. package/web/app.js +3233 -260
  94. package/web/index.html +175 -22
  95. package/web/revoke/alpha1/app.js +4324 -0
  96. package/web/revoke/alpha1/index.html +266 -0
  97. package/web/revoke/app.before.js +3139 -0
  98. package/web/revoke/index-before.html +181 -0
  99. package/web/static/style.css +155 -9
  100. package/src/git.mjs +0 -256
  101. package/src/handlers/handleServe.mjs +0 -203
  102. package/src/lib/configStore.mjs +0 -11
  103. package/src/lib/memoize.mjs +0 -14
  104. package/src/utils/analyzeOvertimeCached.mjs +0 -7
  105. package/src/utils/checkUpdate.mjs +0 -130
  106. package/src/utils/exitWithTime.mjs +0 -17
  107. package/src/utils/handleSuccess.mjs +0 -9
  108. package/src/utils/logDev.mjs +0 -19
  109. package/src/utils/output.mjs +0 -26
  110. package/src/utils/profiler/diff.mjs +0 -26
  111. package/src/utils/profiler/format.mjs +0 -11
  112. package/src/utils/profiler/index.mjs +0 -144
  113. package/src/utils/profiler/trace.mjs +0 -26
  114. package/src/utils/time/scopeTimer.mjs +0 -37
  115. package/src/utils/time/timer.mjs +0 -33
  116. package/src/utils/time/withTimer.mjs +0 -11
  117. package/src/utils/timer.mjs +0 -35
  118. /package/src/{overtime → domain/overtime}/createOvertimeStats.mjs +0 -0
  119. /package/src/{overtime → domain/overtime}/overtime.mjs +0 -0
  120. /package/src/{json.mjs → output/json.mjs} +0 -0
  121. /package/src/{renderAuthorMapText.mjs → output/renderAuthorMapText.mjs} +0 -0
  122. /package/src/{stats-text.mjs → output/stats-text.mjs} +0 -0
  123. /package/src/{stats.mjs → output/stats.mjs} +0 -0
  124. /package/src/{text.mjs → output/text.mjs} +0 -0
package/README.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <p align="center"> <img src="https://raw.githubusercontent.com/tomatobybike/wukong-gitlog-cli/main/images/logo.svg" width="200" alt="wukong-dev Logo" /> </p> <p align="center"> <a href="https://www.npmjs.com/package/wukong-gitlog-cli"><img src="https://img.shields.io/npm/v/wukong-gitlog-cli.svg" alt="npm version"></a> <a href="https://www.npmjs.com/package/wukong-gitlog-cli"><img src="https://img.shields.io/npm/dm/wukong-gitlog-cli.svg" alt="downloads"></a> <a href="https://github.com/tomatobybike/wukong-gitlog-cli/blob/master/LICENSE"><img src="https://img.shields.io/github/license/tomatobybike/wukong-gitlog-cli.svg" alt="license"></a> <a href="https://github.com/tomatobybike/wukong-gitlog-cli"><img src="https://img.shields.io/github/stars/tomatobybike/wukong-gitlog-cli.svg?style=social" alt="GitHub stars"></a> <a href="https://github.com/tomatobybike/wukong-gitlog-cli/issues"><img src="https://img.shields.io/github/issues/tomatobybike/wukong-gitlog-cli.svg" alt="issues"></a> </p>
4
4
 
5
- 一个增强型的 Git 提交记录导出工具,支持 **Excel / JSON / TXT** 输出、分组统计、加班文化分析、Gerrit 链接支持,并带有可视化 Web Dashboard。
5
+ 一个增强型的 Git 提交记录分析与导出工具。支持 **Excel / JSON / TXT** 输出、分组统计、加班文化分析、Gerrit 链接集成,并带有可视化 Web Dashboard。
6
6
 
7
7
  ## 中文 | [English](./README.md)
8
8
 
@@ -10,210 +10,158 @@
10
10
 
11
11
  ## ✨ 功能特性
12
12
 
13
- - 导出 Git 提交记录到 **JSON / 文本 / Excel (XLSX)**
14
-
15
- - 支持按日期分组(按 **天** / **月**)
16
-
17
- - Excel 导出可包含每日统计表
18
-
19
- - 支持 Gerrit 链接(支持模板 `{{hash}}`、`{{changeId}}`、`{{changeNumber}}`)
20
-
21
- - 提供加班文化分析(每日工作时段、节假日、周末等)
22
-
23
- - 自带本地 Web Dashboard,可显示柱状图、折线图、饼图
24
-
25
- - 小而精简的 CLI,依赖极少,基于 ZX + ExcelJS
26
-
27
- ---
28
-
29
- ## 🆕 更新内容
30
-
31
- - 新增 `--gerrit` 支持,自定义 Gerrit URL 模板
32
-
33
- - 新增 `--out-dir` / `--out-parent` 控制输出目录
34
-
35
- - 新增多种 `npm` demo 脚本,便于测试和演示
36
-
37
- - `src/utils` 结构优化,使用 barrel 导出
13
+ - **多格式导出**:支持将 Git 记录导出为 JSON、文本或 Excel (XLSX)
14
+ - **灵活分组**:支持按天或按月进行记录分组。
15
+ - **加班分析**:分析每日工作时长、节假日、周末加班情况,并提供累计风险评估。
16
+ - **Gerrit 集成**:支持自定义 Gerrit URL 模板(支持 `{{hash}}`、`{{changeId}}`、`{{changeNumber}}`)。
17
+ - **Web Dashboard**:内置本地可视化面板,包含图表和风险摘要。
18
+ - **去重功能**:自动根据 `Change-Id` 对提交记录进行去重。
19
+ - **作者映射**:支持 `authorAliases` 配置,将不同的邮箱/用户名合并为同一人。
38
20
 
39
21
  ---
40
22
 
41
23
  ## 📥 安装
42
24
 
43
- 全局安装(推荐):
25
+ 推荐全局安装:
44
26
 
45
27
  ```bash
46
28
  npm i -g wukong-gitlog-cli
47
29
  # 或
48
30
  yarn global add wukong-gitlog-cli
49
31
 
50
- # 全局运行
32
+ # 运行
51
33
  wukong-gitlog-cli --help
52
34
  ```
53
35
 
54
36
  ---
55
37
 
56
- ## 🚀 使用方法
38
+ ## 🚀 快速开始
57
39
 
58
40
  ```bash
59
- wukong-gitlog-cli --overtime --serve --port 5555
60
- ```
41
+ # 初始化配置文件
42
+ wukong-gitlog-cli init
61
43
 
62
- ```bash
63
- wukong-gitlog-cli [options]
44
+ # 执行分析并启动 Web Dashboard
45
+ wukong-gitlog-cli serve --overtime
64
46
  ```
65
47
 
66
- ### 常用参数
67
-
68
- | 参数 | 描述 |
69
- | -------------------- | ------------------------------------------------------------------ |
70
- | `--author <name>` | 按作者过滤 |
71
- | `--email <email>` | 按邮箱过滤 |
72
- | `--since <date>` | 起始日期(如 2025-01-01) |
73
- | `--until <date>` | 结束日期 |
74
- | `--limit <n>` | 限制提交数量 |
75
- | `--no-merges` | 排除 merge 提交 |
76
- | `--json` | 输出 JSON |
77
- | `--format <type>` | 输出格式: text / excel / json(默认 text) |
78
- | `--group-by <type>` | 分组: day / month |
79
- | `--overtime` | 启用加班文化分析 |
80
- | `--country <code>` | 假期:CN 或 US(默认 CN) |
81
- | `--stats` | Excel 中包含统计 sheet |
82
- | `--gerrit <prefix>` | Gerrit URL 模板 |
83
- | `--gerrit-api <url>` | Gerrit API 地址(用于 changeNumber) |
84
- | `--out <file>` | 输出文件名 |
85
- | `--out-dir <dir>` | 输出目录 |
86
- | `--out-parent` | 输出到父目录的 `output/` |
87
- | `--serve` | 启动本地 Web 服务查看提交统计(会生成 output/data 下的数据) |
88
- | `--port <n>` | Web 服务端口(默认 3000) |
89
- | `--serve-only` | 仅启动 Web 服务,不导出或分析数据(使用现有 output/data) |
90
- | `--version` | 显示版本号 |
91
-
92
48
  ---
93
49
 
94
- ## 📊 分时段(按周/月)输出
50
+ ## 🛠 命令详解
95
51
 
96
- ```bash
97
- wukong-gitlog-cli --overtime --limit 200 --format text --out commits.txt --per-period-formats csv,tab
98
- ```
99
-
100
- 如需导出 Excel:
52
+ 工具采用了子命令结构,更加模块化:
101
53
 
54
+ ### 1. `init`
55
+ 初始化配置文件(支持 `.wukonggitlogrc` YAML、JS 或 JSON 格式)。
102
56
  ```bash
103
- wukong-gitlog-cli --per-period-formats xlsx --per-period-excel-mode sheets
57
+ wukong-gitlog-cli init [-f, --force]
104
58
  ```
105
59
 
106
- 仅导出分时段文件:
107
-
60
+ ### 2. `analyze`
61
+ 核心分析命令。获取 Git 日志并执行全面分析。
108
62
  ```bash
109
- wukong-gitlog-cli --per-period-only
63
+ wukong-gitlog-cli analyze [options]
110
64
  ```
111
65
 
112
- ---
113
-
114
- ## 📈 启动本地 Dashboard
115
-
116
- 分析结果会导出为:
117
-
118
- - `output/data/commits.mjs`
119
-
120
- - `output/data/overtime-stats.mjs`
121
-
122
- 启动服务器:
123
-
66
+ ### 3. `overtime`
67
+ 专注于加班文化分析。
124
68
  ```bash
125
- wukong-gitlog-cli --overtime --serve --port 5555 --limit 200
69
+ wukong-gitlog-cli overtime [options]
126
70
  ```
127
71
 
128
- 浏览器访问:
129
-
130
- ```arduino
131
- http://localhost:3000
72
+ ### 4. `export`
73
+ 专注于将数据导出为不同格式。
74
+ ```bash
75
+ wukong-gitlog-cli export [options]
132
76
  ```
133
77
 
134
-
135
- <p align="center">
136
- <img src="https://raw.githubusercontent.com/tomatobybike/wukong-gitlog-cli/main/images/web/overtime.jpg" width="400" alt="wukong-dev Logo" />
137
- </p>
138
- ---
139
-
140
- ## 🔗 Gerrit 支持
141
-
142
- 示例:
143
-
78
+ ### 5. `journal`
79
+ 生成工作日报/日志。
144
80
  ```bash
145
- wukong-gitlog-cli --gerrit "https://gerrit.example.com/c/project/+/{{hash}}"
81
+ wukong-gitlog-cli journal [options]
146
82
  ```
147
83
 
148
- 若想使用 Gerrit 数字 Change Number:
149
-
84
+ ### 6. `serve`
85
+ 启动本地 Web Dashboard。在启动前会自动执行分析以确保数据最新。
150
86
  ```bash
151
- wukong-gitlog-cli --gerrit "https://gerrit.example.com/c/project/+/{{changeNumber}}" --gerrit-api https://gerrit.example.com/gerrit
87
+ wukong-gitlog-cli serve [--port <n>]
152
88
  ```
153
89
 
154
- 支持 Basic 和 Bearer Token:
90
+ ---
155
91
 
156
- ```bash
157
- --gerrit-auth "user:password"
158
- --gerrit-auth "MYTOKEN"
159
- ```
92
+ ## ⚙️ 参数选项
93
+
94
+ ### 全局参数
95
+ - `-l, --lang <code>`:设置语言(en, zh-CN)。
96
+ - `--debug`:开启调试模式。
97
+ - `--info`:显示环境信息(Git 版本、操作系统等)。
98
+
99
+ ### Git 相关参数(适用于 `analyze`, `overtime`, `export`, `journal`)
100
+ - `--author <name>`:按作者名过滤。
101
+ - `--email <email>`:按邮箱过滤。
102
+ - `--since <date>`:起始日期(如 2025-01-01)。
103
+ - `--until <date>`:结束日期。
104
+ - `--limit <n>`:限制提交数量。
105
+ - `--no-merges`:排除 Merge 提交。
106
+ - `--path <path>`:Git 仓库路径。
107
+
108
+ ### 分析相关参数
109
+ - `--work-start <hour>`:标准上班时间(默认:9)。
110
+ - `--work-end <hour>`:标准下班时间(默认:18)。
111
+ - `--overnight-cutoff <hour>`:跨天计算截止时间(默认:6)。
112
+ - `--country <code>`:节假日日历(CN, US 等)。
113
+
114
+ ### 输出相关参数
115
+ - `-f, --format <type>`:输出格式(text, excel, json)。
116
+ - `--out <file>`:输出文件名。
117
+ - `--out-dir <dir>`:输出目录。
118
+ - `--stats`:在 Excel 中包含统计工作表。
160
119
 
161
120
  ---
162
121
 
163
- ## 📚 示例指令
122
+ ## 📊 Web Dashboard
164
123
 
165
- 导出文本(按月分组):
124
+ 启动服务以查看交互式图表:
166
125
 
167
126
  ```bash
168
- wukong-gitlog-cli --format text --group-by month
127
+ wukong-gitlog-cli serve --overtime --port 3000
169
128
  ```
170
129
 
171
- 导出 Excel + Gerrit:
130
+ 访问 `http://localhost:3000` 查看:
131
+ - 按天/月的提交分布。
132
+ - 加班趋势和高峰时段。
133
+ - **最近 30 天加班时长风险**:自动计算过去 30 天的累计加班时长,并标注风险等级(轻度、中度、严重)。
172
134
 
173
- ```bash
174
- wukong-gitlog-cli --format excel --stats --gerrit "https://gerrit.example.com/c/project/+/{{hash}}"
175
- ```
135
+ ---
176
136
 
177
- 导出 JSON:
137
+ ## 🔗 Gerrit 支持
178
138
 
139
+ 在 Gerrit URL 中使用模板:
179
140
  ```bash
180
- wukong-gitlog-cli --json --out commits.json
141
+ wukong-gitlog-cli analyze --gerrit "https://gerrit.example.com/c/project/+/{{hash}}"
181
142
  ```
182
143
 
183
- 自定义输出目录:
184
-
144
+ 若需使用数字形式的 `changeNumber`,请提供 Gerrit API 地址:
185
145
  ```bash
186
- wukong-gitlog-cli --out-dir ../output --format text --limit 5 --out demo.txt
146
+ wukong-gitlog-cli analyze --gerrit "https://gerrit.example.com/c/project/+/{{changeNumber}}" --gerrit-api https://gerrit.example.com/gerrit
187
147
  ```
188
148
 
189
149
  ---
190
150
 
191
- ## ⚙️ 开发说明
192
-
193
- - 所有输出文件默认存放于 `output/`
194
-
195
- - 内部 `src/utils/index.mjs` 为 utils 汇总入口
151
+ ## 🧾 作者映射 (`authorAliases`)
196
152
 
197
- - Excel 使用 exceljs,并自动添加 `autoFilter`
153
+ 在配置文件中合并多个身份:
198
154
 
199
- 推荐 `.gitignore`:
200
-
201
- ```gitignore
202
- output/
203
- custom-output/
155
+ ```yaml
156
+ authorAliases:
157
+ "tomatoboy@abc.com": "汤姆"
158
+ "tomato@xxx.com": "汤姆"
159
+ "Tom Jacky": "汤姆"
204
160
  ```
205
161
 
206
162
  ---
207
163
 
208
- ## 🤝 贡献指南
209
-
210
- 欢迎 PR!
211
- 如果添加新参数或输出字段,请记得同步更新 README。
212
-
213
- ---
214
164
 
215
- ## 📄 License
165
+ ## 📄 开源协议
216
166
 
217
167
  MIT
218
-
219
- ---