wukong-gitlog-cli 1.0.39 → 1.0.41

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 (125) hide show
  1. package/.eslintrc +1 -0
  2. package/.prettierrc +2 -1
  3. package/CHANGELOG.md +97 -0
  4. package/README.md +97 -172
  5. package/README.zh-CN.md +88 -137
  6. package/bin/wukong-gitlog-cli +0 -0
  7. package/doc//347/233/256/345/275/225/347/273/223/346/236/204.md +2871 -0
  8. package/package.json +32 -29
  9. package/rc/.wukonggitlogrc +53 -0
  10. package/scripts/compareHourlyCounts.mjs +42 -0
  11. package/scripts/compareLatest.mjs +106 -0
  12. package/src/app/analyzeAction.mjs +120 -0
  13. package/src/app/exportAction.mjs +215 -0
  14. package/src/app/exportActionProgress.mjs +37 -0
  15. package/src/app/helpers.mjs +292 -0
  16. package/src/app/initAction.mjs +110 -0
  17. package/src/app/initActionWithTemp.mjs +192 -0
  18. package/src/app/journalAction.mjs +117 -0
  19. package/src/app/overtimeAction.mjs +100 -0
  20. package/src/app/runProfileEnd.mjs +0 -0
  21. package/src/app/serveAction.mjs +73 -0
  22. package/src/app/versionAction.mjs +7 -0
  23. package/src/cli/defineOptions.mjs +209 -0
  24. package/src/cli/index.mjs +0 -0
  25. package/src/cli/parseOptions.mjs +126 -8
  26. package/src/constants/index.mjs +16 -2
  27. package/src/domain/author/analyze.mjs +6 -0
  28. package/src/domain/author/map.mjs +0 -0
  29. package/src/domain/export/exportAuthor.mjs +28 -0
  30. package/src/domain/export/exportAuthorChanges.mjs +27 -0
  31. package/src/domain/export/exportAuthorChangesJson.mjs +31 -0
  32. package/src/domain/export/exportByMonth.mjs +157 -0
  33. package/src/domain/export/exportByWeek.mjs +121 -0
  34. package/src/domain/export/exportCommits.mjs +26 -0
  35. package/src/domain/export/exportCommitsExcel.mjs +45 -0
  36. package/src/domain/export/exportCommitsJson.mjs +31 -0
  37. package/src/domain/export/index.mjs +91 -0
  38. package/src/domain/git/ensureGitAvailable.mjs +66 -0
  39. package/src/domain/git/ensureGitRepo.mjs +41 -0
  40. package/src/domain/git/getGitFeatures.mjs +59 -0
  41. package/src/domain/git/getGitLogs.mjs +326 -0
  42. package/src/domain/git/getGitUser.mjs +44 -0
  43. package/src/domain/git/getRepoRoot.mjs +32 -0
  44. package/src/domain/git/gitCapability.mjs +119 -0
  45. package/src/domain/git/index.mjs +96 -0
  46. package/src/domain/git/resolveGerrit.mjs +102 -0
  47. package/src/domain/overtime/analyze.mjs +48 -0
  48. package/src/domain/overtime/index.mjs +3 -0
  49. package/src/domain/overtime/perPeriod.mjs +15 -0
  50. package/src/domain/overtime/render.mjs +15 -0
  51. package/src/i18n/index.mjs +38 -0
  52. package/src/i18n/resources.mjs +252 -0
  53. package/src/index.mjs +132 -649
  54. package/src/infra/cache.mjs +0 -0
  55. package/src/infra/configStore.mjs +128 -0
  56. package/src/infra/fs.mjs +0 -0
  57. package/src/infra/path.mjs +0 -0
  58. package/src/output/csv/overtime.mjs +12 -0
  59. package/src/output/csv.mjs +0 -0
  60. package/src/output/data/readData.mjs +54 -0
  61. package/src/output/data/writeData.mjs +145 -0
  62. package/src/output/excel/commits.mjs +9 -0
  63. package/src/output/excel/outputExcelDayReport.mjs +92 -0
  64. package/src/output/excel/perPeriod.mjs +24 -0
  65. package/src/{excel.mjs → output/excel.mjs} +3 -2
  66. package/src/output/index.mjs +79 -0
  67. package/src/output/json/overtime.mjs +9 -0
  68. package/src/output/tab/overtime.mjs +12 -0
  69. package/src/output/tab.mjs +0 -0
  70. package/src/output/text/commits.mjs +9 -0
  71. package/src/output/text/index.mjs +3 -0
  72. package/src/output/text/outputTxtDayReport.mjs +74 -0
  73. package/src/output/text/overtime.mjs +18 -0
  74. package/src/output/utils/getEsmJs.mjs +10 -0
  75. package/src/output/utils/index.mjs +14 -0
  76. package/src/output/utils/outputPath.mjs +19 -0
  77. package/src/output/utils/writeFile.mjs +10 -0
  78. package/src/serve/index.mjs +0 -0
  79. package/src/{server.mjs → serve/startServer.mjs} +21 -3
  80. package/src/serve/writeData.mjs +0 -0
  81. package/src/utils/authorNormalizer.mjs +28 -2
  82. package/src/utils/buildAuthorChangeStats.mjs +44 -0
  83. package/src/utils/deepMerge.mjs +13 -0
  84. package/src/utils/getPackage.mjs +11 -0
  85. package/src/utils/getProfileDirFile.mjs +12 -0
  86. package/src/utils/{file.mjs → groupRecords.mjs} +8 -9
  87. package/src/utils/index.mjs +5 -2
  88. package/src/utils/logger.mjs +28 -17
  89. package/src/utils/profiler.mjs +0 -101
  90. package/src/utils/resolve.mjs +11 -0
  91. package/src/utils/showVersionInfo.mjs +6 -2
  92. package/src/utils/time.mjs +0 -0
  93. package/src/utils/wait.mjs +2 -0
  94. package/web/app.js +3197 -257
  95. package/web/index.html +171 -22
  96. package/web/revoke/alpha1/app.js +4324 -0
  97. package/web/revoke/alpha1/index.html +266 -0
  98. package/web/revoke/app.before.js +3139 -0
  99. package/web/revoke/index-before.html +181 -0
  100. package/web/static/style.css +116 -9
  101. package/src/git.mjs +0 -256
  102. package/src/handlers/handleServe.mjs +0 -203
  103. package/src/lib/configStore.mjs +0 -11
  104. package/src/lib/memoize.mjs +0 -14
  105. package/src/utils/analyzeOvertimeCached.mjs +0 -7
  106. package/src/utils/checkUpdate.mjs +0 -130
  107. package/src/utils/exitWithTime.mjs +0 -17
  108. package/src/utils/handleSuccess.mjs +0 -9
  109. package/src/utils/logDev.mjs +0 -19
  110. package/src/utils/output.mjs +0 -26
  111. package/src/utils/profiler/diff.mjs +0 -26
  112. package/src/utils/profiler/format.mjs +0 -11
  113. package/src/utils/profiler/index.mjs +0 -144
  114. package/src/utils/profiler/trace.mjs +0 -26
  115. package/src/utils/time/scopeTimer.mjs +0 -37
  116. package/src/utils/time/timer.mjs +0 -33
  117. package/src/utils/time/withTimer.mjs +0 -11
  118. package/src/utils/timer.mjs +0 -35
  119. /package/src/{overtime → domain/overtime}/createOvertimeStats.mjs +0 -0
  120. /package/src/{overtime → domain/overtime}/overtime.mjs +0 -0
  121. /package/src/{json.mjs → output/json.mjs} +0 -0
  122. /package/src/{renderAuthorMapText.mjs → output/renderAuthorMapText.mjs} +0 -0
  123. /package/src/{stats-text.mjs → output/stats-text.mjs} +0 -0
  124. /package/src/{stats.mjs → output/stats.mjs} +0 -0
  125. /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,161 @@
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
- ## 📊 分时段(按周/月)输出
95
-
96
- ```bash
97
- wukong-gitlog-cli --overtime --limit 200 --format text --out commits.txt --per-period-formats csv,tab
98
- ```
50
+ ## 🛠 命令详解
99
51
 
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
169
128
  ```
129
+ <p align="center">
130
+ <img src="https://raw.githubusercontent.com/tomatobybike/wukong-gitlog-cli/main/images/web/overtime.jpg" width="400" alt="wukong-dev Logo" />
131
+ </p>
170
132
 
171
- 导出 Excel + Gerrit:
133
+ 访问 `http://localhost:3000` 查看:
134
+ - 按天/月的提交分布。
135
+ - 加班趋势和高峰时段。
136
+ - **最近 30 天加班时长风险**:自动计算过去 30 天的累计加班时长,并标注风险等级(轻度、中度、严重)。
172
137
 
173
- ```bash
174
- wukong-gitlog-cli --format excel --stats --gerrit "https://gerrit.example.com/c/project/+/{{hash}}"
175
- ```
138
+ ---
176
139
 
177
- 导出 JSON:
140
+ ## 🔗 Gerrit 支持
178
141
 
142
+ 在 Gerrit URL 中使用模板:
179
143
  ```bash
180
- wukong-gitlog-cli --json --out commits.json
144
+ wukong-gitlog-cli analyze --gerrit "https://gerrit.example.com/c/project/+/{{hash}}"
181
145
  ```
182
146
 
183
- 自定义输出目录:
184
-
147
+ 若需使用数字形式的 `changeNumber`,请提供 Gerrit API 地址:
185
148
  ```bash
186
- wukong-gitlog-cli --out-dir ../output --format text --limit 5 --out demo.txt
149
+ wukong-gitlog-cli analyze --gerrit "https://gerrit.example.com/c/project/+/{{changeNumber}}" --gerrit-api https://gerrit.example.com/gerrit
187
150
  ```
188
151
 
189
152
  ---
190
153
 
191
- ## ⚙️ 开发说明
192
-
193
- - 所有输出文件默认存放于 `output/`
154
+ ## 🧾 作者映射 (`authorAliases`)
194
155
 
195
- - 内部 `src/utils/index.mjs` 为 utils 汇总入口
156
+ 在配置文件中合并多个身份:
196
157
 
197
- - Excel 使用 exceljs,并自动添加 `autoFilter`
198
-
199
- 推荐 `.gitignore`:
200
-
201
- ```gitignore
202
- output/
203
- custom-output/
158
+ ```yaml
159
+ authorAliases:
160
+ "tomatoboy@abc.com": "汤姆"
161
+ "tomato@xxx.com": "汤姆"
162
+ "Tom Jacky": "汤姆"
204
163
  ```
205
164
 
206
165
  ---
207
166
 
208
- ## 🤝 贡献指南
209
167
 
210
- 欢迎 PR!
211
- 如果添加新参数或输出字段,请记得同步更新 README。
212
-
213
- ---
214
-
215
- ## 📄 License
168
+ ## 📄 开源协议
216
169
 
217
170
  MIT
218
-
219
- ---
File without changes