tanmi-dock 0.10.0-beta → 1.0.4
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.md +26 -5
- package/dist/commands/calibrate.d.ts +10 -0
- package/dist/commands/calibrate.d.ts.map +1 -0
- package/dist/commands/calibrate.js +158 -0
- package/dist/commands/calibrate.js.map +1 -0
- package/dist/commands/check.d.ts +45 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +322 -101
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/clean.d.ts +2 -6
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +224 -209
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +56 -28
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/link.d.ts +8 -7
- package/dist/commands/link.d.ts.map +1 -1
- package/dist/commands/link.js +717 -221
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +277 -57
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +65 -41
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +182 -40
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/unavailable.d.ts.map +1 -1
- package/dist/commands/unavailable.js +7 -2
- package/dist/commands/unavailable.js.map +1 -1
- package/dist/commands/unlink.d.ts.map +1 -1
- package/dist/commands/unlink.js +43 -39
- package/dist/commands/unlink.js.map +1 -1
- package/dist/core/codepac.d.ts +44 -0
- package/dist/core/codepac.d.ts.map +1 -1
- package/dist/core/codepac.js +287 -5
- package/dist/core/codepac.js.map +1 -1
- package/dist/core/config.d.ts +3 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +7 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/linker.d.ts +7 -0
- package/dist/core/linker.d.ts.map +1 -1
- package/dist/core/linker.js +47 -0
- package/dist/core/linker.js.map +1 -1
- package/dist/core/parser.d.ts +30 -5
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +376 -57
- package/dist/core/parser.js.map +1 -1
- package/dist/core/registry.d.ts +11 -29
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +46 -113
- package/dist/core/registry.js.map +1 -1
- package/dist/core/space/calibration-executor.d.ts +16 -0
- package/dist/core/space/calibration-executor.d.ts.map +1 -0
- package/dist/core/space/calibration-executor.js +142 -0
- package/dist/core/space/calibration-executor.js.map +1 -0
- package/dist/core/space/calibration-planner.d.ts +5 -0
- package/dist/core/space/calibration-planner.d.ts.map +1 -0
- package/dist/core/space/calibration-planner.js +157 -0
- package/dist/core/space/calibration-planner.js.map +1 -0
- package/dist/core/space/cleanup-executor.d.ts +15 -0
- package/dist/core/space/cleanup-executor.d.ts.map +1 -0
- package/dist/core/space/cleanup-executor.js +188 -0
- package/dist/core/space/cleanup-executor.js.map +1 -0
- package/dist/core/space/cleanup-journal.d.ts +43 -0
- package/dist/core/space/cleanup-journal.d.ts.map +1 -0
- package/dist/core/space/cleanup-journal.js +96 -0
- package/dist/core/space/cleanup-journal.js.map +1 -0
- package/dist/core/space/cleanup-planner.d.ts +14 -0
- package/dist/core/space/cleanup-planner.d.ts.map +1 -0
- package/dist/core/space/cleanup-planner.js +166 -0
- package/dist/core/space/cleanup-planner.js.map +1 -0
- package/dist/core/space/cleanup-selection.d.ts +10 -0
- package/dist/core/space/cleanup-selection.d.ts.map +1 -0
- package/dist/core/space/cleanup-selection.js +84 -0
- package/dist/core/space/cleanup-selection.js.map +1 -0
- package/dist/core/space/estimator.d.ts +11 -0
- package/dist/core/space/estimator.d.ts.map +1 -0
- package/dist/core/space/estimator.js +142 -0
- package/dist/core/space/estimator.js.map +1 -0
- package/dist/core/space/inventory.d.ts +15 -0
- package/dist/core/space/inventory.d.ts.map +1 -0
- package/dist/core/space/inventory.js +587 -0
- package/dist/core/space/inventory.js.map +1 -0
- package/dist/core/space/meter.d.ts +5 -0
- package/dist/core/space/meter.d.ts.map +1 -0
- package/dist/core/space/meter.js +87 -0
- package/dist/core/space/meter.js.map +1 -0
- package/dist/core/space/migration-journal.d.ts +31 -0
- package/dist/core/space/migration-journal.d.ts.map +1 -0
- package/dist/core/space/migration-journal.js +121 -0
- package/dist/core/space/migration-journal.js.map +1 -0
- package/dist/core/space/service.d.ts +26 -0
- package/dist/core/space/service.d.ts.map +1 -0
- package/dist/core/space/service.js +54 -0
- package/dist/core/space/service.js.map +1 -0
- package/dist/core/space/types.d.ts +241 -0
- package/dist/core/space/types.d.ts.map +1 -0
- package/dist/core/space/types.js +13 -0
- package/dist/core/space/types.js.map +1 -0
- package/dist/core/store.d.ts +2 -0
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +44 -12
- package/dist/core/store.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +63 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/atomic-file.d.ts +6 -0
- package/dist/utils/atomic-file.d.ts.map +1 -0
- package/dist/utils/atomic-file.js +37 -0
- package/dist/utils/atomic-file.js.map +1 -0
- package/dist/utils/fs-utils.d.ts +18 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +150 -2
- package/dist/utils/fs-utils.js.map +1 -1
- package/dist/utils/git.d.ts +20 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +181 -4
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +2 -2
- package/dist/utils/prompt.d.ts.map +1 -1
- package/dist/utils/prompt.js +4 -4
- package/dist/utils/prompt.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -70,14 +70,16 @@ td status
|
|
|
70
70
|
| `td link` | 链接项目依赖 |
|
|
71
71
|
| `td link -p mac ios` | 指定平台链接 |
|
|
72
72
|
| `td status` | 查看当前项目状态 |
|
|
73
|
-
| `td status -s` | 查看 Store 状态 |
|
|
74
73
|
| `td projects` | 列出所有已链接项目 |
|
|
75
74
|
| `td clean` | 清理无引用的库 |
|
|
75
|
+
| `td calibrate` | 按 Store 实际状态校准空间登记 |
|
|
76
76
|
| `td unlink` | 解除链接,恢复为目录 |
|
|
77
77
|
| `td config` | 交互式配置 |
|
|
78
|
-
| `td
|
|
79
|
-
| `td
|
|
80
|
-
| `td
|
|
78
|
+
| `td check` | 环境诊断和数据一致性检查 |
|
|
79
|
+
| `td check --fix` | 修复检查发现的问题 |
|
|
80
|
+
| `td check --dry-run` | 只显示问题,不执行修复 |
|
|
81
|
+
| `td reset <lib>` | 重置指定库的 Store 缓存和登记信息 |
|
|
82
|
+
| `td unavailable` | 管理手动平台缺失规则 |
|
|
81
83
|
| `td update` | 更新到最新版本 |
|
|
82
84
|
| `td migrate <path>` | 迁移 Store 位置 |
|
|
83
85
|
|
|
@@ -134,6 +136,21 @@ td config set <key> <value> # 设置配置
|
|
|
134
136
|
| `capacity` | 无引用库超过阈值时提示清理 |
|
|
135
137
|
| `manual` | 不自动清理 |
|
|
136
138
|
|
|
139
|
+
### 空间数据含义
|
|
140
|
+
|
|
141
|
+
- **实际占用**来自当前 Store 目录的磁盘测量。
|
|
142
|
+
- **登记容量**来自 StoreEntry 最近一次记录,可能与当前磁盘存在差异。
|
|
143
|
+
- **预计释放**在清理确认前按本次计划目标重新测量,包含同版本 `_shared`,且只计算一次。
|
|
144
|
+
- **项目依赖容量**按项目实际引用的平台和共享内容去重计算。
|
|
145
|
+
- **共享节省与下载容量**属于估算值;历史依据不足时显示容量未知。
|
|
146
|
+
|
|
147
|
+
`td check --json` 可以查看测量依据、结果质量和磁盘与登记容量差异。
|
|
148
|
+
|
|
149
|
+
当检查发现登记容量过期、目录缺失、重复共享登记或未登记平台时,运行
|
|
150
|
+
`td calibrate` 统一处理。命令会更新容量、移除失效登记并合并重复共享记录;
|
|
151
|
+
未登记平台只提供整体“暂不处理”或“删除无项目引用内容”两种选择,默认保留。
|
|
152
|
+
`td calibrate --dry-run` 完全只读,`td calibrate --yes` 使用默认保留策略并跳过确认。
|
|
153
|
+
|
|
137
154
|
## 工作原理
|
|
138
155
|
|
|
139
156
|
```
|
|
@@ -156,7 +173,9 @@ td config set <key> <value> # 设置配置
|
|
|
156
173
|
|
|
157
174
|
`sharedSymlinkFolders` 默认值为 `true`。如需排查构建工具对符号链接目录的兼容性,可通过 `td config set sharedSymlinkFolders false` 临时切回复制模式。
|
|
158
175
|
|
|
159
|
-
`
|
|
176
|
+
TanmiDock 会按 CodePac 配置规则解析 `repos`、`actions`、`vars`、平台分组、`name`、`source` 和 `dir`,并把主配置、可选配置、嵌套 action 配置同步到各自的 `.cache/<配置文件名>`。本地 Git 库优先通过 `.git/commit_hash` 判断 commit,和 CodePac 的完成标记保持一致。
|
|
177
|
+
|
|
178
|
+
`gitLightweightDownload` 默认值为 `true`。开启后下载阶段优先使用 Git 非完整拉取,只获取指定平台和必要共享内容,并在成功后保留 CodePac minisize 所需的 `commit_hash` 标记,可有效降低临时下载空间消耗。关闭该配置只表示不使用 TanmiDock 的 Git 非完整拉取;CodePac 自身默认也会倾向 minisize 下载。
|
|
160
179
|
|
|
161
180
|
## 常见问题
|
|
162
181
|
|
|
@@ -186,6 +205,8 @@ td projects --tree # 树状显示库引用关系
|
|
|
186
205
|
td migrate /Volumes/Data/.tanmi-dock/store
|
|
187
206
|
```
|
|
188
207
|
|
|
208
|
+
迁移要求目标目录为空。复制先进入专用暂存目录,保留符号链接并更新指向旧 Store 内部的绝对链接;验证通过后才切换配置和项目链接。进程中断后,再次运行 `td migrate` 会根据迁移日志继续执行。
|
|
209
|
+
|
|
189
210
|
## 更多文档
|
|
190
211
|
|
|
191
212
|
- [CLI 完整文档](docs/CLI.md) - 所有命令的详细参数和示例
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
interface CalibrateOptions {
|
|
3
|
+
dryRun: boolean;
|
|
4
|
+
yes: boolean;
|
|
5
|
+
}
|
|
6
|
+
/** 执行一次空间校准。非 dry-run 调用方必须持有全局锁。 */
|
|
7
|
+
export declare function calibrateStore(options: CalibrateOptions): Promise<void>;
|
|
8
|
+
export declare function createCalibrateCommand(): Command;
|
|
9
|
+
export default createCalibrateCommand;
|
|
10
|
+
//# sourceMappingURL=calibrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calibrate.d.ts","sourceRoot":"","sources":["../../src/commands/calibrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAgED,qCAAqC;AACrC,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F7E;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAehD;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ensureInitialized } from '../core/guard.js';
|
|
3
|
+
import * as config from '../core/config.js';
|
|
4
|
+
import { getRegistry } from '../core/registry.js';
|
|
5
|
+
import { SpaceService } from '../core/space/service.js';
|
|
6
|
+
import { formatSize } from '../utils/disk.js';
|
|
7
|
+
import { withGlobalLock } from '../utils/global-lock.js';
|
|
8
|
+
import { blank, debug, error, hint, info, separator, success, title, verboseJson, warn, } from '../utils/logger.js';
|
|
9
|
+
import { confirmAction, PROMPT_CANCELLED, selectOption } from '../utils/prompt.js';
|
|
10
|
+
function formatSignedSize(bytes) {
|
|
11
|
+
const sign = bytes > 0 ? '+' : bytes < 0 ? '-' : '';
|
|
12
|
+
return `${sign}${formatSize(Math.abs(bytes))}`;
|
|
13
|
+
}
|
|
14
|
+
function renderPlan(plan, choice) {
|
|
15
|
+
title('空间校准检查:');
|
|
16
|
+
info(` 登记容量变化 ${plan.summary.changedCount} 项,合计 ${formatSignedSize(plan.summary.changedDifferenceBytes)}`);
|
|
17
|
+
info(` 目录缺失 ${plan.summary.missingCount} 项,登记容量 ${formatSize(plan.summary.missingRegisteredBytes)}`);
|
|
18
|
+
info(` 重复共享登记 ${plan.summary.duplicateSharedCount} 项`);
|
|
19
|
+
info(` 未登记平台 ${plan.unregistered.totalCount} 项,合计 ${formatSize(plan.unregistered.totalBytes)}`);
|
|
20
|
+
if (plan.unregistered.protectedCount > 0) {
|
|
21
|
+
info(` 引用保护 ${plan.unregistered.protectedCount} 项`);
|
|
22
|
+
}
|
|
23
|
+
info(` 系统文件 ${plan.summary.ignoredArtifactCount} 项,将忽略并保留`);
|
|
24
|
+
blank();
|
|
25
|
+
if (choice === 'delete-unreferenced') {
|
|
26
|
+
info(`未登记平台处理: 删除 ${plan.unregistered.deletableCount} 项无项目引用内容,预计释放 ${formatSize(plan.unregistered.deletableBytes)}`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
info('未登记平台处理: 暂不处理');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function hasMetadataActions(plan) {
|
|
33
|
+
return plan.actions.length > 0;
|
|
34
|
+
}
|
|
35
|
+
async function chooseUnregisteredAction(plan, options) {
|
|
36
|
+
if (plan.unregistered.totalCount === 0 || options.dryRun || options.yes)
|
|
37
|
+
return 'keep';
|
|
38
|
+
blank();
|
|
39
|
+
const choice = await selectOption('未登记平台如何处理?', [
|
|
40
|
+
{
|
|
41
|
+
name: '暂不处理',
|
|
42
|
+
value: 'keep',
|
|
43
|
+
description: `保留全部 ${plan.unregistered.totalCount} 项内容`,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: '删除无项目引用的内容',
|
|
47
|
+
value: 'delete-unreferenced',
|
|
48
|
+
description: `删除 ${plan.unregistered.deletableCount} 项,保留 ${plan.unregistered.protectedCount} 项`,
|
|
49
|
+
},
|
|
50
|
+
]);
|
|
51
|
+
if (choice === PROMPT_CANCELLED) {
|
|
52
|
+
info('已取消校准');
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return choice;
|
|
56
|
+
}
|
|
57
|
+
/** 执行一次空间校准。非 dry-run 调用方必须持有全局锁。 */
|
|
58
|
+
export async function calibrateStore(options) {
|
|
59
|
+
debug(`[space] 校准命令输入: dryRun=${options.dryRun}, yes=${options.yes}, source=td-calibrate`);
|
|
60
|
+
const cfg = await config.load({ migrate: !options.dryRun });
|
|
61
|
+
if (!cfg)
|
|
62
|
+
throw new Error('配置文件不存在,请先运行 tanmi-dock init');
|
|
63
|
+
if (options.dryRun && config.checkConfigVersion(cfg) === 'migrate') {
|
|
64
|
+
throw new Error('配置需要迁移;dry-run 不会修改配置,请先运行一次普通命令完成迁移');
|
|
65
|
+
}
|
|
66
|
+
const registry = getRegistry();
|
|
67
|
+
await registry.load({ migrate: !options.dryRun });
|
|
68
|
+
const service = new SpaceService(registry, cfg.storePath);
|
|
69
|
+
const cleanupExecutor = service.createCleanupExecutor();
|
|
70
|
+
if (!options.dryRun) {
|
|
71
|
+
const recovered = await cleanupExecutor.recoverPending();
|
|
72
|
+
if (recovered > 0)
|
|
73
|
+
info(`恢复了 ${recovered} 个中断清理记录`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
debug('[space] 校准 dry-run 跳过配置迁移、登记迁移、清理恢复和全局写锁');
|
|
77
|
+
}
|
|
78
|
+
info('扫描 Store 并核对登记数据...');
|
|
79
|
+
const snapshot = await service.buildSnapshot('audit');
|
|
80
|
+
const plan = service.buildCalibrationPlan(snapshot);
|
|
81
|
+
debug(`[space] 校准审计完成: plan=${plan.id}, snapshot=${snapshot.id}, changed=${plan.summary.changedCount}, changedDifference=${plan.summary.changedDifferenceBytes}, missing=${plan.summary.missingCount}, missingBytes=${plan.summary.missingRegisteredBytes}, duplicates=${plan.summary.duplicateSharedCount}, unregistered=${plan.unregistered.totalCount}, unregisteredBytes=${plan.unregistered.totalBytes}, deletable=${plan.unregistered.deletableCount}, protected=${plan.unregistered.protectedCount}, ignored=${plan.summary.ignoredArtifactCount}`);
|
|
82
|
+
verboseJson('[space] 校准计划 JSON', plan);
|
|
83
|
+
const choice = await chooseUnregisteredAction(plan, options);
|
|
84
|
+
if (!choice)
|
|
85
|
+
return;
|
|
86
|
+
blank();
|
|
87
|
+
renderPlan(plan, choice);
|
|
88
|
+
const willDelete = choice === 'delete-unreferenced' && plan.unregistered.deletableCount > 0;
|
|
89
|
+
if (!hasMetadataActions(plan) && !willDelete) {
|
|
90
|
+
if (plan.unregistered.totalCount > 0) {
|
|
91
|
+
success('登记数据无需调整,未登记平台按选择保留');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
success('空间登记与 Store 实际状态一致');
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (options.dryRun) {
|
|
99
|
+
blank();
|
|
100
|
+
hint('dry-run 仅检查,不修改登记数据或 Store 内容');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (!options.yes) {
|
|
104
|
+
blank();
|
|
105
|
+
const confirmed = await confirmAction(`确认执行 ${plan.actions.length} 项登记校准${willDelete ? `并删除 ${plan.unregistered.deletableCount} 项未登记平台` : ''}?`, false);
|
|
106
|
+
if (confirmed === PROMPT_CANCELLED || !confirmed) {
|
|
107
|
+
info('已取消校准');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
blank();
|
|
112
|
+
separator();
|
|
113
|
+
info(`正在执行空间校准计划 ${plan.id}...`);
|
|
114
|
+
const result = await service.createCalibrationExecutor().execute(plan, {
|
|
115
|
+
deleteUnregistered: choice === 'delete-unreferenced',
|
|
116
|
+
});
|
|
117
|
+
const remainingPlan = service.buildCalibrationPlan(result.finalSnapshot);
|
|
118
|
+
blank();
|
|
119
|
+
const cleanupFailed = result.cleanup != null && result.cleanup.status !== 'completed';
|
|
120
|
+
if (cleanupFailed) {
|
|
121
|
+
warn(`空间校准部分完成: 更新 ${result.metadataActionCount} 项登记数据,未登记平台删除成功 ${result.cleanup.succeeded.length} 项、失败 ${result.cleanup.failed.length} 项`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
success(`空间校准完成: 更新 ${result.metadataActionCount} 项登记数据`);
|
|
125
|
+
}
|
|
126
|
+
if (result.cleanup && !cleanupFailed) {
|
|
127
|
+
info(`未登记平台清理: 删除 ${result.cleanup.succeeded.length} 项,释放 ${formatSize(result.cleanup.released.bytes)}`);
|
|
128
|
+
}
|
|
129
|
+
if (remainingPlan.unregistered.totalCount > 0) {
|
|
130
|
+
info(`保留未登记平台: ${remainingPlan.unregistered.totalCount} 项`);
|
|
131
|
+
}
|
|
132
|
+
const remainingMetadataIssues = remainingPlan.actions.length;
|
|
133
|
+
if (remainingMetadataIssues > 0) {
|
|
134
|
+
warn(`重新检查仍发现 ${remainingMetadataIssues} 项登记差异,请查看详细日志`);
|
|
135
|
+
}
|
|
136
|
+
debug(`[space] 校准最终输出: plan=${plan.id}, finalSnapshot=${result.finalSnapshot.id}, remainingMetadata=${remainingMetadataIssues}, remainingUnregistered=${remainingPlan.unregistered.totalCount}, finalDifference=${result.finalSnapshot.totals.differenceBytes}`);
|
|
137
|
+
}
|
|
138
|
+
export function createCalibrateCommand() {
|
|
139
|
+
return new Command('calibrate')
|
|
140
|
+
.description('校准 Store 空间登记数据')
|
|
141
|
+
.option('--dry-run', '只检查并显示校准内容')
|
|
142
|
+
.option('--yes', '使用默认选项并跳过最终确认')
|
|
143
|
+
.action(async (options) => {
|
|
144
|
+
await ensureInitialized();
|
|
145
|
+
try {
|
|
146
|
+
if (options.dryRun)
|
|
147
|
+
await calibrateStore(options);
|
|
148
|
+
else
|
|
149
|
+
await withGlobalLock(() => calibrateStore(options));
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
error(err.message);
|
|
153
|
+
process.exitCode = 1;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
export default createCalibrateCommand;
|
|
158
|
+
//# sourceMappingURL=calibrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calibrate.js","sourceRoot":"","sources":["../../src/commands/calibrate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/check.d.ts
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import type { CodepacEnvironmentCheck } from '../core/codepac.js';
|
|
3
|
+
import type { SpaceIssue, StoreSpaceTotals } from '../core/space/types.js';
|
|
4
|
+
interface EnvironmentCheck {
|
|
5
|
+
codepac: {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
message: string;
|
|
8
|
+
details: CodepacEnvironmentCheck;
|
|
9
|
+
};
|
|
10
|
+
config: {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
store: {
|
|
15
|
+
ok: boolean;
|
|
16
|
+
path: string;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
disk: {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
free: number;
|
|
22
|
+
warn: boolean;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
2
26
|
interface IntegrityIssue {
|
|
3
27
|
invalidProjects: {
|
|
4
28
|
hash: string;
|
|
@@ -33,7 +57,7 @@ interface IntegrityIssue {
|
|
|
33
57
|
commit: string;
|
|
34
58
|
platform: string;
|
|
35
59
|
reason: string;
|
|
36
|
-
kind?: 'integrity_mismatch' | 'shared_platform_conflict';
|
|
60
|
+
kind?: 'integrity_mismatch' | 'shared_platform_conflict' | 'missing_integrity_record';
|
|
37
61
|
conflictPlatforms?: string[];
|
|
38
62
|
expected: {
|
|
39
63
|
fileCount?: number;
|
|
@@ -47,11 +71,31 @@ interface IntegrityIssue {
|
|
|
47
71
|
};
|
|
48
72
|
}[];
|
|
49
73
|
}
|
|
74
|
+
interface CheckResult {
|
|
75
|
+
environment: EnvironmentCheck;
|
|
76
|
+
integrity: IntegrityIssue;
|
|
77
|
+
space: {
|
|
78
|
+
snapshotId?: string;
|
|
79
|
+
totals?: StoreSpaceTotals;
|
|
80
|
+
issues: SpaceIssue[];
|
|
81
|
+
error?: string;
|
|
82
|
+
};
|
|
83
|
+
summary: {
|
|
84
|
+
envErrors: number;
|
|
85
|
+
envWarnings: number;
|
|
86
|
+
integrityIssues: number;
|
|
87
|
+
reclaimableSize: number;
|
|
88
|
+
spaceIssues: number;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
50
91
|
export declare function createCheckCommand(): Command;
|
|
51
92
|
/**
|
|
52
93
|
* 验证完整性(兼容旧 verify 命令)
|
|
53
94
|
*/
|
|
54
95
|
export declare function verifyIntegrity(): Promise<void>;
|
|
96
|
+
export declare function collectCheckResultForTest(options?: {
|
|
97
|
+
integrity?: boolean;
|
|
98
|
+
}): Promise<CheckResult>;
|
|
55
99
|
/**
|
|
56
100
|
* 修复问题(兼容旧 repair 命令)
|
|
57
101
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|