Repository navigation
Moo Fleet 0.1.46
本次更新
这一版的主体是一个新页面:跨仓库提交分析。前面几十个版本解决的都是「这个仓库现在什么状态」,这一版回答的是另一个问题——我到底在什么时间、写了多少、写在哪。数据全部来自本机已有的 git 仓库,不上传任何东西,也不要求额外配置。
从 0.1.36 到这一版,一共 24 个提交、77 个文件、约 1.25 万行新增;除了分析页,设置面板与工作区摘要也重做了一遍。
一、提交分析:把「写了什么」变成「什么时候写的」
分析页放在顶栏第三个入口。整页共用一个时间窗口,切换范围时所有卡片一起变,不会出现热力图看一年、构成条看全历史这种混口径。
- 提交热力图:日 × 周的网格,四档窗口(近 3 个月 / 近 6 个月 / 近一年 / 近两年)。格子的深浅按窗口内单日最大值分四档,不是绝对值——否则淡季整张图会全灰。窗口左侧边缘不足两周的残月不再抢占刻度位,月份标签是连续的。
- 提交时段:7 × 24 的星期 × 小时矩阵,按提交者本地时间统计。「凌晨三点在写代码」比「UTC 19:00」有用,所以不做时区归一化。
- 非上班时间:工作时段定为 08:30–12:00 与 13:30–18:00,其余(含午休)与周末全天计入。大数字是小时数,副行给折合多少个 8 小时工作日,下方三段构成条拆清晨 / 晚间 / 周末。
- 代码量:
--numstat逐文件统计增删行,剔除锁文件、.min.js、.map、node_modules与dist/build/coverage等产物目录,以及带「自动生成」标记的文件。合并提交不计。 - 仓库活跃度:按「最近一次提交距今」分 7 天内 / 8–30 天 / 31–90 天 / 91 天以上四档,并单列「从未提交」的数量。
- 排行:仓库与作者各一张,可在「提交数 / 增删行」之间切换。
- 作者归并:同一个人的不同写法会合成一条——同邮箱、姓名 token 完全相同、或短名是长名的前缀且不短于 4 个字符,三种关系取并集。显示名取出现最多的写法,其余进别名。
二、口径只有一个出处
时间窗口、工作时段、聚类阈值这些数字,全站只在一处定义(src/shared/report-window.ts 与 src/shared/work-window.ts),服务端算数、客户端写文案都引它。这不是洁癖:早先「近一年」的副标题写着「过去 52 周」,里面装的却是全历史总数,和紧挨着的卡片差 22%,就是因为两个地方各算各的。
扫描范围用的是 --branches --remotes --tags HEAD,而不是 --all——后者会把 refs/stash 与 refs/notes 也算进来,等于把草稿和笔记当成提交历史。
三、快,是因为只算该算的部分
第一版每次刷新都把全部仓库的提交重新扫一遍。现在:
- 提交历史按仓库缓存,切换时间范围只在内存里按日期过滤,不重跑
git log; - 代码量走增量:只对窗口内新增的提交补
--numstat,旧条目原样保留,窗口收窄时也不裁剪基线; - 页面每 60 秒轮询一次,同一请求并发时复用同一次扫描。
--shortstat 被否掉了:它看起来只是一次调用,实测耗时是 --numstat 的 24 倍(0.01 s → 0.24 s),放进轮询里等于持续占着 CPU。
四、可以只看一部分仓库
工具栏右侧是可搜索的仓库多选:输入关键字按「名称 / 分组 / 路径」过滤,支持全选与清空,选择结果记在本机。清空后是「一个都没选」,不是回退成全选——想看某个仓库时不必先反选 52 个。整页聚合、排行、构成条都跟着范围走。
五、这一版还顺手改了
- 设置面板重做:分组、层级与间距重新排过,选项不再挤成一列。
- 工作区摘要按语义着色:待推送、待拉取、有改动不再共用一个颜色,扫一眼能分清哪个是「要处理」、哪个只是「有变化」。
- 后端不再留孤儿进程:应用被强制结束或崩溃时,本地服务会自己退出,不再占着端口让下次启动挑到别的端口。
- 构建中间目录改成挪走:
dist/release/macos-*这类目录不再就地删除,先改名挪到release/.stale-*,避免一次删几十个文件把构建卡在中途。 - 工程:接入 ESLint 并清零 12 个依赖漏洞,UI 断言脚本入库(截图与验证共用同一份夹具)。
六、三回合审查修掉的问题
这一版在发布前做了三轮独立检查(业务代码 / 视觉 / 交互),修掉六处:
| 问题 | 表现 |
|---|---|
| 数字格式化进位越界 | 99,999,999 会显示成「10000 万」——没有这个单位 |
| 月份刻度固定丢一个月 | 近一年显示「10月 … 12月」,11 月凭空消失 |
| 超宽屏热力图不铺满 | 2304 宽下只占卡片 56%,右侧空出近一千像素 |
| 近两年横向滚动无提示 | 标题写着「近两年」,图却停在 8 月;现在溢出时停到最右端,延续的一侧渐隐 |
| 多选里「已选」反而更难读 | 勾中的仓库名被染成品牌绿,对比度 4.1:1,未选中的白名是 9.5:1 |
| 焦点环两种颜色 | 分段按钮用青柠绿,其余控件用品牌绿,同一页两种环 |
说明
- macOS 包为 ad-hoc 签名的内测包,未经公证;请用 DMG 内的「安装 Moo Fleet(内测)」,不要手动拖进「应用程序」(下载隔离属性会导致应用无法启动)。Apple Silicon 与 Intel 请选对应架构的 DMG。
- Windows 与 Linux 包未做代码签名,首次运行可能触发系统警告。
- 本版没有新增遥测。分析页只读本机 git 仓库,不发任何网络请求;唯一的对外请求仍是用户主动点击「检查更新」时读取一次公开的 releases 页面。
验证
- 类型检查、
vue-tsc、ESLint 与生产构建全部通过;119 个文件 / 1119 个用例全绿。 - 真机(53 个真实仓库,0 个读取失败):
sum(daily) = sum(hourly) = sum(byRepo) = sum(byAuthor) = 提交总数,三个时间范围逐项对得上;代码量在仓库维度与作者维度两侧求和相等;offHours = workday + weekend、early + lunch + evening = workday。 - 界面在 2304 / 1440 / 1354 / 1280 / 1024 五档宽度与五套主题下检查过,无横向溢出;键盘路径(打开选择器 → 搜索 → 上下移动 → 切换 → Esc 关闭并归还焦点)逐段实测。
- 失败与恢复:停掉本地服务后点刷新,3 次重试后出现「连不上 Moo Fleet 本地服务……下面仍是上一次成功统计的结果」,图表保留;服务恢复后点「重试」条幅消失。