git-fish-log 1.0.8 → 1.0.9
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.
- package/README-/345/225/260/345/227/246/347/211/210.md +12 -13
- package/README.md +3 -0
- package/dist/index.js +285 -267
- package/package.json +1 -1
|
@@ -48,6 +48,10 @@ npm link
|
|
|
48
48
|
* `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
|
|
49
49
|
* `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
|
|
50
50
|
|
|
51
|
+
## 🆕 v1.0.9 更新内容
|
|
52
|
+
|
|
53
|
+
- **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
|
|
54
|
+
|
|
51
55
|
## 🆕 v1.0.8 更新内容
|
|
52
56
|
|
|
53
57
|
- **摸鱼指数算法 v2 重设计**:引入「有效 Commit」概念(单次增删 ≥ 20 行),天然过滤格式化/小修复;代码行数改用 log₁₀ 压缩并降权至 10%,工作时长+时间分布合计占 50% 权重,摸鱼/爆肝判断更贴合直觉。详情见下方「算法说明」章节。
|
|
@@ -106,22 +110,17 @@ fish -m
|
|
|
106
110
|
|
|
107
111
|
📅 每日摸鱼指数概览:
|
|
108
112
|
周一 周二 周三 周四 周五 周六 周日
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
5月4日 5月5日 5月6日 5月7日 5月8日 5月9日 5月10日
|
|
113
|
-
90% 90% 28% 90% 23% 19% 90%
|
|
114
|
-
|
|
115
|
-
5月11日 5月12日 5月13日 5月14日 5月15日 5月16日 5月17日
|
|
116
|
-
61% 39% 23% 90% 90% 90% 90%
|
|
113
|
+
6月1日 6月2日 6月3日 6月4日 6月5日 6月6日 6月7日
|
|
114
|
+
67% 50% 48% 76% 95% 95% 95%
|
|
117
115
|
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
6月8日 6月9日 6月10日 6月11日 6月12日 6月13日 6月14日
|
|
117
|
+
78% 78% 38% 47% 38% 95% 95%
|
|
120
118
|
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
6月15日 6月16日 6月17日 6月18日 6月19日•6月20日•6月21日•
|
|
120
|
+
57% 77% 42% 64% 95% 95% 95%
|
|
123
121
|
|
|
124
|
-
|
|
122
|
+
6月22日 6月23日 6月24日 6月25日 6月26日 6月27日 6月28日
|
|
123
|
+
95% 51% 95% 95% 78% 95% 95%
|
|
125
124
|
|
|
126
125
|
--------------------------------------------------
|
|
127
126
|
🤖 锐评:
|
package/README.md
CHANGED
|
@@ -33,6 +33,9 @@
|
|
|
33
33
|
* `host`: 可选。私有部署的 GitLab 域名(如 `https://gitlab.mycompany.com`),缺省默认使用 `https://gitlab.com`。
|
|
34
34
|
* `name`: 可选。给该数据源指定的别名(如 `my-company`),缺省时自动使用 host 域名作为别名。若别名已存在则会覆盖更新。
|
|
35
35
|
|
|
36
|
+
## 🆕 v1.0.9 更新内容
|
|
37
|
+
|
|
38
|
+
- **月报新增节假日与调休标记**:每日摸鱼指数概览中,法定节假日日期后追加绿色圆点 `•`,法定调休上班日(周末补班)追加红色叹号 `!`,一眼分辨哪天是假日、哪天在还债。内置 2025-2026 年中国法定节假日数据,周末自动识别。
|
|
36
39
|
|
|
37
40
|
## 🆕 v1.0.8 更新内容
|
|
38
41
|
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import
|
|
5
|
+
import chalk from "chalk";
|
|
6
6
|
import fs2 from "fs";
|
|
7
7
|
import path3 from "path";
|
|
8
8
|
|
|
@@ -848,88 +848,59 @@ async function getGhostCommits(projectPaths, since, until, source) {
|
|
|
848
848
|
}
|
|
849
849
|
|
|
850
850
|
// src/critic.ts
|
|
851
|
-
import chalk from "chalk";
|
|
852
851
|
var SLACK_HIGH_CRITIQUES = [
|
|
853
|
-
"\u672C\u5468\u6478\u9C7C\u6307\u6570\u62C9\u6EE1\
|
|
854
|
-
"
|
|
855
|
-
"\
|
|
856
|
-
"\
|
|
857
|
-
"\
|
|
858
|
-
"\
|
|
859
|
-
"Git\u9875\u9762\u4E00\u7247\u6E05\u51C0\uFF0C\u6CA1\u6709\
|
|
852
|
+
"\u672C\u5468\u6478\u9C7C\u6307\u6570\u62C9\u6EE1\uFF0C\u677E\u5F1B\u611F\u76F4\u63A5\u6EA2\u51FA\u5C4F\u5E55\u3002\u52B3\u9038\u7ED3\u5408\u8FD9\u5757\uFF0C\u4F60\u7B97\u662F\u73A9\u660E\u767D\u4E86\u3002",
|
|
853
|
+
"Commit \u5217\u8868\u6E05\u723D\u5F97\u50CF\u521A\u683C\u5F0F\u5316\u8FC7\u7684\u786C\u76D8\u3002",
|
|
854
|
+
"\u672C\u5468\u9879\u76EE\u8FDB\u5165\u4E86'\u517B\u7CBE\u84C4\u9510'\u7F13\u51B2\u9636\u6BB5\uFF0C\u6478\u9C7C\u6280\u5DE7\u5DF2\u81FB\u5316\u5883\u3002",
|
|
855
|
+
"\u63D0\u4EA4\u9891\u7387\u5E73\u7F13\u5982\u5FC3\u7535\u56FE\uFF0C\u7A33\u5B9A\uFF0C\u5C31\u662F\u6709\u70B9\u592A\u5E73\u4E86\u3002",
|
|
856
|
+
"\u63D0\u4EA4\u6B21\u6570\u4E24\u53EA\u624B\u6570\u5F97\u8FC7\u6765\u3002'\u4E0D\u5199\u4EE3\u7801\u5C31\u6CA1\u6709bug'\uFF01\u903B\u8F91\u81EA\u6D3D\uFF0C\u65E0\u6CD5\u53CD\u9A73\u3002",
|
|
857
|
+
"\u5C11\u91CF\u63D0\u4EA4\u641E\u5B9A\u5168\u90E8\u4EFB\u52A1\uFF0C\u9AD8\u6548\u6536\u5DE5\u540E\u5B89\u5FC3\u653E\u7A7A\u3002\u61C2\u4F11\u606F\u7684\u4EBA\uFF0C\u624D\u61C2\u957F\u4E45\u3002",
|
|
858
|
+
"Git\u9875\u9762\u4E00\u7247\u6E05\u51C0\uFF0C\u6CA1\u6709\u8FED\u4EE3\u75D5\u8FF9\uFF0C\u4E0D\u7528\u8FFD\u8D76\u8FDB\u5EA6\u7684\u4E00\u5468\uFF0C\u8212\u670D\u5F97\u8BA9\u4EBA\u5AC9\u5992\u3002"
|
|
860
859
|
];
|
|
861
860
|
var SLACK_LOW_CRITIQUES = [
|
|
862
|
-
"\
|
|
863
|
-
"\
|
|
864
|
-
"\
|
|
865
|
-
"\
|
|
866
|
-
"\
|
|
867
|
-
"\
|
|
868
|
-
"\u6574\u5468\u5168\u7A0B\u9AD8\u8D1F\u8377\u8F93\u51FA\uFF0C\u63D0\u4EA4\u8BB0\u5F55\u65AD\u5C42\u9886\u5148\u5168\u961F\uFF0C\u4E3A\u9879\u76EE\u63A8\u8FDB\u7ACB\u4E0B\u5927\u529F\u3002\u5DE5\u4F5C\u518D\u91CD\u8981\u4E5F\u8981\u517C\u987E\u4F5C\u606F\uFF0C\u9002\u5EA6\u653E\u677E\u624D\u80FD\u4FDD\u6301\u957F\u4E45\u7A33\u5B9A\u7684\u5F00\u53D1\u72B6\u6001\u3002"
|
|
861
|
+
"\u8FD9\u5468\u4EE3\u7801\u5E93\u7684\u534A\u58C1\u6C5F\u5C71\u662F\u4F60\u6253\u4E0B\u6765\u7684\u3002\u5FD9\u5B8C\u8BB0\u5F97\u7ED9\u81EA\u5DF1\u70B9\u676F\u51B0\u5976\u8336\uFF0C\u4F60\u503C\u5F97\u3002",
|
|
862
|
+
"\u6709\u6548\u5DE5\u65F6\u62C9\u6EE1\uFF0C\u4ECE\u65E9\u8FED\u4EE3\u5230\u665A\u3002\u4EE3\u7801\u80FD\u56DE\u6EDA\uFF0C\u8EAB\u4F53\u4E0D\u80FD\u2014\u2014\u62BD\u7A7A\u6B47\u6B47\u3002",
|
|
863
|
+
"\u9AD8\u5F3A\u5EA6\u642C\u7816\u4E0D\u505C\u6B47\uFF0C\u4E0D\u6B62\u5728\u8D76 deadline\uFF0C\u8FD8\u5728\u9ED8\u9ED8\u586B\u56E2\u961F\u7684\u5386\u53F2\u5751\u3002\u8F9B\u82E6\u4E86\u3002",
|
|
864
|
+
"\u63D0\u4EA4\u6570\u91CF\u591A\u5230\u5FC3\u75BC\u3002\u9879\u76EE\u662F\u6301\u4E45\u6218\uFF0C\u8EAB\u4F53\u624D\u662F\u672C\u91D1\uFF0C\u7559\u70B9\u4F59\u91CF\u3002",
|
|
865
|
+
"\u5168\u5929\u5728\u7EBF\u6301\u7EED\u8F93\u51FA\uFF0C\u5927\u5C0F\u9700\u6C42\u4E00\u624B\u5305\u63FD\uFF0C\u56E2\u961F\u8FDB\u5EA6\u6709\u4F60\u515C\u5E95\u3002\u8BB0\u5F97\u591A\u559D\u6C34\uFF0C\u591A\u8D70\u52A8\u3002",
|
|
866
|
+
"\u6574\u5468\u9AD8\u8D1F\u8377\u8F93\u51FA\uFF01\u5DE5\u4F5C\u518D\u91CD\u8981\uFF0C\u4E5F\u522B\u628A\u8EAB\u4F53\u5F53\u4E00\u6B21\u6027\u8017\u6750\u3002"
|
|
869
867
|
];
|
|
870
868
|
var GHOST_CRITIQUES = [
|
|
871
|
-
"\u3010\u5E7D\u7075\u63D0\u4EA4\u9884\u8B66\u3011\u51CC\u6668\
|
|
872
|
-
"\u534A\u591C\
|
|
873
|
-
"\u96F6\u70B9\u8FC7\u540E\u5927\u91CF\u63D0\u4EA4\
|
|
874
|
-
"\
|
|
875
|
-
"\
|
|
876
|
-
"\
|
|
877
|
-
"\u522B\u4EBA\
|
|
878
|
-
];
|
|
879
|
-
var CATEGORY_FIX_CRITIQUES = [
|
|
880
|
-
"\u4F60\u5DF2\u7136\u6210\u4E3A\u56E2\u961F\u4E13\u5C5E\u2018\u804C\u4E1A\u6551\u706B\u961F\u957F\u2019\uFF0C\u6574\u65E5\u6CE1\u5728\u4EE3\u7801\u5E93\u91CC\u8003\u53E4\u6EAF\u6E90\u3001\u7EBF\u4E0A\u7D27\u6025\u6551\u706B\uFF0C\u7CFB\u7EDF\u5E73\u7A33\u8FD0\u884C\u7684\u7A33\u5B9A\u9632\u7EBF\uFF0C\u5168\u7A0B\u5168\u9760\u4F60\u6B7B\u6B7B\u5B88\u4F4F\u3002",
|
|
881
|
-
"\u672C\u6708\u6838\u5FC3\u5DE5\u4F5C\u96C6\u4E2D\u4FEE\u590DBug\uFF0C\u4FEE\u590D\u7C7B\u63D0\u4EA4\u5360\u6BD4\u9AD8\u8FBE %PERCENT%%\u3002\u4E00\u70B9\u70B9\u6E05\u7406\u9648\u5E74\u6280\u672F\u503A\uFF0C\u626B\u6E05\u7CFB\u7EDF\u9690\u85CF\u9690\u60A3\uFF0C\u540C\u65F6\u4E3A\u540E\u7EED\u5F00\u53D1\u540C\u4E8B\u94FA\u5E73\u987A\u7545\u9053\u8DEF\u3002",
|
|
882
|
-
"\u6BCF\u65E5\u5FAA\u73AF\u5F00\u542Ffix\u4FEE\u590D\u6A21\u5F0F\uFF0C\u672C\u6708\u7CFB\u7EDF\u7A33\u5B9A\u5EA6\u5168\u9760\u4F60\u5728\u7EBF\u503C\u5B88\u515C\u5E95\uFF0C\u9ED8\u9ED8\u5904\u7406\u5404\u7C7B\u7A81\u53D1\u5F02\u5E38\uFF0C\u662F\u85CF\u5728\u4EE3\u7801\u80CC\u540E\u65E0\u4EBA\u7559\u610F\u7684\u5E55\u540E\u82F1\u96C4\u3002",
|
|
883
|
-
"\u5F53\u4E4B\u65E0\u6127\u4EE3\u7801\u5E93\u6E05\u9053\u592B\u3001\u7EC8\u6781Bug\u7EC8\u7ED3\u8005\u3002\u6BCF\u4FEE\u590D\u4E00\u5904\u5F02\u5E38\u6F0F\u6D1E\uFF0C\u7CFB\u7EDF\u8FD0\u884C\u9690\u60A3\u5C31\u5C11\u4E00\u5206\uFF0C\u6574\u4E2A\u9879\u76EE\u7684\u8FD0\u884C\u5B89\u5168\u611F\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
884
|
-
"\u5927\u534A\u7CBE\u529B\u90FD\u6295\u5165\u6545\u969C\u4FEE\u590D\u4E0E\u95EE\u9898\u515C\u5E95\uFF0C\u4E3B\u52A8\u627F\u63A5\u5404\u7C7B\u68D8\u624B\u7EBF\u4E0A\u95EE\u9898\uFF0C\u5E2E\u56E2\u961F\u89C4\u907F\u5927\u91CF\u7EBF\u4E0A\u98CE\u9669\uFF0C\u7E41\u7410\u67AF\u71E5\u7684\u4FEE\u590D\u5DE5\u4F5C\u5168\u9760\u4F60\u625B\u4E0B\u3002",
|
|
885
|
-
"\u4E13\u6CE8\u515C\u5E95\u7EF4\u7A33\u4E00\u6574\u6708\uFF0C\u6BD4\u8D77\u65B0\u589E\u529F\u80FD\u66F4\u5728\u610F\u7CFB\u7EDF\u7A33\u5B9A\uFF0C\u65E0\u6570\u7EC6\u788E\u5C0Fbug\u88AB\u9010\u4E00\u6E05\u96F6\uFF0C\u6709\u4F60\u5728\uFF0C\u5927\u5BB6\u8FED\u4EE3\u65B0\u9700\u6C42\u65F6\u90FD\u683C\u5916\u5B89\u5FC3\u3002",
|
|
886
|
-
"\u957F\u671F\u6DF1\u8015\u95EE\u9898\u4FEE\u590D\u8D5B\u9053\uFF0C\u8010\u5FC3\u8FFD\u6EAF\u6BCF\u4E00\u5904\u62A5\u9519\u6839\u6E90\uFF0C\u4E0D\u6577\u884D\u4E0D\u7CCA\u5F04\uFF0C\u7528\u4E00\u6B21\u6B21fix\u7B51\u7262\u9879\u76EE\u5E95\u5C42\u7A33\u5B9A\u6027\uFF0C\u4F4E\u8C03\u5374\u4E0D\u53EF\u6216\u7F3A\u3002"
|
|
887
|
-
];
|
|
888
|
-
var CATEGORY_FEAT_CRITIQUES = [
|
|
889
|
-
"\u672C\u6708\u65B0\u589E\u529F\u80FDFeat\u63D0\u4EA4\u5360\u6BD4\u9AD8\u8FBE %PERCENT%%\uFF0C\u5168\u65B0\u9700\u6C42\u4E00\u9879\u63A5\u4E00\u9879\u843D\u5730\uFF0C\u5F00\u53D1\u706B\u529B\u5168\u7A0B\u62C9\u6EE1\uFF0C\u6574\u6761\u4E1A\u52A1\u7EBF\u90FD\u56E0\u4E3A\u4F60\u7684\u8F93\u51FA\u98DE\u901F\u5411\u524D\u63A8\u8FDB\uFF01",
|
|
890
|
-
"\u6807\u51C6\u65B0\u529F\u80FD\u72C2\u9B54\u672C\u4EBA\uFF01\u4E0D\u505C\u627F\u63A5\u843D\u5730\u5404\u7C7B\u5168\u65B0\u9700\u6C42\u4E0E\u4E1A\u52A1\u6A21\u5757\uFF0C\u4EE3\u7801\u8F93\u51FA\u91CF\u76F4\u63A5\u62C9\u6EE1\uFF0C\u95F2\u6687\u4E4B\u4F59\u4E5F\u53EF\u4EE5\u56DE\u5934\u7B80\u5355\u6253\u78E8\u7EC6\u8282\u4F18\u5316\u4F53\u9A8C\u3002\u8F9B\u82E6\u4F60\u6301\u7EED\u9AD8\u5F3A\u5EA6\u5F00\u53D1\uFF01",
|
|
891
|
-
"\u75AF\u72C2\u6301\u7EED\u8F93\u51FAfeature\u65B0\u529F\u80FD\uFF0C\u9879\u76EE\u4EE3\u7801\u5E93\u7684\u4E1A\u52A1\u8FB9\u754C\u88AB\u4F60\u4E00\u6B21\u6B21\u5411\u5916\u62D3\u5BBD\uFF0C\u6562\u4E8E\u5F00\u62D3\u65B0\u4E1A\u52A1\u573A\u666F\uFF0C\u59A5\u59A5\u56E2\u961F\u91CC\u7684\u529F\u80FD\u5F00\u62D3\u5148\u950B\u3002",
|
|
892
|
-
"\u6574\u6708\u4E3B\u653B\u65B0\u6A21\u5757\u3001\u65B0\u6D41\u7A0B\u5F00\u53D1\uFF0C\u6E90\u6E90\u4E0D\u65AD\u4EA4\u4ED8\u53EF\u7528\u65B0\u80FD\u529B\uFF0C\u4E1A\u52A1\u62D3\u5C55\u5168\u9760\u4F60\u652F\u6491\uFF0C\u5F00\u62D3\u521B\u65B0\u80FD\u529B\u62C9\u6EE1\uFF0C\u5FD9\u5B8C\u53EF\u4EE5\u9002\u5F53\u653E\u7F13\u8282\u594F\u4F11\u6574\u4E00\u4E0B\u3002",
|
|
893
|
-
"\u51E0\u4E4E\u5927\u534A\u63D0\u4EA4\u90FD\u7528\u4E8E\u642D\u5EFA\u5168\u65B0\u4E1A\u52A1\u529F\u80FD\uFF0C\u4E3B\u52A8\u5543\u4E0B\u590D\u6742\u65B0\u9700\u6C42\uFF0C\u4E0D\u65AD\u4E30\u5BCC\u4EA7\u54C1\u80FD\u529B\uFF0C\u56E2\u961F\u4E1A\u52A1\u7248\u56FE\u7684\u6269\u5F20\u79BB\u4E0D\u5F00\u4F60\u7684\u5168\u529B\u8F93\u51FA\u3002",
|
|
894
|
-
"\u4EE5\u642D\u5EFA\u65B0\u529F\u80FD\u4E3A\u6838\u5FC3\u5F00\u53D1\u4E3B\u7EBF\uFF0C\u4ECE0\u52301\u642D\u5EFA\u5404\u7C7B\u4E1A\u52A1\u6A21\u5757\uFF0C\u843D\u5730\u6548\u7387\u51FA\u4F17\uFF0C\u6E90\u6E90\u4E0D\u65AD\u4E3A\u4EA7\u54C1\u6CE8\u5165\u65B0\u80FD\u529B\uFF0C\u5F00\u62D3\u578B\u5F00\u53D1\u9009\u624B\u8BA4\u8BC1\u3002",
|
|
895
|
-
"\u4E13\u6CE8\u521B\u65B0\u4E1A\u52A1\u8FED\u4EE3\uFF0C\u5404\u7C7B\u65B0\u9700\u6C42\u5FEB\u901F\u843D\u5730\u4E0A\u7EBF\uFF0C\u6301\u7EED\u7ED9\u4EA7\u54C1\u53E0\u52A0\u65B0\u7279\u6027\uFF0C\u63A8\u8FDB\u4E1A\u52A1\u589E\u957F\u529F\u4E0D\u53EF\u6CA1\uFF0C\u957F\u671F\u9AD8\u5F3A\u5EA6\u5F00\u53D1\u8BB0\u5F97\u52B3\u9038\u7ED3\u5408\u3002"
|
|
896
|
-
];
|
|
897
|
-
var CATEGORY_CHORE_CRITIQUES = [
|
|
898
|
-
"\u65E5\u5E38\u7EF4\u62A4Chore\u3001\u6587\u6863Docs\u7C7B\u63D0\u4EA4\u5360\u6BD4 %PERCENT%%\u3002\u5B8C\u6574\u6210\u719F\u7684\u9879\u76EE\u4E0D\u6B62\u4F9D\u9760\u4E1A\u52A1\u4EE3\u7801\uFF0C\u66F4\u9700\u8981\u6709\u4EBA\u6C89\u6DC0\u6E05\u6670\u6587\u6863\u89C4\u8303\uFF0C\u524D\u4EBA\u7EC6\u81F4\u8015\u8018\uFF0C\u540E\u4EBA\u5F00\u53D1\u624D\u80FD\u5C11\u8D70\u5F2F\u8DEF\u3002",
|
|
899
|
-
"\u6BCF\u65E5\u57CB\u5934\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6\u3001\u5B8C\u5584\u6CE8\u91CA\u6587\u6863\u3001\u7EDF\u4E00\u4EE3\u7801\u683C\u5F0F\u5316\uFF0C\u4F60\u582A\u79F0\u4EE3\u7801\u5E93\u4E13\u5C5E\u56ED\u4E01\u3002\u8FD9\u7C7B\u5DE5\u4F5C\u770B\u4F3C\u4E0D\u8D77\u773C\uFF0C\u5374\u80FD\u6301\u7EED\u7EF4\u62A4\u9879\u76EE\u5065\u5EB7\u5EA6\u4E0E\u4EE3\u7801\u53EF\u8BFB\u6027\u3002",
|
|
900
|
-
"Chore\u4E0E\u6587\u6863\u7C7B\u63D0\u4EA4\u5360\u6BD4\u5341\u5206\u7A81\u51FA\uFF0C\u9879\u76EE\u80FD\u591F\u957F\u671F\u7A33\u5B9A\u8FED\u4EE3\u8FD0\u884C\uFF0C\u79BB\u4E0D\u5F00\u8FD9\u4E9B\u4F4E\u8C03\u7410\u788E\u3001\u5374\u8D77\u5230\u5173\u952E\u652F\u6491\u4F5C\u7528\u7684\u65E5\u5E38\u7EF4\u62A4\u5DE5\u4F5C\u3002",
|
|
901
|
-
"\u4E3B\u52A8\u5305\u63FD\u9879\u76EE\u6742\u9879\u7EF4\u62A4\u5DE5\u4F5C\uFF1A\u66F4\u65B0\u90E8\u7F72\u914D\u7F6E\u3001\u8865\u5168\u63A5\u53E3\u6587\u6863\u3001\u7EDF\u4E00\u4EE3\u7801\u683C\u5F0F\uFF0C\u9ED8\u9ED8\u4F18\u5316\u56E2\u961F\u534F\u4F5C\u73AF\u5883\uFF0C\u51CF\u5C11\u6240\u6709\u4EBA\u540E\u7EED\u5F00\u53D1\u6C9F\u901A\u6210\u672C\u3002",
|
|
902
|
-
"\u4E0D\u8FFD\u9010\u4EAE\u773C\u65B0\u529F\u80FD\u5F00\u53D1\uFF0C\u6DF1\u8015\u9879\u76EE\u57FA\u7840\u7EF4\u62A4\u5DE5\u4F5C\uFF0C\u89C4\u6574\u76EE\u5F55\u3001\u8865\u5145\u8BF4\u660E\u3001\u7EDF\u4E00\u89C4\u8303\uFF0C\u4E00\u70B9\u70B9\u964D\u4F4E\u9879\u76EE\u7EF4\u62A4\u6210\u672C\uFF0C\u662F\u56E2\u961F\u9690\u6027\u57FA\u77F3\u3002",
|
|
903
|
-
"\u628A\u4F18\u5316\u5DE5\u7A0B\u73AF\u5883\u3001\u5B8C\u5584\u9879\u76EE\u6587\u6863\u5F53\u6210\u65E5\u5E38\uFF0C\u6301\u7EED\u89C4\u6574\u4EE3\u7801\u5E93\u98CE\u8C8C\uFF0C\u7410\u788E\u91CD\u590D\u7684\u7EF4\u62A4\u5DE5\u4F5C\u8010\u5FC3\u5B8C\u6210\uFF0C\u5927\u5E45\u63D0\u5347\u6574\u4E2A\u56E2\u961F\u7684\u534F\u4F5C\u6548\u7387\u3002",
|
|
904
|
-
"\u4E13\u6CE8\u9879\u76EE\u57FA\u5EFA\u7EF4\u62A4\u8D5B\u9053\uFF0C\u5404\u7C7B\u914D\u7F6E\u3001\u6587\u6863\u3001\u683C\u5F0F\u5316\u8C03\u6574\u4E00\u624B\u5305\u529E\uFF0C\u9ED8\u9ED8\u4F18\u5316\u5F00\u53D1\u73AF\u5883\uFF0C\u770B\u4F3C\u5E73\u6DE1\u7684\u63D0\u4EA4\uFF0C\u5B9E\u5219\u957F\u671F\u9020\u798F\u5168\u4F53\u5F00\u53D1\u4EBA\u5458\u3002"
|
|
869
|
+
"\u3010\u5E7D\u7075\u63D0\u4EA4\u9884\u8B66\u3011\u51CC\u6668\u7684 Commit \u6CDB\u7740\u6E05\u51B7\u7684\u5149\u3002\u9002\u5EA6\u71AC\u591C\u53EF\u4EE5\uFF0C\u4F46\u7761\u89C9\u4E5F\u662F\u6838\u5FC3\u6280\u80FD\u3002",
|
|
870
|
+
"\u534A\u591C\u8FD8\u5728 push\uFF0C\u662F\u8DDF\u540C\u4E8B\u5BF9\u7EBF\uFF0C\u8FD8\u662F\u5355\u7EAF\u4EAB\u53D7\u51CC\u6668\u65E0\u4EBA\u6253\u6270\u7684\u7075\u611F\u7206\u53D1\uFF1F",
|
|
871
|
+
"\u96F6\u70B9\u8FC7\u540E\u5927\u91CF\u63D0\u4EA4\u88AB\u6355\u83B7\uFF01\u71AC\u591C\u7A33\u4F4F\u8FDB\u5EA6\u7684\u6837\u5B50\u5F88\u62FC\uFF0C\u4F46\u8EAB\u4F53\u4E5F\u9700\u8981\u5145\u7535\u3002",
|
|
872
|
+
"\u8FD8\u5728\u901A\u5BB5\u786C\u809D\uFF1FCI \u673A\u5668\u4EBA\u90FD\u60F3\u4E0B\u73ED\u4E86\uFF0C\u5199\u5B8C\u8D76\u7D27\u5B58\u76D8\u4F11\u606F\u3002",
|
|
873
|
+
"\u51CC\u6668\u4E13\u5C5E\u5F00\u53D1\u8005\uFF0C\u767D\u5929\u88AB\u7410\u4E8B\u7F20\u8EAB\uFF0C\u53EA\u80FD\u6DF1\u591C\u5543\u786C\u9AA8\u5934\u3002\u957F\u671F\u71AC\u591C\u4F24\u7684\u662F\u4F60\u81EA\u5DF1\u3002",
|
|
874
|
+
"\u6DF1\u591C\u72EC\u5B88\u5DE5\u4F4D\uFF0C\u6BCF\u6761\u51CC\u6668\u63D0\u4EA4\u90FD\u662F\u5361\u70B9\u7684\u4EE3\u4EF7\u3002\u4E13\u6CE8\u503C\u5F97\u80AF\u5B9A\uFF0C\u4F46\u522B\u5929\u5929\u4FEE\u4ED9\u3002",
|
|
875
|
+
"\u522B\u4EBA\u5DF2\u5165\u68A6\u4E61\uFF0C\u4F60\u7684 Git \u8FD8\u5728\u66F4\u65B0\u3002\u6DF1\u591C\u9002\u5408\u653B\u575A\uFF0C\u8BB0\u5F97\u8BBE\u4E2A\u95F9\u949F\uFF0C\u5230\u70B9\u4E0B\u7EBF\u3002"
|
|
905
876
|
];
|
|
906
877
|
var GENERAL_CRITIQUES = [
|
|
907
|
-
"\
|
|
908
|
-
"\
|
|
909
|
-
"
|
|
910
|
-
"\
|
|
911
|
-
"\
|
|
912
|
-
"\
|
|
913
|
-
"Git\u5386\u53F2\u8282\u594F\
|
|
878
|
+
"\u6574\u5468\u63D0\u4EA4\u66F2\u7EBF\u5E73\u7F13\u89C4\u5F8B\uFF0C\u6CE2\u52A8\u96C6\u4E2D\u5728\u6668\u4F1A\u524D\u3001\u4E0B\u73ED\u524D\u3002\u62FF\u634F\u4E86\u81EA\u5DF1\u7684\u8282\u594F\uFF0C\u677E\u5F1B\u53C8\u9AD8\u6548\u3002",
|
|
879
|
+
"\u63D0\u4EA4\u65F6\u95F4\u7279\u5F81\u9C9C\u660E\uFF1A\u4E0A\u5348\u9759\u5982\u5904\u5B50\u6C89\u6DC0\u601D\u8DEF\uFF0C\u4E0B\u5348\u52A8\u5982\u8131\u5154\u96C6\u4E2D\u8F93\u51FA\u3002\u7CBE\u51C6\u9501\u5B9A\u9AD8\u6548\u65F6\u6BB5\u3002",
|
|
880
|
+
"Git Log \u50CF\u9876\u7EA7\u8C03\u5EA6\u5927\u5E08\u7684\u4F5C\u54C1\uFF0C\u4E0D\u75BE\u4E0D\u5F90\u3001\u5F20\u5F1B\u6709\u5EA6\u3002\u5076\u5C14\u843D\u5B50\uFF0C\u5374\u6070\u5230\u597D\u5904\u5B8C\u6210\u5168\u90E8\u3002",
|
|
881
|
+
"\u63D0\u4EA4\u6570\u636E\u5747\u8861\u7A33\u5B9A\uFF0C\u6BCF\u65E5\u5747\u5300\u8F93\u51FA\uFF0C\u4E0D\u7206\u809D\u4E0D\u7A7A\u767D\u3002\u7A33\u624E\u7A33\u6253\uFF0C\u662F\u56E2\u961F\u6700\u5B89\u5FC3\u7684\u5B9A\u6D77\u795E\u9488\u3002",
|
|
882
|
+
"\u8282\u594F\u5F20\u5F1B\u6709\u5EA6\uFF0C\u4E0D\u731B\u51B2\u4E0D\u62D6\u5EF6\u3002\u6BCF\u65E5\u7A33\u5B9A\u4EA7\u51FA\u5C11\u91CF\u6709\u6548\u63D0\u4EA4\uFF0C\u7EC6\u6C34\u957F\u6D41\u5B8C\u6210\u89C4\u5212\u3002",
|
|
883
|
+
"\u5F00\u53D1\u65F6\u95F4\u89C4\u5F8B\uFF0C\u61C2\u5F97\u62C6\u5206\u5DE5\u4F5C\u91CF\u5747\u5300\u5206\u644A\u3002\u62D2\u7EDD\u7A81\u51FB\uFF0C\u5E73\u7F13\u8F93\u51FA\uFF0C\u6709\u6548\u964D\u4F4E\u81EA\u8EAB\u538B\u529B\u3002",
|
|
884
|
+
"Git \u5386\u53F2\u8282\u594F\u8212\u670D\uFF0C\u65E0\u6781\u7AEF\u6CE2\u52A8\u3002\u957F\u671F\u5747\u8861\u5F00\u53D1\uFF0C\u4FDD\u8BC1\u63A8\u8FDB\uFF0C\u4E5F\u4E0D\u9677\u5165\u6301\u7EED\u5185\u8017\u3002"
|
|
914
885
|
];
|
|
915
886
|
var TAG_FISH_MASTER_CRITIQUES = [
|
|
916
|
-
"\u6478\u9C7C\u5B97\u5E08\u79F0\u53F7\u5DF2\u89E3\u9501\uFF01\u628A\u52B3\u9038\u7ED3\u5408\u53D1\u6325\u5230\u4E86\u6781\u81F4\uFF0C\
|
|
917
|
-
"\u6478\u9C7C\u5B97\u5E08\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u80FD\u628A\u6BCF\u65E5\u751F\u4EA7\u529B\u7CBE\u786E\u63A7\u5236\u5728\u521A\u521A\u597D\u7684\
|
|
918
|
-
"\u606D\u559C\u83B7\u5F97\u300E\u6478\u9C7C\u5B97\u5E08\u300F\u6210\u5C31\uFF01Git \u7684\
|
|
887
|
+
"\u6478\u9C7C\u5B97\u5E08\u79F0\u53F7\u5DF2\u89E3\u9501\uFF01\u628A\u52B3\u9038\u7ED3\u5408\u53D1\u6325\u5230\u4E86\u6781\u81F4\uFF0C\u9AD8\u6548\u5B8C\u6210\u672C\u804C\u5DE5\u4F5C\u4E4B\u4F59\uFF0C\u5468\u672B\u51FA\u884C\u3001\u4E0B\u5348\u8336\u6E05\u5355\u65E9\u5DF2\u89C4\u5212\u5B8C\u6BD5\uFF0C\u677E\u5F1B\u611F\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
888
|
+
"\u6478\u9C7C\u5B97\u5E08\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u80FD\u628A\u6BCF\u65E5\u751F\u4EA7\u529B\u7CBE\u786E\u63A7\u5236\u5728\u521A\u521A\u597D\u7684\u5E73\u8861\u70B9\uFF0C\u4E0D\u591A\u4E0D\u5C11\u521A\u597D\u8FBE\u6807\uFF0C\u8FD9\u4EFD\u6536\u653E\u81EA\u5982\u7684\u804C\u573A\u5E73\u8861\u672F\uFF0C\u662F\u8BA9\u4EBA\u7FA1\u6155\u7684\u9876\u7EA7\u804C\u573A\u8D85\u80FD\u529B\u3002",
|
|
889
|
+
"\u606D\u559C\u83B7\u5F97\u300E\u6478\u9C7C\u5B97\u5E08\u300F\u6210\u5C31\uFF01Git \u7684\u7559\u767D\u662F\u4F60\u7684\u4E13\u5C5E\u901A\u884C\u8BC1\uFF0C\u5DE5\u4F5C\u8282\u594F\u62FF\u634F\u5F97\u6070\u5230\u597D\u5904\uFF0C\u8BE5\u4EA7\u51FA\u65F6\u4E0D\u6389\u94FE\u5B50\uFF0C\u8BE5\u653E\u677E\u65F6\u7EDD\u4E0D\u5185\u8017\uFF0C\u5B8C\u7F8E\u8282\u594F\u638C\u63A7\u8005\u975E\u4F60\u83AB\u5C5E\u3002",
|
|
919
890
|
"\u9876\u7EA7\u6478\u9C7C\u5B97\u5E08\u767B\u573A\uFF01\u4E0A\u73ED\u72B6\u6001\u677E\u5F1B\u6709\u5EA6\uFF0C\u4EFB\u52A1\u6309\u65F6\u843D\u5730\u7EDD\u4E0D\u62D6\u6C93\uFF0C\u5176\u4F59\u65F6\u95F4\u5B89\u5FC3\u653E\u7A7A\u5145\u7535\uFF0C\u61C2\u5F97\u9002\u65F6\u653E\u677E\u624D\u80FD\u957F\u4E45\u4FDD\u6301\u9AD8\u6548\uFF0C\u667A\u6167\u6253\u5DE5\u4EBA\u6A21\u677F\u6709\u4E86\u3002",
|
|
920
|
-
"\u522B\u4EBA\
|
|
891
|
+
"\u522B\u4EBA\u5306\u5FD9\u57CB\u5934\u731B\u6572\uFF0C\u4F60\u4ECE\u5BB9\u7A33\u6B65\u5B8C\u6210\u672C\u804C\uFF0C\u6478\u9C7C\u5B97\u5E08\u7684\u7CBE\u9AD3\u4E0D\u662F\u6446\u70C2\uFF0C\u800C\u662F\u9AD8\u6548\u5B8C\u5DE5\u540E\u5B89\u5FC3\u4EAB\u53D7\u95F2\u6687\uFF0C\u5E73\u8861\u5DE5\u4F5C\u4E0E\u751F\u6D3B\u8FD9\u5757\u88AB\u4F60\u73A9\u660E\u767D\u4E86\u3002"
|
|
921
892
|
];
|
|
922
893
|
var TAG_VOLUME_KING_CRITIQUES = [
|
|
923
|
-
"\u7206\u809D\u6218\u795E\uFF0C\u6050\u6016\u5982\u65AF\uFF01\u4F60\u7684 Git \u65F6\u95F4\u7EBF\u5BC6\u5BC6\u9EBB\u9EBB\
|
|
894
|
+
"\u7206\u809D\u6218\u795E\uFF0C\u6050\u6016\u5982\u65AF\uFF01\u4F60\u7684 Git \u65F6\u95F4\u7EBF\u5BC6\u5BC6\u9EBB\u9EBB\uFF0C\u63D0\u4EA4\u5BC6\u5EA6\u60CA\u4EBA\uFF0C\u5168\u5929\u4E0D\u95F4\u65AD\u6301\u7EED\u8F93\u51FA\uFF0C\u5EFA\u8BAE\u7ED9\u952E\u76D8\u653E\u4E2A\u5047\uFF0C\u957F\u671F\u9AD8\u5F3A\u5EA6\u8F93\u51FA\u771F\u7684\u8F9B\u82E6\u4E86\uFF01",
|
|
924
895
|
"\u7206\u809D\u6218\u795E\u5C31\u4F4D\uFF01\u5355\u4EBA\u4EA7\u51FA\u76F4\u63A5\u9876\u8D77\u534A\u652F\u5C0F\u961F\u7684\u5DE5\u4F5C\u91CF\uFF0C\u5BC6\u5BC6\u9EBB\u9EBB\u7684\u63D0\u4EA4\u8BB0\u5F55\u8089\u773C\u53EF\u89C1\uFF0C\u98DE\u901F\u6572\u51FB\u7684\u952E\u76D8\u90FD\u5FEB\u6572\u51FA\u6B8B\u5F71\uFF0C\u656C\u4E1A\u7A0B\u5EA6\u76F4\u63A5\u62C9\u6EE1\u3002",
|
|
925
|
-
"\u522B\u4EBA\u4E0B\u73ED\u4F11\u606F\u8FFD\u5267\uFF0C\u4F60\u5728\u6301\u7EED commit\uFF1B\u522B\u4EBA\u6DF1\u591C\u5B89\u7A33\u7761\u89C9\uFF0C\u4F60\u8FD8\u5728\u8FDC\u7A0B push \u8FED\u4EE3\u3002\
|
|
896
|
+
"\u522B\u4EBA\u4E0B\u73ED\u4F11\u606F\u8FFD\u5267\uFF0C\u4F60\u5728\u6301\u7EED commit\uFF1B\u522B\u4EBA\u6DF1\u591C\u5B89\u7A33\u7761\u89C9\uFF0C\u4F60\u8FD8\u5728\u8FDC\u7A0B push \u8FED\u4EE3\u3002\u7206\u809D\u6218\u795E\u5F53\u4E4B\u65E0\u6127\uFF01\u4F46\u7A0B\u5E8F\u7A33\u5B9A\u8FD0\u884C\u7684\u540C\u65F6\uFF0C\u4F60\u4E5F\u8981\u597D\u597D\u5403\u996D\u4F11\u606F\u3002",
|
|
926
897
|
"\u5168\u65F6\u6BB5\u5728\u7EBF\u7206\u809D\u9009\u624B\u4E0A\u7EBF\uFF0C\u4ECE\u65E9\u5230\u665A\u6301\u7EED\u66F4\u65B0\u8FED\u4EE3\uFF0C\u6BCF\u4E00\u6761\u63D0\u4EA4\u8BB0\u5F55\u90FD\u662F\u9ED8\u9ED8\u4ED8\u51FA\u7684\u8BC1\u660E\uFF0C\u56E2\u961F\u79BB\u4E0D\u5F00\u4F60\u7684\u5F3A\u529B\u8F93\u51FA\uFF0C\u8BB0\u5F97\u62BD\u7A7A\u7AD9\u8D77\u6765\u6D3B\u52A8\u8EAB\u4F53\u3001\u591A\u559D\u6E29\u6C34\u3002",
|
|
927
898
|
"\u63D0\u4EA4\u91CF\u65AD\u5C42\u9886\u5148\u5168\u573A\u7684\u7206\u809D\u5927\u4F6C\uFF0C\u5927\u5C0F\u9700\u6C42\u7EDF\u7EDF\u5305\u63FD\u843D\u5730\uFF0C\u4E3A\u9879\u76EE\u63A8\u8FDB\u7ACB\u4E0B\u6C57\u9A6C\u529F\u52B3\uFF0C\u9AD8\u5F3A\u5EA6\u8F93\u51FA\u56FA\u7136\u503C\u5F97\u79F0\u8D5E\uFF0C\u5343\u4E07\u4E0D\u8981\u957F\u671F\u900F\u652F\u81EA\u5DF1\u7684\u8EAB\u4F53\u54E6\u3002"
|
|
928
899
|
];
|
|
929
900
|
var TAG_NIGHT_OWL_CRITIQUES = [
|
|
930
|
-
"\u6DF1\u591C\u4FEE\u4ED9\u8005\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u51CC\u6668\u5B89\u9759\u65F6\u6BB5\u6572\u51FA\u7684\u4EE3\u7801\u81EA\u5E26\
|
|
931
|
-
"\
|
|
932
|
-
"\u4FEE\u4ED9\u5927\u80FD\
|
|
901
|
+
"\u6DF1\u591C\u4FEE\u4ED9\u8005\uFF0C\u6CD5\u529B\u65E0\u8FB9\uFF01\u51CC\u6668\u5B89\u9759\u65F6\u6BB5\u6572\u51FA\u7684\u4EE3\u7801\u81EA\u5E26\u4E13\u6CE8\u52A0\u6210\uFF0C\u65E0\u4EBA\u6253\u6270\u7684\u6DF1\u591C\u7075\u611F\u7206\u53D1\uFF0C\u8FDE\u601D\u8DEF\u8FD0\u8F6C\u7684\u901F\u5EA6\u90FD\u4EFF\u4F5B\u53D8\u5FEB\u4E86\u4E0D\u5C11\u3002",
|
|
902
|
+
"\u6DF1\u591C\u4FEE\u4ED9\u8005\u7684\u4E13\u5C5E\u9EC4\u91D1\u5DE5\u4F5C\u65F6\u6BB5\u9501\u5B9A 00:00 ~ 05:00\u3002\u767D\u5929\u5DE5\u4F4D\u6C89\u6DC0\u68B3\u7406\u9700\u6C42\u79EF\u6512\u7075\u611F\uFF0C\u6DF1\u591C\u72EC\u5904\u65F6\u96C6\u4E2D\u8F93\u51FA\u843D\u5730\uFF0C\u663C\u591C\u53CC\u65F6\u6BB5\u6A21\u5F0F\u65E0\u7F1D\u81EA\u7531\u5207\u6362\u3002",
|
|
903
|
+
"\u4FEE\u4ED9\u5927\u80FD\u8BA4\u8BC1\uFF01\u4E00\u6761\u6761\u51CC\u6668Git\u8BB0\u5F55\u9ED8\u9ED8\u89C1\u8BC1\u4F60\u7684\u575A\u6301\u4E0E\u4E13\u6CE8\uFF0C\u6DF1\u591C\u5B89\u9759\u73AF\u5883\u66F4\u5BB9\u6613\u7406\u6E05\u590D\u6742\u903B\u8F91\u3002\u4E0D\u8FC7\u9002\u5EA6\u4FEE\u4ED9\u5373\u53EF\uFF0C\u8BB0\u5F97\u9884\u7559\u5145\u8DB3\u7761\u7720\u65F6\u95F4\u6062\u590D\u7CBE\u529B\u3002",
|
|
933
904
|
"\u504F\u7231\u6DF1\u591C\u72EC\u5904\u7F16\u7801\u7684\u4FEE\u4ED9\u9009\u624B\uFF0C\u4E07\u7C41\u4FF1\u5BC2\u7684\u65F6\u5019\u601D\u8DEF\u683C\u5916\u6E05\u6670\uFF0C\u5F88\u591A\u68D8\u624B\u96BE\u9898\u90FD\u5728\u51CC\u6668\u88AB\u4F60\u9010\u4E2A\u653B\u514B\uFF0C\u9AD8\u6548\u591C\u95F4\u9009\u624B\u8BA4\u8BC1\uFF0C\u522B\u957F\u671F\u71AC\u5230\u5929\u5149\u624D\u4F11\u606F\u3002",
|
|
934
905
|
"\u767D\u65E5\u5904\u7406\u6C9F\u901A\u7410\u4E8B\uFF0C\u6DF1\u591C\u6C89\u6D78\u5F0F\u4E13\u6CE8\u7F16\u7801\uFF0C\u6DF1\u591C\u4FEE\u4ED9\u6A21\u5F0F\u9002\u914D\u5EA6\u6EE1\u5206\uFF0C\u9760\u7740\u6DF1\u591C\u5B89\u9759\u73AF\u5883\u653B\u514B\u5927\u91CF\u96BE\u70B9\uFF0C\u8BB0\u5F97\u5B9A\u65F6\u653E\u4E0B\u7535\u8111\uFF0C\u4FDD\u8BC1\u5145\u8DB3\u7761\u7720\u517B\u62A4\u8EAB\u4F53\u3002"
|
|
935
906
|
];
|
|
@@ -941,86 +912,57 @@ var TAG_BUILDER_CRITIQUES = [
|
|
|
941
912
|
"\u65E5\u590D\u4E00\u65E5\u7A33\u5B9A\u8F93\u51FA\u7684\u57FA\u5EFA\u9009\u624B\uFF0C\u5927\u5C0F\u7410\u788E\u4E1A\u52A1\u9700\u6C42\u5168\u90E8\u59A5\u5584\u627F\u63A5\uFF0C\u505A\u4E8B\u7EC6\u81F4\u9760\u8C31\u4E0D\u51FA\u7EB0\u6F0F\uFF0C\u56E2\u961F\u57FA\u77F3\u822C\u7684\u5B58\u5728\uFF0C\u4F60\u7684\u8E0F\u5B9E\u4ED8\u51FA\u6240\u6709\u4EBA\u90FD\u770B\u5728\u773C\u91CC\u3002"
|
|
942
913
|
];
|
|
943
914
|
var TAG_BURST_CODER_CRITIQUES = [
|
|
944
|
-
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458\u767B\u573A\uFF01\u5355\u6B21\u8D85\u5927\u7BC7\u5E45Git Diff\u76F4\u63A5\u62C9\u6EE1\uFF0C\u8D1F\u8D23review\u7684\u540C\u4E8B\
|
|
945
|
-
"\u4E00\u628A\u68AD\u54C8\u786C\u6838\u73A9\u5BB6\uFF01\u6574\u5957\u9700\u6C42\u903B\u8F91\u5168\u90E8\u6574\u5408\u8FDB\u5355\u6B21commit\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5B8C\u6574\u65B9\u6848\u65E9\u5728\u8111\u6D77\u4E2D\u6784\u601D\u6210\u578B\uFF0C\u76F4\u63A5\u4E00\u6CE2\u4E1D\
|
|
915
|
+
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458\u767B\u573A\uFF01\u5355\u6B21\u8D85\u5927\u7BC7\u5E45Git Diff\u76F4\u63A5\u62C9\u6EE1\uFF0C\u8D1F\u8D23review\u7684\u540C\u4E8B\u53EF\u4EE5\u6CE1\u4E0A\u4E00\u676F\u70ED\u8336\uFF0C\u51C6\u5907\u9759\u5FC3\u7814\u8BFB\u4F60\u4E00\u6B21\u6027\u843D\u5730\u7684\u5B8C\u6574\u903B\u8F91\u3002",
|
|
916
|
+
"\u4E00\u628A\u68AD\u54C8\u786C\u6838\u73A9\u5BB6\uFF01\u6574\u5957\u9700\u6C42\u903B\u8F91\u5168\u90E8\u6574\u5408\u8FDB\u5355\u6B21commit\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5B8C\u6574\u65B9\u6848\u65E9\u5728\u8111\u6D77\u4E2D\u6784\u601D\u6210\u578B\uFF0C\u76F4\u63A5\u4E00\u6CE2\u4E1D\u6ED1\u63A8\u8FDB\u5B8C\u6574\u843D\u5730\uFF0C\u6548\u7387\u60CA\u4EBA\u3002",
|
|
946
917
|
"\u4E00\u628A\u68AD\u54C8\u4EE3\u7801\u827A\u672F\u5BB6\uFF01\u4F60\u7684\u6BCF\u4E00\u6B21\u63D0\u4EA4\u90FD\u50CF\u4E00\u7BC7\u5185\u5BB9\u5B8C\u6574\u903B\u8F91\u95ED\u73AF\u7684\u4E2D\u7BC7\u6280\u672F\u6587\u7A3F\uFF0C\u5E73\u65F6\u5C11\u6709\u96F6\u6563\u5C0F\u6539\u52A8\uFF0C\u4E00\u65E6\u51FA\u624B\u4FBF\u662F\u5B8C\u6574\u529F\u80FD\u5927\u66F4\u65B0\uFF0C\u4E0D\u9E23\u5219\u5DF2\u4E00\u9E23\u60CA\u4EBA\u3002",
|
|
947
|
-
"\u4E60\u60EF\u6574\u4F53\u6784\u601D\u5B8C\u6574\u518D\u7EDF\u4E00\u63D0\u4EA4\u7684\u68AD\u54C8\u5927\u4F6C\uFF0C\u7701\u53BB\u9891\u7E41\u788E\u7247\u5316\u63D0\u4EA4\uFF0C\u6574\u5957\u529F\u80FD\u4E00\u6B21\u6027\u843D\u5730\uFF0C\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\uFF0C\
|
|
918
|
+
"\u4E60\u60EF\u6574\u4F53\u6784\u601D\u5B8C\u6574\u518D\u7EDF\u4E00\u63D0\u4EA4\u7684\u68AD\u54C8\u5927\u4F6C\uFF0C\u7701\u53BB\u9891\u7E41\u788E\u7247\u5316\u63D0\u4EA4\uFF0C\u6574\u5957\u529F\u80FD\u4E00\u6B21\u6027\u843D\u5730\uFF0C\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\uFF0C\u8BC4\u5BA1\u9636\u6BB5\u9700\u8981\u591A\u82B1\u4E00\u70B9\u65F6\u95F4\u7814\u8BFB\uFF0C\u4F46\u903B\u8F91\u8FDE\u8D2F\u5B8C\u6574\u503C\u5F97\u6295\u5165\u3002",
|
|
948
919
|
"\u4E00\u6B21\u6027\u641E\u5B9A\u6574\u5957\u4E1A\u52A1\u6A21\u5757\u7684\u68AD\u54C8\u5927\u795E\uFF0C\u64C5\u957F\u5168\u76D8\u68B3\u7406\u9700\u6C42\u540E\u96C6\u4E2D\u8F93\u51FA\uFF0C\u7701\u53BB\u53CD\u590D\u62C6\u5206\u63D0\u4EA4\u7684\u7E41\u7410\uFF0C\u5927\u5C40\u89C2\u62C9\u6EE1\uFF0C\u582A\u79F0\u5B8C\u6574\u9700\u6C42\u4E00\u6B21\u6027\u4EA4\u4ED8\u6807\u6746\u3002"
|
|
949
920
|
];
|
|
950
921
|
var TAG_PPT_ARCHITECT_CRITIQUES = [
|
|
951
|
-
"\u67B6\u6784\u5E08\u98CE\u8303\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u63D0\u4EA4\u6B21\u6570\u9891\u7E41\u4F46\u5355\u8F6E\u6539\u52A8\u7CBE\u7B80\u514B\u5236\uFF0C\u4F60\u7684Git\u5386\u53F2\u8BB0\u5F55\u50CF\
|
|
952
|
-
"\u606D\u559C\u83B7\u5F97\u300E\u4F18\u96C5\u67B6\u6784\u5E08\u300F\u79F0\u53F7\uFF01\u6BCF\u4E00\u6761commit\u90FD\u5E26\u7740\u6E05\u6670\u89C4\u6574\u7684\u91CD\u6784\u601D\u8DEF\uFF0C\
|
|
953
|
-
"\u4E13\u6CE8\u67B6\u6784\u4F18\u5316\u7684\u4F18\u96C5\u5927\u4F6C\uFF0C\u4E0D\u5806\u780C\u5197\u4F59\u4E1A\u52A1\u4EE3\u7801\uFF0C\u4E13\u6CE8\u8C03\u6574\u9879\u76EE\u5206\u5C42\u3001\u89C4\u8303\u8C03\u7528\u903B\u8F91\uFF0C\u6BCF\u6B21\u5C0F\u63D0\u4EA4\u90FD\u5728\u6F5C\u79FB\u9ED8\u5316\u4F18\u5316\u9879\u76EE\u5E95\u5C42\u7ED3\u6784\uFF0C\
|
|
954
|
-
"\u4EE3\u7801\u4E16\u754C\u7684\u89C4\u5212\u8BBE\u8BA1\u5E08\uFF0C\u9891\u7E41\u5FAE\u8C03\u9879\u76EE\u7ED3\u6784\u4E0E\u5206\u5C42\u903B\u8F91\uFF0C\u6BD4\u8D77\
|
|
955
|
-
"\u4EE5\u91CD\u6784\u4F18\u5316\u4E3A\u6838\u5FC3\u5DE5\u4F5C\u7684\u67B6\u6784\u80FD\u624B\uFF0C\u8F7B\u91CF\u9AD8\u9891\u63D0\u4EA4\u6301\u7EED\u6253\u78E8\u9879\u76EE\u9AA8\u67B6\uFF0C\u9ED8\u9ED8\u89C4\u907F\u540E\u7EED\u8FED\u4EE3\u9690\u60A3\uFF0C\u773C\u5149\u653E\u5F97\u957F\u8FDC\uFF0C\u662F\u56E2\u961F\
|
|
922
|
+
"\u67B6\u6784\u5E08\u98CE\u8303\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u63D0\u4EA4\u6B21\u6570\u9891\u7E41\u4F46\u5355\u8F6E\u6539\u52A8\u7CBE\u7B80\u514B\u5236\uFF0C\u4F60\u7684Git\u5386\u53F2\u8BB0\u5F55\u50CF\u7CBE\u5FC3\u7F16\u6392\u7684\u6280\u672F\u827A\u672F\u54C1\uFF0C\u91CD\u5FC3\u653E\u5728\u68B3\u7406\u9879\u76EE\u903B\u8F91\u3001\u4F18\u5316\u6574\u4F53\u67B6\u6784\u3002",
|
|
923
|
+
"\u606D\u559C\u83B7\u5F97\u300E\u4F18\u96C5\u67B6\u6784\u5E08\u300F\u79F0\u53F7\uFF01\u6BCF\u4E00\u6761commit\u90FD\u5E26\u7740\u6E05\u6670\u89C4\u6574\u7684\u91CD\u6784\u601D\u8DEF\uFF0C\u5728\u65E0\u5F62\u4E4B\u4E2D\u68B3\u7406\u4F18\u5316\u9879\u76EE\u7ED3\u6784\uFF0Cdiff\u6539\u52A8\u8F7B\u76C8\u7CBE\u7B80\uFF0C\u5374\u5BF9\u6574\u4F53\u67B6\u6784\u8D77\u5230\u81F3\u5173\u91CD\u8981\u7684\u4F18\u5316\u4F5C\u7528\u3002",
|
|
924
|
+
"\u4E13\u6CE8\u67B6\u6784\u4F18\u5316\u7684\u4F18\u96C5\u5927\u4F6C\uFF0C\u4E0D\u5806\u780C\u5197\u4F59\u4E1A\u52A1\u4EE3\u7801\uFF0C\u4E13\u6CE8\u8C03\u6574\u9879\u76EE\u5206\u5C42\u3001\u89C4\u8303\u8C03\u7528\u903B\u8F91\uFF0C\u6BCF\u6B21\u5C0F\u63D0\u4EA4\u90FD\u5728\u6F5C\u79FB\u9ED8\u5316\u4F18\u5316\u9879\u76EE\u5E95\u5C42\u7ED3\u6784\uFF0C\u773C\u5149\u957F\u8FDC\u3002",
|
|
925
|
+
"\u4EE3\u7801\u4E16\u754C\u7684\u89C4\u5212\u8BBE\u8BA1\u5E08\uFF0C\u9891\u7E41\u5FAE\u8C03\u9879\u76EE\u7ED3\u6784\u4E0E\u5206\u5C42\u903B\u8F91\uFF0C\u6BD4\u8D77\u589E\u91CF\u529F\u80FD\u66F4\u770B\u91CD\u9879\u76EE\u957F\u671F\u53EF\u7EF4\u62A4\u6027\uFF0C\u7EC6\u788E\u63D0\u4EA4\u80CC\u540E\u90FD\u662F\u5BF9\u67B6\u6784\u957F\u8FDC\u53D1\u5C55\u7684\u6DF1\u5EA6\u8003\u91CF\u3002",
|
|
926
|
+
"\u4EE5\u91CD\u6784\u4F18\u5316\u4E3A\u6838\u5FC3\u5DE5\u4F5C\u7684\u67B6\u6784\u80FD\u624B\uFF0C\u8F7B\u91CF\u9AD8\u9891\u63D0\u4EA4\u6301\u7EED\u6253\u78E8\u9879\u76EE\u9AA8\u67B6\uFF0C\u9ED8\u9ED8\u89C4\u907F\u540E\u7EED\u8FED\u4EE3\u9690\u60A3\uFF0C\u773C\u5149\u653E\u5F97\u957F\u8FDC\uFF0C\u662F\u56E2\u961F\u6280\u672F\u89C4\u5212\u7684\u91CD\u8981\u63A8\u624B\u3002"
|
|
956
927
|
];
|
|
957
928
|
var TAG_FORMAT_MASTER_CRITIQUES = [
|
|
958
|
-
"\u683C\u5F0F\u5316\u5927\u5E08\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u7D2F\u8BA1\u63D0\u4EA4\
|
|
959
|
-
"\u683C\u5F0F\u5316\u5927\u5E08\u5B9E\u9524\uFF01\
|
|
960
|
-
"\u6267\u7740\u4E8E\u4EE3\u7801\u6574\u6D01\u5EA6\u7684\u89C4\u8303\u5B88\u62A4\u8005\uFF0C\u4E0D\u653E\u8FC7\u4EFB\u4F55\u4E00\u5904\u7F29\u8FDB\u3001\u7A7A\u683C\u3001\u6CE8\u91CA\u7455\u75B5\uFF0C\u53CD\u590D\u63D0\u4EA4\u5FAE\u8C03\u7EDF\u4E00\u9879\u76EE\u7F16\u7801\u98CE\u683C\uFF0C\u8BA9\
|
|
929
|
+
"\u683C\u5F0F\u5316\u5927\u5E08\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u7D2F\u8BA1\u63D0\u4EA4\u591A\u6B21\uFF0C\u4EE3\u7801\u6539\u52A8\u884C\u6570\u5BE5\u5BE5\u2014\u2014\u4F60\u5BF9\u4EE3\u7801\u89C4\u8303\u4E0E\u6574\u6D01\u5EA6\u6709\u7740\u6781\u81F4\u8FFD\u6C42\uFF0C\u7EC6\u5FAE\u8C03\u6574\u76F4\u63A5\u8BA9\u6574\u4E2A\u9879\u76EE\u4EE3\u7801\u5E93\u7115\u7136\u4E00\u65B0\u3002",
|
|
930
|
+
"\u683C\u5F0F\u5316\u5927\u5E08\u5B9E\u9524\uFF01\u591A\u6B21\u63D0\u4EA4\u5168\u90E8\u805A\u7126\u8C03\u6574\u7A7A\u683C\u3001\u8865\u5145\u6CE8\u91CA\u3001\u7EDF\u4E00\u7F29\u8FDB\u89C4\u8303\uFF0C\u4E0D\u6C42\u65B0\u589E\u5927\u91CF\u529F\u80FD\u4EE3\u7801\uFF0C\u4E00\u5FC3\u62C9\u9AD8\u4EE3\u7801\u5E93\u6574\u4F53\u989C\u503C\uFF0C\u5927\u5E45\u63D0\u5347\u540E\u7EED\u9605\u8BFB\u53EF\u8BFB\u6027\uFF01",
|
|
931
|
+
"\u6267\u7740\u4E8E\u4EE3\u7801\u6574\u6D01\u5EA6\u7684\u89C4\u8303\u5B88\u62A4\u8005\uFF0C\u4E0D\u653E\u8FC7\u4EFB\u4F55\u4E00\u5904\u7F29\u8FDB\u3001\u7A7A\u683C\u3001\u6CE8\u91CA\u7455\u75B5\uFF0C\u53CD\u590D\u63D0\u4EA4\u5FAE\u8C03\u7EDF\u4E00\u9879\u76EE\u7F16\u7801\u98CE\u683C\uFF0C\u8BA9\u540C\u4E8B\u63A5\u624B\u4EE3\u7801\u65F6\u90FD\u80FD\u770B\u5F97\u6E05\u6670\u987A\u7545\u3002",
|
|
961
932
|
"\u4EE3\u7801\u989C\u503C\u7BA1\u7406\u5458\u4E0A\u7EBF\uFF0C\u6BD4\u8D77\u65B0\u589E\u4E1A\u52A1\u529F\u80FD\uFF0C\u66F4\u5728\u610F\u6574\u4F53\u4EE3\u7801\u98CE\u683C\u7EDF\u4E00\u89C4\u6574\uFF0C\u7EC6\u788E\u7684\u89C4\u8303\u5316\u8C03\u6574\u65E5\u79EF\u6708\u7D2F\uFF0C\u5927\u5E45\u964D\u4F4E\u56E2\u961F\u540E\u7EED\u534F\u4F5C\u9605\u8BFB\u6210\u672C\u3002",
|
|
962
933
|
"\u6781\u81F4\u7EC6\u8282\u63A7\u683C\u5F0F\u5316\u5927\u4F6C\uFF0C\u6BCF\u4E00\u5904\u6392\u7248\u3001\u6CE8\u91CA\u3001\u7B26\u53F7\u90FD\u4E25\u683C\u9075\u5FAA\u7EDF\u4E00\u6807\u51C6\uFF0C\u4E00\u6B21\u6B21\u7EC6\u5FAE\u63D0\u4EA4\u6253\u78E8\u9879\u76EE\u4EE3\u7801\u98CE\u8C8C\uFF0C\u5B8C\u7F8E\u6CBB\u6108\u6240\u6709\u4EBA\u7684\u4EE3\u7801\u5F3A\u8FEB\u75C7\u3002"
|
|
963
934
|
];
|
|
964
935
|
var TAG_GIT_CHATTER_CRITIQUES = [
|
|
965
|
-
"Git \u8BB0\u5F55\u8FBE\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\
|
|
966
|
-
"Git \u8BB0\u5F55\u8FBE\u4EBA\u8BA4\u8BC1\uFF01\u628A\u6BCF\u4E00\u5C0F\u6B65\u6539\u52A8\u90FD\u62C6\u5206\u4E3A\u72EC\u7ACBcommit\uFF0C\u7EC6\u7C92\u5EA6\u62C6\u5206\u5982\u540C\u5B9E\u65F6\u7F16\u5199\u5F00\u53D1\u65E5\u5FD7\uFF0C\u8C03\u8BD5\u3001\u56DE\u6EDA\u3001\u5B9A\u4F4D\u95EE\u9898\u65F6\u4E00\u76EE\u4E86\u7136\uFF0C\u4EE3\u7801\u8FFD\u8E2A\u96BE\u5EA6\
|
|
936
|
+
"Git \u8BB0\u5F55\u8FBE\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u591A\u6B21\u62C6\u5206\u63D0\u4EA4\uFF0C\u5E73\u5747\u5355\u6B21\u6539\u52A8\u7CBE\u7B80\u81F3\u6781\u2014\u2014\u4F60\u50CF\u662F\u5728\u7528Git\u7248\u672C\u5E93\u5B9E\u65F6\u8BB0\u5F55\u7F16\u7801\u601D\u8DEF\uFF0C\u6781\u81F4\u7EC6\u9897\u7C92\u5EA6\u62C6\u5206\uFF0C\u540E\u7EED\u7248\u672C\u56DE\u6EDA\u8C03\u8BD5\u6BEB\u65E0\u538B\u529B\uFF01",
|
|
937
|
+
"Git \u8BB0\u5F55\u8FBE\u4EBA\u8BA4\u8BC1\uFF01\u628A\u6BCF\u4E00\u5C0F\u6B65\u6539\u52A8\u90FD\u62C6\u5206\u4E3A\u72EC\u7ACBcommit\uFF0C\u7EC6\u7C92\u5EA6\u62C6\u5206\u5982\u540C\u5B9E\u65F6\u7F16\u5199\u5F00\u53D1\u65E5\u5FD7\uFF0C\u8C03\u8BD5\u3001\u56DE\u6EDA\u3001\u5B9A\u4F4D\u95EE\u9898\u65F6\u4E00\u76EE\u4E86\u7136\uFF0C\u4EE3\u7801\u8FFD\u8E2A\u96BE\u5EA6\u5927\u5E45\u964D\u4F4E\u3002",
|
|
967
938
|
"\u6781\u81F4\u7EC6\u5206\u63D0\u4EA4\u4E60\u60EF\u7684\u7EC6\u81F4\u9009\u624B\uFF0C\u4EFB\u4F55\u5FAE\u5C0F\u6539\u52A8\u5355\u72EC\u8BB0\u5F55\uFF0C\u4E0D\u6015\u63D0\u4EA4\u6570\u91CF\u591A\uFF0C\u53EA\u6C42\u6BCF\u4E00\u6B65\u6539\u52A8\u6E05\u6670\u53EF\u8FFD\u6EAF\uFF0C\u6392\u67E5\u7EBF\u4E0Abug\u65F6\u8FD9\u4EFD\u7EC6\u81F4\u80FD\u7701\u4E0B\u5927\u91CF\u6392\u67E5\u65F6\u95F4\u3002",
|
|
968
939
|
"\u5F00\u53D1\u8FC7\u7A0B\u53EF\u89C6\u5316\u5927\u5E08\uFF0C\u5C06\u65B0\u589E\u3001\u4FEE\u6539\u3001\u4FEE\u590D\u5168\u90E8\u62C6\u5206\u4E3A\u72EC\u7ACB\u8BB0\u5F55\uFF0CGit\u5386\u53F2\u6E05\u6670\u8BB0\u5F55\u6BCF\u4E00\u6B65\u5F00\u53D1\u601D\u8DEF\uFF0C\u534F\u4F5C\u8C03\u8BD5\u65F6\u80FD\u5FEB\u901F\u770B\u61C2\u4EE3\u7801\u8FED\u4EE3\u5168\u8FC7\u7A0B\uFF0C\u534F\u4F5C\u4F53\u9A8C\u62C9\u6EE1\u3002",
|
|
969
940
|
"\u504F\u7231\u5C0F\u6B65\u5FEB\u8DD1\u5F0F\u7F16\u7801\u7684\u7EC6\u5FC3\u5F00\u53D1\u8005\uFF0C\u4E00\u70B9\u6539\u52A8\u4E00\u6B21\u63D0\u4EA4\uFF0C\u62D2\u7EDD\u5927\u6BB5\u6DF7\u5408\u4FEE\u6539\uFF0C\u7248\u672C\u5386\u53F2\u5E72\u51C0\u901A\u900F\uFF0C\u662F\u56E2\u961F\u91CC\u65B9\u4FBF\u534F\u540C\u6392\u9519\u7684\u4F18\u8D28\u5F00\u53D1\u6A21\u677F\u3002"
|
|
970
941
|
];
|
|
971
942
|
var TAG_NIGHT_ASSASSIN_CRITIQUES = [
|
|
972
|
-
"\u6DF1\u591C\u523A\u5BA2\u9690\u85CF\u6210\u5C31\uFF01\u4FEE\u4ED9\u71AC\u591C\u6307\u6570\u76F4\u63A5\u7206\u8868\uFF0C\u4F46\u6BCF\u6B21\u63D0\u4EA4\u5185\u5BB9\
|
|
973
|
-
"\u6DF1\u591C\u523A\u5BA2\u767B\u573A\uFF01\
|
|
943
|
+
"\u6DF1\u591C\u523A\u5BA2\u9690\u85CF\u6210\u5C31\uFF01\u4FEE\u4ED9\u71AC\u591C\u6307\u6570\u76F4\u63A5\u7206\u8868\uFF0C\u4F46\u6BCF\u6B21\u63D0\u4EA4\u5185\u5BB9\u7CBE\u70BC\u9AD8\u6548\u2014\u2014\u4E13\u6311\u591C\u6DF1\u4EBA\u9759\u7684\u6DF1\u591C\u4E0A\u7EBF\uFF0C\u6084\u65E0\u58F0\u606F\u641E\u5B9A\u6838\u5FC3\u963B\u585Ebug\uFF0C\u4E8B\u6210\u4E4B\u540E\u6DF1\u85CF\u529F\u4E0E\u540D\u3002",
|
|
944
|
+
"\u6DF1\u591C\u523A\u5BA2\u767B\u573A\uFF01\u5C11\u91CF\u9AD8\u8D28\u91CF\u63D0\u4EA4\u5168\u90E8\u8BDE\u751F\u4E8E\u51CC\u6668\u65F6\u6BB5\uFF0C\u767D\u5929\u4F4E\u8C03\u6C89\u6DC0\u4E0D\u5F20\u626C\uFF0C\u6DF1\u591C\u51FA\u624B\u7CBE\u51C6\u89E3\u51B3\u5173\u952E\u96BE\u9898\uFF0C\u663C\u591C\u53CD\u5DEE\u62C9\u6EE1\uFF0C\u53CC\u9762\u6781\u5BA2\u4EBA\u751F\u76F8\u5F53\u7CBE\u5F69\u3002",
|
|
974
945
|
"\u4E13\u5C5E\u6DF1\u591C\u4E0A\u7EBF\u7684bug\u6740\u624B\uFF0C\u907F\u5F00\u767D\u5929\u5608\u6742\u6C9F\u901A\u65F6\u6BB5\uFF0C\u51CC\u6668\u5B89\u9759\u73AF\u5883\u7CBE\u51C6\u5B9A\u4F4D\u6838\u5FC3\u6545\u969C\uFF0C\u5C11\u91CF\u7CBE\u70BC\u6539\u52A8\u76F4\u63A5\u6839\u6CBB\u7591\u96BE\u95EE\u9898\uFF0C\u4F4E\u8C03\u89E3\u51B3\u56E2\u961F\u68D8\u624B\u5361\u70B9\u3002",
|
|
975
|
-
"\u767D\u5929\u4F4E\u8C03\u5904\u7406\u65E5\u5E38\u7410\u4E8B\uFF0C\u6DF1\u591C\u5316\u8EAB\u4EE3\u7801\u523A\u5BA2\u7CBE\u51C6\u653B\u575A\u963B\u585E\u9879\u76EE\u7684\u6838\u5FC3\u96BE\u9898\uFF0C\
|
|
976
|
-
"\u64C5\u957F\u5229\u7528\u51CC\u6668\u5B89\u9759\u7A97\u53E3\u89E3\u51B3\u987D\u56FA\u7EBF\u4E0A\u95EE\u9898\uFF0C\
|
|
946
|
+
"\u767D\u5929\u4F4E\u8C03\u5904\u7406\u65E5\u5E38\u7410\u4E8B\uFF0C\u6DF1\u591C\u5316\u8EAB\u4EE3\u7801\u523A\u5BA2\u7CBE\u51C6\u653B\u575A\u963B\u585E\u9879\u76EE\u7684\u6838\u5FC3\u96BE\u9898\uFF0C\u6CA1\u6709\u65E0\u6548\u63D0\u4EA4\uFF0C\u4E00\u62DB\u4E00\u5F0F\u76F4\u51FB\u95EE\u9898\u6839\u6E90\uFF0C\u9AD8\u6548\u53C8\u4F4E\u8C03\u3002",
|
|
947
|
+
"\u64C5\u957F\u5229\u7528\u51CC\u6668\u5B89\u9759\u7A97\u53E3\u89E3\u51B3\u987D\u56FA\u7EBF\u4E0A\u95EE\u9898\uFF0C\u6CA1\u6709\u65E0\u6548\u63D0\u4EA4\uFF0C\u6BCF\u4E00\u6B21\u6DF1\u591C\u66F4\u65B0\u90FD\u76F4\u51FB\u6838\u5FC3\u75DB\u70B9\uFF0C\u9ED8\u9ED8\u626B\u6E05\u9879\u76EE\u8FED\u4EE3\u8DEF\u4E0A\u7684\u5404\u7C7B\u969C\u788D\u3002"
|
|
977
948
|
];
|
|
978
949
|
var TAG_DONKEY_CRITIQUES = [
|
|
979
|
-
"\u5168\u80FD\u6218\u795E\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u5468\u672B\u6301\u7EED\u7206\u809D\u8FED\u4EE3 + \u65E5\u5E38\u6DF1\u591C\u4FEE\u4ED9\u653B\u575A\
|
|
950
|
+
"\u5168\u80FD\u6218\u795E\u9690\u85CF\u6210\u5C31\u89E3\u9501\uFF01\u5468\u672B\u6301\u7EED\u7206\u809D\u8FED\u4EE3 + \u65E5\u5E38\u6DF1\u591C\u4FEE\u4ED9\u653B\u575A\u53CC\u6A21\u5F0F\u53E0\u52A0\u3002Git\u8BB0\u5F55\u4E86\u4F60\u6BCF\u4E00\u4EFD\u8F9B\u82E6\u4ED8\u51FA\uFF0C\u4F46\u4E5F\u8BB0\u5F97\u522B\u957F\u671F\u900F\u652F\uFF0C\u7559\u51FA\u65F6\u95F4\u597D\u597D\u7167\u987E\u81EA\u5DF1\u3002",
|
|
980
951
|
"\u5468\u672B\u4F11\u606F\u65F6\u6BB5\u3001\u4E07\u7C41\u4FF1\u5BC2\u7684\u6DF1\u591C\u90FD\u7559\u4E0B\u4E86\u4F60\u7684\u4EE3\u7801\u63D0\u4EA4\u8DB3\u8FF9\uFF0C\u8D23\u4EFB\u5FC3\u4E0E\u5403\u82E6\u8010\u52B3\u5C5E\u6027\u76F4\u63A5\u62C9\u6EE1\u3002\u5168\u529B\u4E3A\u9879\u76EE\u51B2\u950B\u7684\u540C\u65F6\uFF0C\u52A1\u5FC5\u7559\u51FA\u7A7A\u95F2\u65F6\u95F4\u597D\u597D\u751F\u6D3B\u653E\u677E\u3002",
|
|
981
|
-
"\u5168\u5E74\u65E0\u4F11\u5F0F\u5168\u80FD\
|
|
982
|
-
"\u517C\u987E\u6DF1\u591C\u653B\u575A\u4E0E\u5468\u672B\u8865\u8FED\u4EE3\u7684\u5168\u80FD\u515C\u5E95\u9009\u624B\uFF0C\
|
|
952
|
+
"\u5168\u5E74\u65E0\u4F11\u5F0F\u5168\u80FD\u9009\u624B\uFF0C\u5DE5\u4F5C\u65E5\u71AC\u591C\u653B\u575A\u3001\u5468\u672B\u4E3B\u52A8\u8865\u5168\u8FED\u4EE3\uFF0C\u9879\u76EE\u4EFB\u4F55\u65F6\u6BB5\u7F3A\u4EBA\u515C\u5E95\u603B\u6709\u4F60\uFF0C\u4ED8\u51FA\u503C\u5F97\u6240\u6709\u4EBA\u8BA4\u53EF\uFF0C\u5207\u8BB0\u52B3\u9038\u7ED3\u5408\u4E0D\u8981\u8FC7\u5EA6\u52B3\u7D2F\u3002",
|
|
953
|
+
"\u517C\u987E\u6DF1\u591C\u653B\u575A\u4E0E\u5468\u672B\u8865\u8FED\u4EE3\u7684\u5168\u80FD\u515C\u5E95\u9009\u624B\uFF0C\u9879\u76EE\u6709\u7D27\u6025\u9700\u6C42\u65F6\u603B\u80FD\u4E0A\u7EBF\u5904\u7406\uFF0C\u627F\u62C5\u5927\u91CF\u989D\u5916\u5DE5\u4F5C\u91CF\uFF0C\u5728\u62FC\u547D\u63A8\u8FDB\u8FDB\u5EA6\u7684\u540C\u65F6\u8BB0\u5F97\u591A\u4F11\u606F\u8C03\u517B\u8EAB\u5FC3\u3002",
|
|
983
954
|
"\u5168\u5929\u5019\u5F85\u547D\u7684\u9879\u76EE\u5B88\u62A4\u8005\uFF0C\u4E0D\u5206\u5DE5\u4F5C\u65E5\u4F11\u606F\u65E5\u3001\u4E0D\u5206\u767D\u663C\u6DF1\u591C\uFF0C\u968F\u65F6\u4E0A\u7EBF\u89E3\u51B3\u8FED\u4EE3\u5361\u70B9\uFF0C\u9AD8\u5F3A\u5EA6\u4ED8\u51FA\u503C\u5F97\u70B9\u8D5E\uFF0C\u4E00\u5B9A\u8981\u7ED9\u81EA\u5DF1\u7559\u51FA\u653E\u677E\u4F11\u606F\u7684\u4E13\u5C5E\u65F6\u95F4\u3002"
|
|
984
955
|
];
|
|
985
956
|
var TAG_FISH_IMMORTAL_CRITIQUES = [
|
|
986
|
-
"\u6478\u9C7C\u4ED9\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u6478\u9C7C\u677E\u5F1B\u6307\u6570\
|
|
987
|
-
"\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u5883\u754C\
|
|
957
|
+
"\u6478\u9C7C\u4ED9\u4EBA\u9690\u85CF\u6210\u5C31\uFF01\u6478\u9C7C\u677E\u5F1B\u6307\u6570\u62C9\u6EE1\uFF0C\u5355\u65E5\u63D0\u4EA40-1\u6B21\u5373\u53EF\u5B8C\u6210\u5168\u90E8\u672C\u804C\u5DE5\u4F5C\u2014\u2014\u65E9\u5DF2\u8D85\u8D8A\u666E\u901A\u6D45\u5C42\u6478\u9C7C\uFF0C\u62B5\u8FBE\u4EE5\u7B80\u9A6D\u7E41\u3001\u65E0\u62DB\u80DC\u6709\u62DB\u7684\u804C\u573A\u81F3\u9AD8\u5883\u754C\u3002",
|
|
958
|
+
"\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u5883\u754C\u5DF2\u7136\u4E0D\u540C\u51E1\u54CD\uFF01\u6BCF\u65E5\u4EC5\u9700\u5BE5\u5BE5\u4E00\u6B21\u8F7B\u91CF\u63D0\u4EA4\uFF0C\u6DE1\u5B9A\u677E\u5F1B\u7387\u6781\u9AD8\uFF0C\u7528\u6700\u5C11\u7684\u63D0\u4EA4\u7A33\u7A33\u7EF4\u6301\u4E1A\u52A1\u6B63\u5E38\u8FD0\u8F6C\uFF0C\u59A5\u59A5\u4E16\u5916\u804C\u573A\u9AD8\u4EBA\u3002",
|
|
988
959
|
"\u53C2\u900F\u804C\u573A\u5E73\u8861\u4E4B\u9053\u7684\u6478\u9C7C\u4ED9\u4EBA\uFF0C\u8D85\u9AD8\u6548\u7387\u5FEB\u901F\u5B8C\u6210\u5F53\u65E5\u5168\u90E8\u4EFB\u52A1\uFF0C\u5269\u4F59\u65F6\u95F4\u5B89\u5FC3\u653E\u7A7A\u5145\u7535\uFF0C\u4E0D\u7528\u5185\u5377\u6D88\u8017\u81EA\u5DF1\uFF0C\u9AD8\u6548\u5B8C\u6210\u672C\u804C\u5C31\u662F\u6700\u9AD8\u7EA7\u7684\u6478\u9C7C\u667A\u6167\u3002",
|
|
989
960
|
"\u6781\u7B80\u5DE5\u4F5C\u6D41\u4ED9\u4EBA\uFF0C\u5C11\u91CF\u64CD\u4F5C\u5C31\u80FD\u7A33\u59A5\u4EA4\u4ED8\u5168\u90E8\u5DE5\u4F5C\u5185\u5BB9\uFF0C\u4ECE\u4E0D\u76F2\u76EE\u6D88\u8017\u65F6\u95F4\u5185\u5377\uFF0C\u61C2\u5F97\u9AD8\u6548\u5B8C\u5DE5\u3001\u9002\u5EA6\u653E\u677E\uFF0C\u628A\u5DE5\u4F5C\u751F\u6D3B\u5E73\u8861\u62FF\u634F\u5230\u6781\u81F4\u3002",
|
|
990
|
-
"\u522B\u4EBA\u82B1\u8D39\u4E00\u6574\u5929\
|
|
961
|
+
"\u522B\u4EBA\u82B1\u8D39\u4E00\u6574\u5929\u5FD9\u788C\u5728\u5DE5\u4F4D\uFF0C\u4F60\u77ED\u65F6\u9AD8\u6548\u5B8C\u6210\u5168\u90E8\u9700\u6C42\uFF0C\u5176\u4F59\u65F6\u95F4\u4ECE\u5BB9\u81EA\u5728\u4F11\u6574\uFF0C\u6478\u9C7C\u4ED9\u4EBA\u7684\u6838\u5FC3\u4ECE\u6765\u4E0D\u662F\u6446\u70C2\uFF0C\u662F\u8D85\u9AD8\u5DE5\u4F5C\u6548\u7387\u5E26\u6765\u7684\u677E\u5F1B\u81EA\u7531\u3002"
|
|
991
962
|
];
|
|
992
|
-
var TAG_COLOR_MAP = {
|
|
993
|
-
"\u6478\u9C7C\u5B97\u5E08": chalk.green,
|
|
994
|
-
"\u7206\u809D\u6218\u795E": chalk.red.bold,
|
|
995
|
-
"\u6DF1\u591C\u4FEE\u4ED9\u8005": chalk.red,
|
|
996
|
-
"\u52E4\u6073\u642C\u7816\u4EBA": chalk.yellow,
|
|
997
|
-
"\u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458": chalk.magenta,
|
|
998
|
-
"PPT \u67B6\u6784\u5E08": chalk.blue,
|
|
999
|
-
"\u683C\u5F0F\u5316\u5927\u5E08": chalk.cyan,
|
|
1000
|
-
"Git \u804A\u5929\u8FBE\u4EBA": chalk.greenBright,
|
|
1001
|
-
"\u6DF1\u591C\u523A\u5BA2": chalk.redBright,
|
|
1002
|
-
"\u751F\u4EA7\u961F\u7684\u9A74": chalk.yellowBright,
|
|
1003
|
-
"\u6478\u9C7C\u4ED9\u4EBA": chalk.green.bold
|
|
1004
|
-
};
|
|
1005
|
-
function colorizeCriticTags(text) {
|
|
1006
|
-
const sortedKeys = Object.keys(TAG_COLOR_MAP).sort((a, b) => b.length - a.length);
|
|
1007
|
-
let result = text;
|
|
1008
|
-
for (const key of sortedKeys) {
|
|
1009
|
-
const colorFn = TAG_COLOR_MAP[key];
|
|
1010
|
-
const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1011
|
-
const regex = new RegExp(`\u300E?${escaped}\u300F?`, "g");
|
|
1012
|
-
result = result.replace(regex, (match) => {
|
|
1013
|
-
if (match.startsWith("\u300E") && match.endsWith("\u300F")) {
|
|
1014
|
-
return "\u300E" + colorFn(key) + "\u300F";
|
|
1015
|
-
}
|
|
1016
|
-
return colorFn(match);
|
|
1017
|
-
});
|
|
1018
|
-
}
|
|
1019
|
-
return result;
|
|
1020
|
-
}
|
|
1021
963
|
function getRandomItem(arr) {
|
|
1022
964
|
const idx = Math.floor(Math.random() * arr.length);
|
|
1023
|
-
return
|
|
965
|
+
return arr[idx];
|
|
1024
966
|
}
|
|
1025
967
|
function getAICritic(weeklyStats) {
|
|
1026
968
|
const parts = [];
|
|
@@ -1049,20 +991,6 @@ function getAICriticForMonth(monthlyStats) {
|
|
|
1049
991
|
if (monthlyStats.ghostCommitsCount > 3) {
|
|
1050
992
|
parts.push(getRandomItem(GHOST_CRITIQUES));
|
|
1051
993
|
}
|
|
1052
|
-
const { fix, feat, chore, other } = monthlyStats.categories;
|
|
1053
|
-
const total = fix + feat + chore + other;
|
|
1054
|
-
if (total > 0) {
|
|
1055
|
-
const fixPct = Math.round(fix / total * 100);
|
|
1056
|
-
const featPct = Math.round(feat / total * 100);
|
|
1057
|
-
const chorePct = Math.round(chore / total * 100);
|
|
1058
|
-
if (fixPct >= 50) {
|
|
1059
|
-
parts.push(getRandomItem(CATEGORY_FIX_CRITIQUES).replace("%PERCENT%%", `${fixPct}%`));
|
|
1060
|
-
} else if (featPct >= 50) {
|
|
1061
|
-
parts.push(getRandomItem(CATEGORY_FEAT_CRITIQUES).replace("%PERCENT%%", `${featPct}%`));
|
|
1062
|
-
} else if (chorePct >= 40) {
|
|
1063
|
-
parts.push(getRandomItem(CATEGORY_CHORE_CRITIQUES).replace("%PERCENT%%", `${chorePct}%`));
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
1066
994
|
if (monthlyStats.totalCommits === 0) {
|
|
1067
995
|
parts.push("\u672C\u6708\u63D0\u4EA4\u6B21\u6570\u4E3A 0\uFF01\u4F60\u6210\u529F\u5730\u5728\u516C\u53F8\u84B8\u53D1\u4E86\u4E00\u4E2A\u6708\uFF0C\u62FF\u5230\u4E86\u5168\u989D\u5DE5\u8D44\u3002\u5EFA\u8BAE\u4F60\u4E0B\u4E2A\u6708\u7EE7\u7EED\u4FDD\u6301\u4F4E\u8C03\uFF0C\u4E0D\u8981\u8BA9 HR \u6CE8\u610F\u5230\u4F60\u3002");
|
|
1068
996
|
} else if (monthlyStats.averageFish >= 70) {
|
|
@@ -1113,6 +1041,96 @@ function getTagCriticsFromDays(days) {
|
|
|
1113
1041
|
return critics;
|
|
1114
1042
|
}
|
|
1115
1043
|
|
|
1044
|
+
// src/holiday.ts
|
|
1045
|
+
var holiday_in_law = {
|
|
1046
|
+
"2025-01-01": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1047
|
+
"2025-01-26": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1048
|
+
"2025-01-28": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1049
|
+
"2025-01-29": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1050
|
+
"2025-01-30": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1051
|
+
"2025-01-31": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1052
|
+
"2025-02-01": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1053
|
+
"2025-02-02": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1054
|
+
"2025-02-03": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1055
|
+
"2025-02-04": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1056
|
+
"2025-02-08": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1057
|
+
"2025-04-04": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1058
|
+
"2025-04-05": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1059
|
+
"2025-04-06": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1060
|
+
"2025-04-27": { "type": "workday", "name": "\u52B3\u52A8\u8282\u8C03\u4F11\u73ED" },
|
|
1061
|
+
"2025-05-01": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1062
|
+
"2025-05-02": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1063
|
+
"2025-05-03": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1064
|
+
"2025-05-04": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1065
|
+
"2025-05-05": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1066
|
+
"2025-05-31": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1067
|
+
"2025-06-01": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1068
|
+
"2025-06-02": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1069
|
+
"2025-09-28": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1070
|
+
"2025-10-01": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1071
|
+
"2025-10-02": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1072
|
+
"2025-10-03": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1073
|
+
"2025-10-04": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1074
|
+
"2025-10-05": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1075
|
+
"2025-10-06": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1076
|
+
"2025-10-07": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1077
|
+
"2025-10-08": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1078
|
+
"2025-10-11": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1079
|
+
"2026-01-01": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1080
|
+
"2026-01-02": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1081
|
+
"2026-01-03": { "type": "holiday", "name": "\u5143\u65E6" },
|
|
1082
|
+
"2026-01-04": { "type": "workday", "name": "\u5143\u65E6\u8C03\u4F11\u73ED" },
|
|
1083
|
+
"2026-02-14": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1084
|
+
"2026-02-15": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1085
|
+
"2026-02-16": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1086
|
+
"2026-02-17": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1087
|
+
"2026-02-18": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1088
|
+
"2026-02-19": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1089
|
+
"2026-02-20": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1090
|
+
"2026-02-21": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1091
|
+
"2026-02-22": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1092
|
+
"2026-02-23": { "type": "holiday", "name": "\u6625\u8282" },
|
|
1093
|
+
"2026-02-28": { "type": "workday", "name": "\u6625\u8282\u8C03\u4F11\u73ED" },
|
|
1094
|
+
"2026-04-04": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1095
|
+
"2026-04-05": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1096
|
+
"2026-04-06": { "type": "holiday", "name": "\u6E05\u660E\u8282" },
|
|
1097
|
+
"2026-05-01": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1098
|
+
"2026-05-02": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1099
|
+
"2026-05-03": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1100
|
+
"2026-05-04": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1101
|
+
"2026-05-05": { "type": "holiday", "name": "\u52B3\u52A8\u8282" },
|
|
1102
|
+
"2026-05-09": { "type": "workday", "name": "\u52B3\u52A8\u8282\u8C03\u4F11\u73ED" },
|
|
1103
|
+
"2026-06-19": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1104
|
+
"2026-06-20": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1105
|
+
"2026-06-21": { "type": "holiday", "name": "\u7AEF\u5348\u8282" },
|
|
1106
|
+
"2026-09-20": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" },
|
|
1107
|
+
"2026-09-25": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1108
|
+
"2026-09-26": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1109
|
+
"2026-09-27": { "type": "holiday", "name": "\u4E2D\u79CB\u8282" },
|
|
1110
|
+
"2026-10-01": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1111
|
+
"2026-10-02": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1112
|
+
"2026-10-03": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1113
|
+
"2026-10-04": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1114
|
+
"2026-10-05": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1115
|
+
"2026-10-06": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1116
|
+
"2026-10-07": { "type": "holiday", "name": "\u56FD\u5E86\u8282" },
|
|
1117
|
+
"2026-10-10": { "type": "workday", "name": "\u56FD\u5E86\u8282\u8C03\u4F11\u73ED" }
|
|
1118
|
+
};
|
|
1119
|
+
function formatDateKey(date) {
|
|
1120
|
+
const y = date.getFullYear();
|
|
1121
|
+
const m = String(date.getMonth() + 1).padStart(2, "0");
|
|
1122
|
+
const d = String(date.getDate()).padStart(2, "0");
|
|
1123
|
+
return `${y}-${m}-${d}`;
|
|
1124
|
+
}
|
|
1125
|
+
function isHoliday(date) {
|
|
1126
|
+
const key = formatDateKey(date);
|
|
1127
|
+
return holiday_in_law[key]?.type === "holiday";
|
|
1128
|
+
}
|
|
1129
|
+
function isCompensatoryWorkday(date) {
|
|
1130
|
+
const key = formatDateKey(date);
|
|
1131
|
+
return holiday_in_law[key]?.type === "workday";
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1116
1134
|
// src/index.ts
|
|
1117
1135
|
var program = new Command();
|
|
1118
1136
|
function getCliVersion() {
|
|
@@ -1130,7 +1148,7 @@ function showLoading(message) {
|
|
|
1130
1148
|
let frameIdx = 0;
|
|
1131
1149
|
process.stdout.write("\x1B[?25l");
|
|
1132
1150
|
const timer = setInterval(() => {
|
|
1133
|
-
process.stdout.write(`\r${
|
|
1151
|
+
process.stdout.write(`\r${chalk.cyan(SPINNER_FRAMES[frameIdx])} ${chalk.yellow(message)} `);
|
|
1134
1152
|
frameIdx = (frameIdx + 1) % SPINNER_FRAMES.length;
|
|
1135
1153
|
}, 150);
|
|
1136
1154
|
return {
|
|
@@ -1145,57 +1163,57 @@ function showLoading(message) {
|
|
|
1145
1163
|
};
|
|
1146
1164
|
}
|
|
1147
1165
|
function printBanner(title) {
|
|
1148
|
-
console.log(
|
|
1149
|
-
console.log(
|
|
1150
|
-
console.log(
|
|
1166
|
+
console.log(chalk.cyan.bold("\n" + "=".repeat(50)));
|
|
1167
|
+
console.log(chalk.blue.bold(` \u{1F41F} FISH - ${title}`));
|
|
1168
|
+
console.log(chalk.cyan.bold("=".repeat(50) + "\n"));
|
|
1151
1169
|
}
|
|
1152
1170
|
function formatSlackIndex(fish) {
|
|
1153
1171
|
if (fish >= 90) {
|
|
1154
|
-
return
|
|
1172
|
+
return chalk.green(`${fish}% (\u7EC8\u6781\u6478\u9C7C \u{1F3A3})`);
|
|
1155
1173
|
} else if (fish >= 70) {
|
|
1156
|
-
return
|
|
1174
|
+
return chalk.green(`${fish}% (\u5408\u7406\u5212\u6C34 \u2615)`);
|
|
1157
1175
|
} else if (fish >= 40) {
|
|
1158
|
-
return
|
|
1176
|
+
return chalk.yellow(`${fish}% (\u6B63\u5E38\u8425\u4E1A \u{1F4BB})`);
|
|
1159
1177
|
} else {
|
|
1160
|
-
return
|
|
1178
|
+
return chalk.red(`${fish}% (\u706B\u529B\u5168\u5F00 \u{1F525})`);
|
|
1161
1179
|
}
|
|
1162
1180
|
}
|
|
1163
1181
|
function formatNightOwlIndex(nightOwl) {
|
|
1164
1182
|
if (nightOwl >= 60) {
|
|
1165
|
-
return
|
|
1183
|
+
return chalk.red.bold(`${nightOwl}% (\u4FEE\u4ED9\u5927\u4F6C \u{1F9D9})`);
|
|
1166
1184
|
} else if (nightOwl >= 30) {
|
|
1167
|
-
return
|
|
1185
|
+
return chalk.red(`${nightOwl}% (\u591C\u732B\u51FA\u6CA1 \u{1F989})`);
|
|
1168
1186
|
} else if (nightOwl >= 10) {
|
|
1169
|
-
return
|
|
1187
|
+
return chalk.yellow(`${nightOwl}% (\u5076\u5C14\u71AC\u591C \u{1F319})`);
|
|
1170
1188
|
} else {
|
|
1171
1189
|
return "";
|
|
1172
1190
|
}
|
|
1173
1191
|
}
|
|
1174
1192
|
function formatOvertimeIndex(fish) {
|
|
1175
1193
|
if (fish >= 80) {
|
|
1176
|
-
return
|
|
1194
|
+
return chalk.green(`${fish}% (\u5468\u672B\u6478\u9C7C \u{1F3A3})`);
|
|
1177
1195
|
} else if (fish >= 50) {
|
|
1178
|
-
return
|
|
1196
|
+
return chalk.yellow(`${fish}% (\u8F7B\u5FAE\u52A0\u73ED \u{1F319})`);
|
|
1179
1197
|
} else if (fish >= 20) {
|
|
1180
|
-
return
|
|
1198
|
+
return chalk.red(`${fish}% (\u5468\u672B\u7206\u809D \u{1F525})`);
|
|
1181
1199
|
} else {
|
|
1182
|
-
return
|
|
1200
|
+
return chalk.red.bold(`${fish}% (\u7EC8\u6781\u7206\u809D \u2620\uFE0F)`);
|
|
1183
1201
|
}
|
|
1184
1202
|
}
|
|
1185
1203
|
function formatCodeVolume(totalLines) {
|
|
1186
1204
|
if (totalLines <= 0) return "";
|
|
1187
1205
|
if (totalLines >= 1e3) {
|
|
1188
|
-
return
|
|
1206
|
+
return chalk.red.bold(`${totalLines}\u884C (\u4EE3\u7801\u6838\u7206 \u2622\uFE0F)`);
|
|
1189
1207
|
} else if (totalLines >= 500) {
|
|
1190
|
-
return
|
|
1208
|
+
return chalk.magenta(`${totalLines}\u884C (\u642C\u7816\u72C2\u9B54 \u{1F69A})`);
|
|
1191
1209
|
} else if (totalLines >= 200) {
|
|
1192
|
-
return
|
|
1210
|
+
return chalk.yellow(`${totalLines}\u884C (\u5927\u578B\u6539\u52A8 \u{1F9F1})`);
|
|
1193
1211
|
} else if (totalLines >= 80) {
|
|
1194
|
-
return
|
|
1212
|
+
return chalk.cyan(`${totalLines}\u884C (\u6B63\u5E38\u8425\u4E1A \u{1F4E6})`);
|
|
1195
1213
|
} else if (totalLines >= 20) {
|
|
1196
|
-
return
|
|
1214
|
+
return chalk.green(`${totalLines}\u884C (\u7F1D\u7F1D\u8865\u8865 \u{1F527})`);
|
|
1197
1215
|
} else {
|
|
1198
|
-
return
|
|
1216
|
+
return chalk.gray(`${totalLines}\u884C (\u5C0F\u4FEE\u5C0F\u8865 \u270F\uFE0F)`);
|
|
1199
1217
|
}
|
|
1200
1218
|
}
|
|
1201
1219
|
function getPersonalityTag(day) {
|
|
@@ -1203,18 +1221,18 @@ function getPersonalityTag(day) {
|
|
|
1203
1221
|
}
|
|
1204
1222
|
function colorizeTags(tagStr) {
|
|
1205
1223
|
const colorMap = {
|
|
1206
|
-
"\u{1F41F} \u6478\u9C7C\u5B97\u5E08":
|
|
1207
|
-
"\u{1F525} \u7206\u809D\u6218\u795E":
|
|
1208
|
-
"\u{1F319} \u6DF1\u591C\u4FEE\u4ED9\u8005":
|
|
1209
|
-
"\u{1F9F1} \u52E4\u6073\u642C\u7816\u4EBA":
|
|
1210
|
-
"\u{1F4A5} \u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458":
|
|
1211
|
-
"\u{1F3F7}\uFE0F PPT \u67B6\u6784\u5E08":
|
|
1212
|
-
"\u{1F3F7}\uFE0F \u683C\u5F0F\u5316\u5927\u5E08":
|
|
1213
|
-
"\u{1F4AC} Git \u804A\u5929\u8FBE\u4EBA":
|
|
1214
|
-
"\u{1F319} \u6DF1\u591C\u523A\u5BA2":
|
|
1215
|
-
"\u{1F434} \u751F\u4EA7\u961F\u7684\u9A74":
|
|
1216
|
-
"\u{1F41F} \u6478\u9C7C\u4ED9\u4EBA":
|
|
1217
|
-
"\u{1F41F} \u4ECA\u65E5\u6682\u65E0\u4EE3\u7801\u6D3B\u52A8":
|
|
1224
|
+
"\u{1F41F} \u6478\u9C7C\u5B97\u5E08": chalk.green,
|
|
1225
|
+
"\u{1F525} \u7206\u809D\u6218\u795E": chalk.red.bold,
|
|
1226
|
+
"\u{1F319} \u6DF1\u591C\u4FEE\u4ED9\u8005": chalk.red,
|
|
1227
|
+
"\u{1F9F1} \u52E4\u6073\u642C\u7816\u4EBA": chalk.yellow,
|
|
1228
|
+
"\u{1F4A5} \u4E00\u628A\u68AD\u54C8\u578B\u7A0B\u5E8F\u5458": chalk.magenta,
|
|
1229
|
+
"\u{1F3F7}\uFE0F PPT \u67B6\u6784\u5E08": chalk.blue,
|
|
1230
|
+
"\u{1F3F7}\uFE0F \u683C\u5F0F\u5316\u5927\u5E08": chalk.cyan,
|
|
1231
|
+
"\u{1F4AC} Git \u804A\u5929\u8FBE\u4EBA": chalk.greenBright,
|
|
1232
|
+
"\u{1F319} \u6DF1\u591C\u523A\u5BA2": chalk.redBright,
|
|
1233
|
+
"\u{1F434} \u751F\u4EA7\u961F\u7684\u9A74": chalk.yellowBright,
|
|
1234
|
+
"\u{1F41F} \u6478\u9C7C\u4ED9\u4EBA": chalk.green.bold,
|
|
1235
|
+
"\u{1F41F} \u4ECA\u65E5\u6682\u65E0\u4EE3\u7801\u6D3B\u52A8": chalk.green
|
|
1218
1236
|
};
|
|
1219
1237
|
const sortedKeys = Object.keys(colorMap).sort((a, b) => b.length - a.length);
|
|
1220
1238
|
let result = tagStr;
|
|
@@ -1252,11 +1270,11 @@ function colorizeFishRow(row) {
|
|
|
1252
1270
|
if (isNaN(val)) {
|
|
1253
1271
|
result += chunk;
|
|
1254
1272
|
} else if (val >= 80) {
|
|
1255
|
-
result +=
|
|
1273
|
+
result += chalk.green(chunk);
|
|
1256
1274
|
} else if (val >= 40) {
|
|
1257
|
-
result +=
|
|
1275
|
+
result += chalk.yellow(chunk);
|
|
1258
1276
|
} else {
|
|
1259
|
-
result +=
|
|
1277
|
+
result += chalk.red(chunk);
|
|
1260
1278
|
}
|
|
1261
1279
|
}
|
|
1262
1280
|
return result;
|
|
@@ -1277,61 +1295,61 @@ function randomPick(arr) {
|
|
|
1277
1295
|
return arr[Math.floor(Math.random() * arr.length)];
|
|
1278
1296
|
}
|
|
1279
1297
|
var COMMENT_POOLS = {
|
|
1280
|
-
"0-2": { color:
|
|
1298
|
+
"0-2": { color: chalk.red, tags: [
|
|
1281
1299
|
"\u670D\u52A1\u5668\u548C\u4F60\uFF0C\u603B\u5F97\u6709\u4E00\u4E2A\u7761\u89C9 \u{1F635}\u200D\u{1F4AB}",
|
|
1282
1300
|
"\u591C\u732B\u4FEE\u4ED9 \u{1F9D9}",
|
|
1283
1301
|
"\u8FD9\u63D0\u4EA4\u4E0D\u50CF\u5DE5\u4F5C\uFF0C\u50CF\u62A5\u590D\u4EE3\u7801 \u{1F608}",
|
|
1284
1302
|
"\u6DF1\u591C\u4FEE\u4ED9\u578B\u7A0B\u5E8F\u5458 \u{1F319}"
|
|
1285
1303
|
] },
|
|
1286
|
-
"3-5": { color:
|
|
1304
|
+
"3-5": { color: chalk.redBright, tags: [
|
|
1287
1305
|
"\u960E\u738B\uFF1A\u600E\u4E48\u53C8\u662F\u4F60\uFF1F\u{1F47B}",
|
|
1288
1306
|
"\u751F\u7269\u949F\u5DF2\u9635\u4EA1 \u2620\uFE0F",
|
|
1289
1307
|
"\u54E5\uFF0C\u4F60\u662F\u4F4F\u516C\u53F8\u4E86\u5417 \u{1F3E2}",
|
|
1290
1308
|
"\u9E21\u9E23\u5373\u8D77\u578B\u725B\u9A6C \u{1F414}"
|
|
1291
1309
|
] },
|
|
1292
|
-
"6-8": { color:
|
|
1310
|
+
"6-8": { color: chalk.gray, tags: [
|
|
1293
1311
|
"\u9E21\u90FD\u6CA1\u8D77\uFF0C\u4F60\u5148\u4E0A\u73ED\u4E86 \u{1F414}",
|
|
1294
1312
|
"\u5929\u9009\u725B\u9A6C\u5DF2\u4E0A\u7EBF \u{1F402}",
|
|
1295
1313
|
"\u7206\u809D\u542F\u52A8\u6210\u529F \u{1F680}",
|
|
1296
1314
|
"\u65E9\u8D77\u7684 commit \u6709 bug \u5403 \u{1F41B}"
|
|
1297
1315
|
] },
|
|
1298
|
-
"9-11": { color:
|
|
1316
|
+
"9-11": { color: chalk.yellow, tags: [
|
|
1299
1317
|
"\u5047\u88C5\u5F88\u5FD9\uFF0C\u5176\u5B9E\u5728\u7B49\u5348\u996D \u{1F371}",
|
|
1300
1318
|
"\u6668\u95F4coding \u2615",
|
|
1301
1319
|
"\u6B63\u5E38\u4EBA\u7C7B\u5DE5\u4F5C\u65F6\u95F4 \u2705",
|
|
1302
1320
|
"\u4E0A\u5348\u8868\u6F14\u578B\u9009\u624B \u{1F680}"
|
|
1303
1321
|
] },
|
|
1304
|
-
"12-13": { color:
|
|
1322
|
+
"12-13": { color: chalk.green, tags: [
|
|
1305
1323
|
"\u5DE5\u4F4D\u5403\u996D\uFF0C\u7075\u9B42\u7EED\u547D \u{1F50B}",
|
|
1306
1324
|
"\u5E72\u996D\u662F\u7B2C\u4E00\u751F\u4EA7\u529B \u{1F35A}",
|
|
1307
1325
|
"\u4E00\u8FB9\u5403\u996D\u4E00\u8FB9 commit \u{1F35C}",
|
|
1308
1326
|
"\u5E72\u996D\u7EED\u547D\u578B\u5DE5\u7A0B\u5E08 \u{1F371}"
|
|
1309
1327
|
] },
|
|
1310
|
-
"14-15": { color:
|
|
1328
|
+
"14-15": { color: chalk.cyan, tags: [
|
|
1311
1329
|
"\u5348\u7761\u672A\u9192\uFF0C\u4EBA\u5DF2\u5F00\u5DE5 \u{1F62A}",
|
|
1312
1330
|
"CPU \u91CD\u542F\u4E2D \u{1F504}",
|
|
1313
1331
|
// '午觉没睡成,拿代码出气 💢',
|
|
1314
1332
|
"\u5348\u540E\u7075\u9B42\u51FA\u7A8D\u8005 \u{1F47B}"
|
|
1315
1333
|
] },
|
|
1316
|
-
"16-17": { color:
|
|
1334
|
+
"16-17": { color: chalk.cyanBright, tags: [
|
|
1317
1335
|
"\u5F00\u59CB\u601D\u8003\u4ECA\u665A\u5403\u4EC0\u4E48 \u{1F373}",
|
|
1318
1336
|
"\u7075\u9B42\u5DF2\u4E0B\u73ED \u{1F47B}",
|
|
1319
1337
|
"\u4E34\u8FD1\u4E0B\u73ED\u7A81\u7136\u52E4\u594B \u{1F914}",
|
|
1320
1338
|
"\u7B49\u4E0B\u73ED\u89C2\u5BDF\u5458 \u{1F375}"
|
|
1321
1339
|
] },
|
|
1322
|
-
"18-20": { color:
|
|
1340
|
+
"18-20": { color: chalk.magenta, tags: [
|
|
1323
1341
|
"\u52A0\u73ED\u662F\u4E0D\u53EF\u80FD\u4E3B\u52A8\u52A0\u73ED\u7684 \u{1F4BC}",
|
|
1324
1342
|
"\u5DE5\u4F4D\u5C01\u5370\u89E3\u9664 \u{1F513}",
|
|
1325
1343
|
"\u767D\u5929\u5728\u5F00\u4F1A\uFF0C\u665A\u4E0A\u771F\u5E72\u6D3B \u{1F4BB}",
|
|
1326
1344
|
"\u81EA\u613F\uFF08\u88AB\u8FEB\uFF09\u52A0\u73ED\u4EBA \u{1F4AA}"
|
|
1327
1345
|
] },
|
|
1328
|
-
"21-22": { color:
|
|
1346
|
+
"21-22": { color: chalk.magentaBright, tags: [
|
|
1329
1347
|
"\u8001\u677F\u4E0B\u73ED\u4E86\uFF0C\u4F60\u8FD8\u6CA1\u4E0B\u7EBF \u{1F62D}",
|
|
1330
1348
|
"\u52A0\u73ED\u4ED9\u4EBA\u6E21\u52AB\u4E2D \u26A1",
|
|
1331
1349
|
"\u4ECA\u65E5\u6700\u540E\u4E00\u4E2A commit\uFF08\u9A97\u81EA\u5DF1\uFF09\u{1F921}",
|
|
1332
1350
|
"\u5927\u798F\u62A5\u65F6\u95F4 \u{1F525}"
|
|
1333
1351
|
] },
|
|
1334
|
-
"23": { color:
|
|
1352
|
+
"23": { color: chalk.red, tags: [
|
|
1335
1353
|
"\u4EE3\u7801\u548C\u5934\u53D1\u4E00\u8D77\u6389\u5149\u4E2D \u{1F9D1}\u200D\u{1F9B2}",
|
|
1336
1354
|
"\u4ECA\u65E5 KPI\uFF1A\u6D3B\u7740\u5C31\u884C \u{1F60C}",
|
|
1337
1355
|
"\u7761\u5427\uFF0CGit \u4E0D\u4F1A\u8DD1 \u{1F6CC}",
|
|
@@ -1368,11 +1386,11 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1368
1386
|
const config = readConfig();
|
|
1369
1387
|
const hasGitLab = config.gitlabToken || config.gitlabs && config.gitlabs.length > 0;
|
|
1370
1388
|
if (!hasGit && config.projects.length === 0 && !hasGitLab) {
|
|
1371
|
-
console.log(
|
|
1372
|
-
console.log(
|
|
1373
|
-
console.log(` ${
|
|
1374
|
-
console.log(` ${
|
|
1375
|
-
console.log(` ${
|
|
1389
|
+
console.log(chalk.yellow(`\u26A0 \u63D0\u793A: \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u662F\u4E00\u4E2A Git \u4ED3\u5E93\u3002`));
|
|
1390
|
+
console.log(chalk.gray(`\u4F60\u53EF\u4EE5\u901A\u8FC7\u4EE5\u4E0B\u547D\u4EE4\u914D\u7F6E\u9879\u76EE\u6216 GitLab\uFF1A`));
|
|
1391
|
+
console.log(` ${chalk.cyan("fish config add <path>")} - \u624B\u52A8\u6DFB\u52A0\u672C\u5730\u4ED3\u5E93`);
|
|
1392
|
+
console.log(` ${chalk.cyan("fish config scan <dir>")} - \u81EA\u52A8\u626B\u63CF\u76EE\u5F55\u4E0B\u6240\u6709\u4ED3\u5E93`);
|
|
1393
|
+
console.log(` ${chalk.cyan("fish config gitlab <token> [host] [name]")} - \u914D\u7F6E GitLab \u4EE4\u724C\u4EE5\u8FDC\u7A0B\u540C\u6B65\u6240\u6709\u9879\u76EE
|
|
1376
1394
|
`);
|
|
1377
1395
|
}
|
|
1378
1396
|
}
|
|
@@ -1385,7 +1403,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1385
1403
|
const loading = showLoading("\u6B63\u5728\u6478\u904D\u6240\u6709\u4ED3\u5E93...");
|
|
1386
1404
|
const stats = await analyzeWeekly(projects, targetDate, source);
|
|
1387
1405
|
loading.stop();
|
|
1388
|
-
console.log(
|
|
1406
|
+
console.log(chalk.cyan.bold("\u{1F4C5} \u672C\u5468\u63D0\u4EA4\u8BE6\u60C5\uFF1A"));
|
|
1389
1407
|
stats.days.forEach((day, idx) => {
|
|
1390
1408
|
const isWeekend = idx >= 5;
|
|
1391
1409
|
const isFuture = idx > currentDayOfWeek;
|
|
@@ -1393,10 +1411,10 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1393
1411
|
return;
|
|
1394
1412
|
}
|
|
1395
1413
|
if (isFuture && day.commitsCount === 0) {
|
|
1396
|
-
console.log(` ${day.dayName}\uFF1A${
|
|
1414
|
+
console.log(` ${day.dayName}\uFF1A${chalk.gray("\u672A\u5230")}`);
|
|
1397
1415
|
} else {
|
|
1398
1416
|
const projStr = day.projects.length > 0 ? ` | ${day.projects.length}\u4E2A\u9879\u76EE${showProjects ? ` (${day.projects.join(", ")})` : ""}` : "";
|
|
1399
|
-
const commitStr = day.commitsCount > 0 ?
|
|
1417
|
+
const commitStr = day.commitsCount > 0 ? chalk.white.bold(`${day.commitsCount} \u6B21`) : "0 \u6B21";
|
|
1400
1418
|
const indices = [];
|
|
1401
1419
|
if (isWeekend) {
|
|
1402
1420
|
indices.push(`\u{1F4BC} \u52A0\u73ED\u6307\u6570: ${formatOvertimeIndex(day.fish)}`);
|
|
@@ -1417,7 +1435,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1417
1435
|
console.log(` ${day.dayName}\uFF1A${commitStr}${extraIndices}${projStr}${branchStr}${tagStr}`);
|
|
1418
1436
|
}
|
|
1419
1437
|
});
|
|
1420
|
-
console.log("\n" +
|
|
1438
|
+
console.log("\n" + chalk.gray("-".repeat(50)));
|
|
1421
1439
|
if (stats.totalCommits > 0) {
|
|
1422
1440
|
const activeDays = stats.days.filter((_, idx) => idx <= currentDayOfWeek);
|
|
1423
1441
|
const workingDays = activeDays.filter((d) => d.commitsCount > 0);
|
|
@@ -1429,7 +1447,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1429
1447
|
const sample = mostProductiveDays[0];
|
|
1430
1448
|
const isWeekend = sample.dayName === "\u5468\u516D" || sample.dayName === "\u5468\u65E5";
|
|
1431
1449
|
const label = isWeekend ? "\u{1F4BC} \u52A0\u73ED\u6307\u6570" : "\u{1F41F} \u6478\u9C7C\u6307\u6570";
|
|
1432
|
-
console.log(`\u{1F3C6} ${
|
|
1450
|
+
console.log(`\u{1F3C6} ${chalk.red.bold("\u6700\u52AA\u529B\u7684\u65E5\u5B50")}\uFF1A${names} | ${label}\uFF1A${sample.fish}%`);
|
|
1433
1451
|
}
|
|
1434
1452
|
}
|
|
1435
1453
|
const weekdayDays = activeDays.filter((d) => d.dayName !== "\u5468\u516D" && d.dayName !== "\u5468\u65E5");
|
|
@@ -1443,7 +1461,7 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1443
1461
|
if (maxFish >= 70 && filteredHappyDays.length > 0) {
|
|
1444
1462
|
const names = filteredHappyDays.map((d) => d.dayName).join("\u3001");
|
|
1445
1463
|
const sample = filteredHappyDays[0];
|
|
1446
|
-
console.log(`\u2615 ${
|
|
1464
|
+
console.log(`\u2615 ${chalk.green.bold("\u6700\u5FEB\u4E50\u7684\u65E5\u5B50")}\uFF1A${names} | \u{1F41F} \u6478\u9C7C\u6307\u6570\uFF1A${sample.fish}%`);
|
|
1447
1465
|
}
|
|
1448
1466
|
}
|
|
1449
1467
|
const weekendDays = activeDays.filter((d) => d.commitsCount > 0 && (d.dayName === "\u5468\u516D" || d.dayName === "\u5468\u65E5"));
|
|
@@ -1452,16 +1470,16 @@ async function runWeeklyReport(weeksAgo, source, showProjects = false) {
|
|
|
1452
1470
|
const painfulDays = weekendDays.filter((d) => d.fish === minFish);
|
|
1453
1471
|
const names = painfulDays.map((d) => d.dayName).join("\u3001");
|
|
1454
1472
|
const sample = painfulDays[0];
|
|
1455
|
-
console.log(`\u{1F62D} ${
|
|
1473
|
+
console.log(`\u{1F62D} ${chalk.magenta.bold("\u6700\u75DB\u82E6\u7684\u65E5\u5B50")}\uFF1A${names} | \u{1F4BC} \u52A0\u73ED\u6307\u6570\uFF1A${sample.fish}%`);
|
|
1456
1474
|
}
|
|
1457
|
-
console.log(
|
|
1475
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1458
1476
|
const avgNightStr = stats.averageNightOwl > 0 ? ` | \u{1F319} \u4FEE\u4ED9: ${stats.averageNightOwl}%` : "";
|
|
1459
|
-
console.log(
|
|
1460
|
-
console.log(
|
|
1461
|
-
console.log(`\u{1F916} ${
|
|
1462
|
-
console.log(
|
|
1477
|
+
console.log(chalk.cyan.bold(`\u{1F4CA} \u672C\u5468\u5747\u503C\uFF1A\u{1F41F} \u6478\u9C7C\u6307\u6570 ${stats.averageFish}%${avgNightStr}`));
|
|
1478
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1479
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1480
|
+
console.log(chalk.white(getAICritic(stats)));
|
|
1463
1481
|
} else {
|
|
1464
|
-
console.log(
|
|
1482
|
+
console.log(chalk.yellow("\u{1F4A1} \u672C\u65F6\u95F4\u6BB5\u5185\u4F60\u8FD8\u6CA1\u63D0\u4EA4\u8FC7\u4EFB\u4F55\u4EE3\u7801\uFF01\u5B8C\u7F8E\u7684\u85AA\u6C34\u5C0F\u5077\u3002\u6216\u8005\u68C0\u67E5\u4F60\u7684\u914D\u7F6E\u5427\uFF01"));
|
|
1465
1483
|
}
|
|
1466
1484
|
console.log("");
|
|
1467
1485
|
}
|
|
@@ -1481,26 +1499,26 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1481
1499
|
const stats = await analyzeMonthly(projects, targetDate, source);
|
|
1482
1500
|
loading.stop();
|
|
1483
1501
|
if (stats.totalCommits === 0) {
|
|
1484
|
-
console.log(
|
|
1502
|
+
console.log(chalk.yellow("\u{1F4A1} \u672C\u6708\u5728\u6B64\u4ED3\u5E93\u6682\u672A\u53D1\u73B0\u4EFB\u4F55 Git \u63D0\u4EA4\u6570\u636E\u3002\n"));
|
|
1485
1503
|
return;
|
|
1486
1504
|
}
|
|
1487
1505
|
const { fix, feat, chore, other } = stats.categories;
|
|
1488
1506
|
const total = fix + feat + chore + other;
|
|
1489
|
-
console.log(
|
|
1507
|
+
console.log(chalk.cyan.bold("\u{1F4C5} \u672C\u6708\u4E3B\u8981\u8D21\u732E\u5360\u6BD4 (\u57FA\u4E8E Commit Message \u6B63\u5219\u5F52\u7C7B)\uFF1A"));
|
|
1490
1508
|
function drawRow(label, count, colorFn) {
|
|
1491
1509
|
const percentage = total > 0 ? Math.round(count / total * 100) : 0;
|
|
1492
1510
|
const barWidth = 15;
|
|
1493
1511
|
const filled = Math.round(percentage / 100 * barWidth);
|
|
1494
1512
|
const empty = barWidth - filled;
|
|
1495
|
-
const barStr = colorFn("\u25A0".repeat(filled)) +
|
|
1496
|
-
console.log(` - ${label}\uFF1A[${barStr}] ${
|
|
1513
|
+
const barStr = colorFn("\u25A0".repeat(filled)) + chalk.gray("\u25A1".repeat(empty));
|
|
1514
|
+
console.log(` - ${label}\uFF1A[${barStr}] ${chalk.bold(percentage + "%")} (${count} \u6B21)`);
|
|
1497
1515
|
}
|
|
1498
|
-
drawRow("\u4FEE bug (fix) ", fix,
|
|
1499
|
-
drawRow("\u65B0\u529F\u80FD (feat) ", feat,
|
|
1500
|
-
drawRow("\u6742\u52A1\u4E0E\u6587\u6863 (chore) ", chore,
|
|
1501
|
-
drawRow("\u5176\u4ED6\u63D0\u4EA4 (other) ", other,
|
|
1516
|
+
drawRow("\u4FEE bug (fix) ", fix, chalk.red);
|
|
1517
|
+
drawRow("\u65B0\u529F\u80FD (feat) ", feat, chalk.green);
|
|
1518
|
+
drawRow("\u6742\u52A1\u4E0E\u6587\u6863 (chore) ", chore, chalk.yellow);
|
|
1519
|
+
drawRow("\u5176\u4ED6\u63D0\u4EA4 (other) ", other, chalk.gray);
|
|
1502
1520
|
if (stats.dailyIndices && stats.dailyIndices.length > 0) {
|
|
1503
|
-
console.log("\n" +
|
|
1521
|
+
console.log("\n" + chalk.cyan.bold("\u{1F4C5} \u6BCF\u65E5\u6478\u9C7C\u6307\u6570\u6982\u89C8\uFF1A"));
|
|
1504
1522
|
const monthLabel = `${targetDate.getMonth() + 1}\u6708`;
|
|
1505
1523
|
const COL_WIDTH = 8;
|
|
1506
1524
|
const weekHeaders = ["\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D", "\u5468\u65E5"];
|
|
@@ -1509,7 +1527,7 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1509
1527
|
const lines = [];
|
|
1510
1528
|
let dateRow = "";
|
|
1511
1529
|
let fishRow = "";
|
|
1512
|
-
lines.push(
|
|
1530
|
+
lines.push(chalk.gray(weekHeaders.map((d) => visualPad(d, COL_WIDTH)).join("").trimEnd()));
|
|
1513
1531
|
for (let i = 0; i < firstDayOffset; i++) {
|
|
1514
1532
|
dateRow += visualPad("", COL_WIDTH);
|
|
1515
1533
|
fishRow += visualPad("", COL_WIDTH);
|
|
@@ -1518,10 +1536,23 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1518
1536
|
const dateRaw = `${monthLabel}${d.day}\u65E5`;
|
|
1519
1537
|
const fishRaw = `${d.fish}%`;
|
|
1520
1538
|
const columnIndex = (firstDayOffset + d.day - 1) % 7;
|
|
1521
|
-
|
|
1539
|
+
const dateObj = new Date(targetDate.getFullYear(), targetDate.getMonth(), d.day);
|
|
1540
|
+
let suffix = "";
|
|
1541
|
+
let suffixPlain = "";
|
|
1542
|
+
if (isHoliday(dateObj)) {
|
|
1543
|
+
suffix = chalk.green("\u2022");
|
|
1544
|
+
suffixPlain = "\u2022";
|
|
1545
|
+
} else if (isCompensatoryWorkday(dateObj)) {
|
|
1546
|
+
suffix = chalk.red("!");
|
|
1547
|
+
suffixPlain = "!";
|
|
1548
|
+
}
|
|
1549
|
+
const plainText = dateRaw + suffixPlain;
|
|
1550
|
+
const vw = visualWidth(plainText);
|
|
1551
|
+
const padding = vw < COL_WIDTH ? " ".repeat(COL_WIDTH - vw) : "";
|
|
1552
|
+
dateRow += dateRaw + suffix + padding;
|
|
1522
1553
|
fishRow += visualPad(fishRaw, COL_WIDTH);
|
|
1523
1554
|
if (columnIndex === 6 || d === stats.dailyIndices[stats.dailyIndices.length - 1]) {
|
|
1524
|
-
lines.push(
|
|
1555
|
+
lines.push(chalk.gray(dateRow.trimEnd()));
|
|
1525
1556
|
fishRow = colorizeFishRow(fishRow);
|
|
1526
1557
|
lines.push(fishRow);
|
|
1527
1558
|
lines.push("");
|
|
@@ -1533,23 +1564,10 @@ async function runMonthlyReport(monthsAgo, source) {
|
|
|
1533
1564
|
for (const l of lines) {
|
|
1534
1565
|
console.log(` ${l}`);
|
|
1535
1566
|
}
|
|
1536
|
-
const dailyWithCommits = stats.dailyIndices.filter((d) => d.commitsCount > 0);
|
|
1537
|
-
if (dailyWithCommits.length > 0) {
|
|
1538
|
-
const mostFish = [...dailyWithCommits].sort((a, b) => b.fish - a.fish)[0];
|
|
1539
|
-
const mostWork = [...dailyWithCommits].sort((a, b) => a.fish - b.fish)[0];
|
|
1540
|
-
if (mostFish.fish >= 75) {
|
|
1541
|
-
console.log(chalk2.green(`
|
|
1542
|
-
\u{1F3A3} \u6478\u9C7C\u738B: ${monthLabel}${mostFish.day}\u65E5 \u2192 \u6478\u9C7C\u6307\u6570 ${mostFish.fish}%` + (mostFish.tags.length > 0 ? ` ${mostFish.tags.join(" ")}` : "")));
|
|
1543
|
-
}
|
|
1544
|
-
if (mostWork.fish <= 40) {
|
|
1545
|
-
console.log(chalk2.red(`
|
|
1546
|
-
\u{1F525} \u7206\u809D\u738B: ${monthLabel}${mostWork.day}\u65E5 \u2192 \u6478\u9C7C\u6307\u6570 ${mostWork.fish}%` + (mostWork.tags.length > 0 ? ` ${mostWork.tags.join(" ")}` : "")));
|
|
1547
|
-
}
|
|
1548
|
-
}
|
|
1549
1567
|
}
|
|
1550
|
-
console.log("\n" +
|
|
1551
|
-
console.log(`\u{1F916} ${
|
|
1552
|
-
console.log(
|
|
1568
|
+
console.log("\n" + chalk.gray("-".repeat(50)));
|
|
1569
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1570
|
+
console.log(chalk.white(getAICriticForMonth(stats)));
|
|
1553
1571
|
console.log("");
|
|
1554
1572
|
}
|
|
1555
1573
|
async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
@@ -1570,10 +1588,10 @@ async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
|
1570
1588
|
const loading = showLoading("\u6B63\u5728\u7EDF\u8BA1\u9879\u76EE\u7206\u809D\u7A0B\u5EA6...");
|
|
1571
1589
|
const stats = isMonth ? await analyzeMonthly(projects, targetDate, source) : await analyzeWeekly(projects, targetDate, source);
|
|
1572
1590
|
loading.stop();
|
|
1573
|
-
console.log(
|
|
1591
|
+
console.log(chalk.cyan.bold(`\u{1F4CA} \u5BF9\u5E94\u65F6\u6BB5\u9879\u76EE\u7206\u809D\u6392\u884C (${since.toLocaleDateString()} ~ ${until.toLocaleDateString()})`));
|
|
1574
1592
|
const ranked = stats.projectsRanked;
|
|
1575
1593
|
if (ranked.length === 0) {
|
|
1576
|
-
console.log(
|
|
1594
|
+
console.log(chalk.gray(" \u672C\u65F6\u6BB5\u6682\u65E0\u9879\u76EE\u63D0\u4EA4\u6570\u636E\u3002"));
|
|
1577
1595
|
} else {
|
|
1578
1596
|
const totalCommits = ranked.reduce((sum, p) => sum + p.count, 0);
|
|
1579
1597
|
let hasPrimaryProject = false;
|
|
@@ -1583,21 +1601,21 @@ async function runProjectReport(weeksAgo, source, isMonth = false) {
|
|
|
1583
1601
|
let suffix;
|
|
1584
1602
|
if (ratio >= 0.5 || N >= 30) {
|
|
1585
1603
|
if (!hasPrimaryProject) {
|
|
1586
|
-
suffix =
|
|
1604
|
+
suffix = chalk.red(" (\u4E3B\u529B\u642C\u7816\u5730 \u{1F9F1})");
|
|
1587
1605
|
hasPrimaryProject = true;
|
|
1588
1606
|
} else {
|
|
1589
|
-
suffix =
|
|
1607
|
+
suffix = chalk.red(" (\u9B42\u5F52\u4E4B\u5904\uFF0C\u4EE3\u7801\u5728\u8FD9\u5BB6\u5C31\u5728 \u{1F3E0})");
|
|
1590
1608
|
}
|
|
1591
1609
|
} else if (ratio >= 0.2 || N >= 14) {
|
|
1592
|
-
suffix =
|
|
1610
|
+
suffix = chalk.magenta(" (\u591A\u7EBF\u7A0B\u5206\u51FA\u6765\u7684\u6253\u5DE5\u9B42 \u{1F9F5})");
|
|
1593
1611
|
} else if (ratio >= 0.15 || N >= 5) {
|
|
1594
|
-
suffix =
|
|
1612
|
+
suffix = chalk.yellow(" (\u5076\u5C14\u4E0A\u53BB\u70B9\u4E00\u4E0B \u{1F41F})");
|
|
1595
1613
|
} else if (N === 1) {
|
|
1596
|
-
suffix =
|
|
1614
|
+
suffix = chalk.cyan(" (\u6D4B\u5B8C\u5C31\u8DD1\uFF0C\u7EAF\u7CB9\u8DEF\u8FC7 \u{1F6AC})");
|
|
1597
1615
|
} else {
|
|
1598
|
-
suffix =
|
|
1616
|
+
suffix = chalk.gray(" (\u8FB9\u7F18\u6302\u673A\u9879\u76EE \u{1F4A4})");
|
|
1599
1617
|
}
|
|
1600
|
-
console.log(` ${idx + 1}. ${
|
|
1618
|
+
console.log(` ${idx + 1}. ${chalk.bold.white(proj.name)}: ${chalk.cyan(N + " \u6B21\u63D0\u4EA4")}${suffix}`);
|
|
1601
1619
|
});
|
|
1602
1620
|
}
|
|
1603
1621
|
console.log("");
|
|
@@ -1622,14 +1640,14 @@ async function runTimeReport(offset, source, isMonth) {
|
|
|
1622
1640
|
loading.stop();
|
|
1623
1641
|
const maxCount = Math.max(...hours.map((h) => h.count));
|
|
1624
1642
|
const barScale = maxCount > 0 ? 30 / maxCount : 1;
|
|
1625
|
-
console.log(
|
|
1643
|
+
console.log(chalk.cyan.bold(`\u{1F552} \u5BF9\u5E94\u65F6\u6BB5 24 \u5C0F\u65F6 commit \u9891\u6B21\u5206\u5E03\u56FE\uFF1A`));
|
|
1626
1644
|
hours.forEach(({ hour, count }) => {
|
|
1627
1645
|
const barLength = Math.round(count * barScale);
|
|
1628
1646
|
const barStr = "\u2588".repeat(barLength);
|
|
1629
1647
|
const hourStr = String(hour).padStart(2, "0") + ":00";
|
|
1630
1648
|
let tag = count > 0 ? getHourTag(hour) : "";
|
|
1631
|
-
const barColorStr = count > 0 ?
|
|
1632
|
-
console.log(` ${
|
|
1649
|
+
const barColorStr = count > 0 ? chalk.blue(barStr.padEnd(30, " ")) : chalk.gray("".padEnd(30, " "));
|
|
1650
|
+
console.log(` ${chalk.bold.cyan(hourStr)} | [${barColorStr}] ${chalk.white(count + " \u6B21")}${tag}`);
|
|
1633
1651
|
});
|
|
1634
1652
|
console.log("");
|
|
1635
1653
|
}
|
|
@@ -1646,19 +1664,19 @@ async function runGhostReport(weeksAgo, source) {
|
|
|
1646
1664
|
const ghosts = await getGhostCommits(projects, since, until, source);
|
|
1647
1665
|
loading.stop();
|
|
1648
1666
|
if (ghosts.length === 0) {
|
|
1649
|
-
console.log(
|
|
1650
|
-
console.log(
|
|
1667
|
+
console.log(chalk.green.bold("\u{1F389} \u606D\u559C\uFF01\u672C\u65F6\u95F4\u6BB5\u5185\u672A\u68C0\u6D4B\u5230\u4EFB\u4F55\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4\u3002"));
|
|
1668
|
+
console.log(chalk.white("\u4F60\u7684\u53D1\u9645\u7EBF\u5341\u5206\u5B89\u5168\uFF0C\u5927\u798F\u62A5\u5DF2\u88AB\u65E0\u60C5\u62D2\u6536\uFF0C\u7761\u7720\u5065\u5EB7\u5F97\u5206\uFF1A100 \u5206\uFF01\n"));
|
|
1651
1669
|
} else {
|
|
1652
|
-
console.log(
|
|
1653
|
-
console.log(
|
|
1654
|
-
console.log(
|
|
1670
|
+
console.log(chalk.red.bold(`\u26A0\uFE0F \u8B66\u544A\uFF1A\u672C\u65F6\u95F4\u6BB5\u5185\u5171\u68C0\u6D4B\u5230 ${ghosts.length} \u6B21\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4\uFF01`));
|
|
1671
|
+
console.log(chalk.gray("\u6DF1\u591C\u7684 Commit \u95EA\u70C1\u7740\u7EFF\u5149\uFF0C\u6BCF\u4E00\u884C\u90FD\u662F\u7ED9\u8001\u677F\u5E93\u91CC\u5357\u52A0\u6CB9\u7684\u6C57\u6C34\u3002"));
|
|
1672
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1655
1673
|
ghosts.forEach((c) => {
|
|
1656
|
-
console.log(` - [${
|
|
1657
|
-
console.log(` \u{1F4AC} ${
|
|
1674
|
+
console.log(` - [${chalk.yellow(c.project)}] ${chalk.cyan(c.date.slice(0, 19).replace("T", " "))} (${chalk.gray(c.hash)})`);
|
|
1675
|
+
console.log(` \u{1F4AC} ${chalk.italic.white(c.message)}`);
|
|
1658
1676
|
});
|
|
1659
|
-
console.log(
|
|
1660
|
-
console.log(`\u{1F916} ${
|
|
1661
|
-
console.log(
|
|
1677
|
+
console.log(chalk.gray("-".repeat(50)));
|
|
1678
|
+
console.log(`\u{1F916} ${chalk.magenta.bold("\u9510\u8BC4")}\uFF1A`);
|
|
1679
|
+
console.log(chalk.red("\u547D\u662F\u81EA\u5DF1\u7684\uFF0C\u5927\u798F\u62A5\u7559\u7ED9\u8001\u677F\u5427\uFF01\u8D76\u7D27\u7761\u89C9\uFF0C\u4FDD\u547D\u8981\u7D27\uFF01\n"));
|
|
1662
1680
|
}
|
|
1663
1681
|
}
|
|
1664
1682
|
program.name("fish").description("\u{1F41F} Git \u6478\u9C7C & \u7206\u809D\u5206\u6790\u5668 CLI").version(getCliVersion()).option("-m, --month [monthsAgo]", "\u67E5\u770B\u6478\u9C7C/\u7206\u809D\u6708\u62A5 (\u9ED8\u8BA4 0 \u4E3A\u672C\u6708\uFF0C1 \u4E3A\u4E0A\u6708\uFF0C2 \u4E3A\u4E0A\u4E0A\u6708...)").option("-p, --project", "\u67E5\u770B\u9879\u76EE\u7206\u809D\u6392\u884C").option("-t, --time", "\u67E5\u770B\u9EC4\u91D1\u6478\u9C7C\u65F6\u95F4\u6BB5 analysis (24\u5C0F\u65F6\u5206\u5E03)").option("-g, --ghost", "\u68C0\u6D4B\u6DF1\u591C\u5E7D\u7075\u63D0\u4EA4").option("-w, --weeks-ago <number>", "\u67E5\u8BE2\u51E0\u5468\u524D/\u6708\u524D\u7684\u62A5\u544A (\u9ED8\u8BA4 0\uFF0C\u5373\u672C\u5468/\u672C\u6708)", "0").option("-P, --show-projects", "\u663E\u793A\u5177\u4F53\u9879\u76EE\u540D\u79F0\uFF08\u9ED8\u8BA4\u9690\u85CF\uFF09").option("-s, --source <source>", "\u9009\u62E9\u8981\u67E5\u8BE2\u7684 GitLab \u6570\u636E\u6E90 (\u5E8F\u53F7\u6216\u522B\u540D/host)").action(async (options) => {
|
|
@@ -1687,45 +1705,45 @@ var configCmd = program.command("config").description("\u7BA1\u7406\u76D1\u63A7\
|
|
|
1687
1705
|
configCmd.command("add <path>").description("\u624B\u52A8\u6DFB\u52A0\u4E00\u4E2A\u672C\u5730 Git \u4ED3\u5E93\u8DEF\u5F84").action((projPath) => {
|
|
1688
1706
|
const res = addProject(projPath);
|
|
1689
1707
|
if (res.success) {
|
|
1690
|
-
console.log(
|
|
1708
|
+
console.log(chalk.green(`\u2714 ${res.message}`));
|
|
1691
1709
|
} else {
|
|
1692
|
-
console.log(
|
|
1710
|
+
console.log(chalk.red(`\u2718 ${res.message}`));
|
|
1693
1711
|
}
|
|
1694
1712
|
});
|
|
1695
1713
|
configCmd.command("remove <path>").description("\u4ECE\u914D\u7F6E\u4E2D\u79FB\u9664\u4E00\u4E2A\u9879\u76EE\u8DEF\u5F84").action((projPath) => {
|
|
1696
1714
|
const res = removeProject(projPath);
|
|
1697
1715
|
if (res.success) {
|
|
1698
|
-
console.log(
|
|
1716
|
+
console.log(chalk.green(`\u2714 ${res.message}`));
|
|
1699
1717
|
} else {
|
|
1700
|
-
console.log(
|
|
1718
|
+
console.log(chalk.red(`\u2718 ${res.message}`));
|
|
1701
1719
|
}
|
|
1702
1720
|
});
|
|
1703
1721
|
configCmd.command("list").description("\u5217\u51FA\u5F53\u524D\u6240\u6709\u76D1\u63A7\u7684\u9879\u76EE\u4E0E GitLab \u914D\u7F6E").action(() => {
|
|
1704
1722
|
const config = readConfig();
|
|
1705
|
-
console.log(
|
|
1723
|
+
console.log(chalk.cyan.bold("\n\u{1F4C1} \u5F53\u524D\u76D1\u63A7\u7684\u672C\u5730\u9879\u76EE\u5217\u8868:"));
|
|
1706
1724
|
if (config.projects.length === 0) {
|
|
1707
|
-
console.log(
|
|
1725
|
+
console.log(chalk.gray(` (\u76EE\u524D\u672A\u914D\u7F6E\u672C\u5730\u9879\u76EE\uFF0C\u82E5\u65E0 GitLab \u8FDC\u7A0B\u5219\u9ED8\u8BA4\u626B\u63CF\u5F53\u524D\u76EE\u5F55: ${process.cwd()})`));
|
|
1708
1726
|
} else {
|
|
1709
1727
|
config.projects.forEach((p, idx) => {
|
|
1710
|
-
console.log(` ${idx + 1}. ${
|
|
1728
|
+
console.log(` ${idx + 1}. ${chalk.white(p)}`);
|
|
1711
1729
|
});
|
|
1712
1730
|
}
|
|
1713
|
-
console.log(
|
|
1731
|
+
console.log(chalk.cyan.bold("\n\u{1F98A} \u5F53\u524D\u914D\u7F6E\u7684 GitLab \u8FDC\u7A0B\u6E90:"));
|
|
1714
1732
|
const gitlabs = config.gitlabs || [];
|
|
1715
1733
|
if (gitlabs.length === 0) {
|
|
1716
|
-
console.log(
|
|
1734
|
+
console.log(chalk.gray(" (\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55 GitLab \u8FDC\u7A0B\u6E90)"));
|
|
1717
1735
|
} else {
|
|
1718
1736
|
gitlabs.forEach((g, idx) => {
|
|
1719
|
-
console.log(` ${idx + 1}. ${
|
|
1737
|
+
console.log(` ${idx + 1}. ${chalk.bold.white(g.name)} | Host: ${chalk.gray(g.host)}`);
|
|
1720
1738
|
});
|
|
1721
1739
|
}
|
|
1722
1740
|
console.log("");
|
|
1723
1741
|
});
|
|
1724
1742
|
configCmd.command("scan <dir>").description("\u81EA\u52A8\u626B\u63CF\u6307\u5B9A\u76EE\u5F55\u4E0B\u7684\u6240\u6709 Git \u4ED3\u5E93\u5E76\u6279\u91CF\u6DFB\u52A0").action((dir) => {
|
|
1725
|
-
console.log(
|
|
1743
|
+
console.log(chalk.cyan(`\u{1F50D} \u6B63\u5728\u626B\u63CF\u76EE\u5F55 ${dir} \u4E0B of Git \u4ED3\u5E93...`));
|
|
1726
1744
|
const repos = scanDirectory(dir);
|
|
1727
1745
|
if (repos.length === 0) {
|
|
1728
|
-
console.log(
|
|
1746
|
+
console.log(chalk.yellow(`\u26A0 \u672A\u5728 ${dir} \u4E0B\u53D1\u73B0\u4EFB\u4F55 Git \u4ED3\u5E93\u3002`));
|
|
1729
1747
|
return;
|
|
1730
1748
|
}
|
|
1731
1749
|
const config = readConfig();
|
|
@@ -1738,26 +1756,26 @@ configCmd.command("scan <dir>").description("\u81EA\u52A8\u626B\u63CF\u6307\u5B9
|
|
|
1738
1756
|
}
|
|
1739
1757
|
if (addedCount > 0) {
|
|
1740
1758
|
writeConfig(config);
|
|
1741
|
-
console.log(
|
|
1742
|
-
repos.forEach((r) => console.log(` - ${
|
|
1759
|
+
console.log(chalk.green(`\u2714 \u6210\u529F\u53D1\u73B0\u5E76\u6DFB\u52A0\u4E86 ${addedCount} \u4E2A\u65B0 Git \u4ED3\u5E93\uFF1A`));
|
|
1760
|
+
repos.forEach((r) => console.log(` - ${chalk.gray(r)}`));
|
|
1743
1761
|
} else {
|
|
1744
|
-
console.log(
|
|
1762
|
+
console.log(chalk.yellow(`\u26A0 \u626B\u63CF\u5230\u4E86 ${repos.length} \u4E2A\u4ED3\u5E93\uFF0C\u4F46\u90FD\u5DF2\u5728\u76D1\u63A7\u914D\u7F6E\u4E2D\u3002`));
|
|
1745
1763
|
}
|
|
1746
1764
|
});
|
|
1747
1765
|
configCmd.command("gitlab <token> [host] [name]").description("\u914D\u7F6E GitLab \u4E2A\u4EBA\u8BBF\u95EE\u4EE4\u724C(PAT)\u3001Host \u4E0E\u522B\u540D\uFF0C\u5F00\u542F GitLab \u8FDC\u7A0B\u626B\u63CF").action((token, host, name) => {
|
|
1748
1766
|
setGitLabConfig(token, host, name);
|
|
1749
|
-
console.log(
|
|
1767
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6210\u529F\u914D\u7F6E\u5E76\u4FDD\u5B58 GitLab \u8BBF\u95EE\u6E90\u3002`));
|
|
1750
1768
|
const targetHost = host || "https://gitlab.com";
|
|
1751
1769
|
const targetName = name || targetHost.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
1752
|
-
console.log(
|
|
1753
|
-
console.log(
|
|
1770
|
+
console.log(chalk.gray(`\u522B\u540D (Name): ${targetName}`));
|
|
1771
|
+
console.log(chalk.gray(`\u5730\u5740 (Host): ${targetHost}`));
|
|
1754
1772
|
});
|
|
1755
1773
|
configCmd.command("gitlab-clear [name_or_index]").description("\u6E05\u9664\u6307\u5B9A\u6216\u6240\u6709\u7684 GitLab \u8FDC\u7A0B\u626B\u63CF\u914D\u7F6E").action((nameOrIndex) => {
|
|
1756
1774
|
clearGitLabConfig(nameOrIndex);
|
|
1757
1775
|
if (nameOrIndex) {
|
|
1758
|
-
console.log(
|
|
1776
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6E05\u9664\u6307\u5B9A\u7684 GitLab \u8BBF\u95EE\u914D\u7F6E [${nameOrIndex}]\u3002`));
|
|
1759
1777
|
} else {
|
|
1760
|
-
console.log(
|
|
1778
|
+
console.log(chalk.green(`\u2714 \u5DF2\u6E05\u9664\u6240\u6709 GitLab \u8BBF\u95EE\u914D\u7F6E\u3002\u5DF2\u5173\u95ED GitLab \u8FDC\u7A0B\u626B\u63CF\u3002`));
|
|
1761
1779
|
}
|
|
1762
1780
|
});
|
|
1763
1781
|
program.parse(process.argv);
|