@ue-shed/map-history 0.1.0
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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/baseline-materialization.d.ts +17 -0
- package/dist/baseline-materialization.d.ts.map +1 -0
- package/dist/baseline-materialization.js +86 -0
- package/dist/baseline-materialization.js.map +1 -0
- package/dist/diff.d.ts +7 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +159 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +27 -0
- package/dist/errors.js.map +1 -0
- package/dist/fast-history-target.d.ts +61 -0
- package/dist/fast-history-target.d.ts.map +1 -0
- package/dist/fast-history-target.js +248 -0
- package/dist/fast-history-target.js.map +1 -0
- package/dist/historical-project-tree.d.ts +18 -0
- package/dist/historical-project-tree.d.ts.map +1 -0
- package/dist/historical-project-tree.js +123 -0
- package/dist/historical-project-tree.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/map-history.d.ts +24 -0
- package/dist/map-history.d.ts.map +1 -0
- package/dist/map-history.js +365 -0
- package/dist/map-history.js.map +1 -0
- package/dist/package-correlation.d.ts +16 -0
- package/dist/package-correlation.d.ts.map +1 -0
- package/dist/package-correlation.js +76 -0
- package/dist/package-correlation.js.map +1 -0
- package/dist/perforce-map-scope.d.ts +56 -0
- package/dist/perforce-map-scope.d.ts.map +1 -0
- package/dist/perforce-map-scope.js +284 -0
- package/dist/perforce-map-scope.js.map +1 -0
- package/dist/perforce.d.ts +105 -0
- package/dist/perforce.d.ts.map +1 -0
- package/dist/perforce.js +441 -0
- package/dist/perforce.js.map +1 -0
- package/dist/playback.d.ts +60 -0
- package/dist/playback.d.ts.map +1 -0
- package/dist/playback.js +168 -0
- package/dist/playback.js.map +1 -0
- package/dist/revision-materialization.d.ts +14 -0
- package/dist/revision-materialization.d.ts.map +1 -0
- package/dist/revision-materialization.js +68 -0
- package/dist/revision-materialization.js.map +1 -0
- package/dist/revision-plan.d.ts +44 -0
- package/dist/revision-plan.d.ts.map +1 -0
- package/dist/revision-plan.js +84 -0
- package/dist/revision-plan.js.map +1 -0
- package/dist/schema.d.ts +7964 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +292 -0
- package/dist/schema.js.map +1 -0
- package/dist/submitted-change-selection.d.ts +22 -0
- package/dist/submitted-change-selection.d.ts.map +1 -0
- package/dist/submitted-change-selection.js +101 -0
- package/dist/submitted-change-selection.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { Context, Effect, Exit, Layer, Ref } from "effect";
|
|
2
|
+
import { AssetReader, AssetReaderLive } from "@ue-shed/unreal-assets";
|
|
3
|
+
import { materializeBaseline } from "./baseline-materialization.js";
|
|
4
|
+
import { diffSavedWorldSnapshots } from "./diff.js";
|
|
5
|
+
import { MapHistoryError } from "./errors.js";
|
|
6
|
+
import { resolvePerforceFastMapScope } from "./fast-history-target.js";
|
|
7
|
+
import { acquireHistoricalProjectTree } from "./historical-project-tree.js";
|
|
8
|
+
import { findUnclassifiedPackageChanges } from "./package-correlation.js";
|
|
9
|
+
import { perforceHistorySourceLayer, PerforceProjectContext, PerforceHistorySource } from "./perforce.js";
|
|
10
|
+
import { resolvePerforceMapLineage, resolvePerforceMapScope, scopedPerforceFile } from "./perforce-map-scope.js";
|
|
11
|
+
import { materializePlannedRevision } from "./revision-materialization.js";
|
|
12
|
+
import { planScopedRevision } from "./revision-plan.js";
|
|
13
|
+
import {} from "./schema.js";
|
|
14
|
+
import { selectSubmittedChanges } from "./submitted-change-selection.js";
|
|
15
|
+
/** The Perforce-first Map History workflow. It owns no credentials or source-control policy. */
|
|
16
|
+
export class MapHistory extends Context.Service()("@ue-shed/map-history/MapHistory") {
|
|
17
|
+
}
|
|
18
|
+
function progress(phase, processedChangelists, totalChangelists) {
|
|
19
|
+
return { phase, processedChangelists, totalChangelists };
|
|
20
|
+
}
|
|
21
|
+
function savedWorldError(operation, error) {
|
|
22
|
+
return new MapHistoryError({
|
|
23
|
+
kind: error.kind === "resource_limit" ? "resource_limit" : "saved_world_decode",
|
|
24
|
+
message: `${operation}: ${error.message}`,
|
|
25
|
+
recovery: error.kind === "resource_limit"
|
|
26
|
+
? "Narrow the map scope or raise maxPackages explicitly."
|
|
27
|
+
: "Confirm the historical map files can be read and retry.",
|
|
28
|
+
retrySafe: error.retrySafe
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function historicalLayoutError(scope, world) {
|
|
32
|
+
return new MapHistoryError({
|
|
33
|
+
kind: "unsupported_history_layout",
|
|
34
|
+
message: `Historical map storage is ${world.sourceKind}, but the selected map currently uses ${scope.sourceKind}.`,
|
|
35
|
+
recovery: "Choose a range that does not cross a conventional-level and World Partition conversion.",
|
|
36
|
+
retrySafe: false
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function evidenceError(file) {
|
|
40
|
+
return new MapHistoryError({
|
|
41
|
+
kind: "perforce_command",
|
|
42
|
+
message: `Perforce reported no exact revision for changed map file ${file.depotPath}.`,
|
|
43
|
+
recovery: "Check the submitted changelist metadata and retry.",
|
|
44
|
+
retrySafe: false
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function compareText(left, right) {
|
|
48
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
49
|
+
}
|
|
50
|
+
function packageChangeEvidence(changes) {
|
|
51
|
+
return changes.map((change) => ({
|
|
52
|
+
action: change.action,
|
|
53
|
+
afterRevision: change.afterRevision,
|
|
54
|
+
beforeRevision: change.beforeRevision,
|
|
55
|
+
depotPath: change.depotPath,
|
|
56
|
+
packageName: change.packageName
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
function packageRevisionEvidence(files, scopes) {
|
|
60
|
+
const evidence = [];
|
|
61
|
+
for (const file of files) {
|
|
62
|
+
if (!scopes.some((scope) => scopedPerforceFile(scope, file.depotPath) !== undefined))
|
|
63
|
+
continue;
|
|
64
|
+
if (file.revision === null || file.revision <= 0)
|
|
65
|
+
return Effect.fail(evidenceError(file));
|
|
66
|
+
evidence.push({
|
|
67
|
+
action: file.action,
|
|
68
|
+
depotPath: file.depotPath,
|
|
69
|
+
revision: file.revision
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
evidence.sort((left, right) => compareText(left.depotPath, right.depotPath));
|
|
73
|
+
return Effect.succeed(evidence);
|
|
74
|
+
}
|
|
75
|
+
function lineageScopeAtChange(lineage, change) {
|
|
76
|
+
let index = 0;
|
|
77
|
+
while (true) {
|
|
78
|
+
const move = lineage.moves[index];
|
|
79
|
+
if (move === undefined || move.change > change)
|
|
80
|
+
break;
|
|
81
|
+
index += 1;
|
|
82
|
+
}
|
|
83
|
+
const scope = lineage.locations[index];
|
|
84
|
+
if (scope === undefined) {
|
|
85
|
+
throw new Error("Resolved map lineage has no location for the requested changelist.");
|
|
86
|
+
}
|
|
87
|
+
return scope;
|
|
88
|
+
}
|
|
89
|
+
function scopedFilesForRevision(files, scopes) {
|
|
90
|
+
const byDepotPath = new Map();
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
for (const scope of scopes) {
|
|
93
|
+
const scoped = scopedPerforceFile(scope, file.depotPath);
|
|
94
|
+
if (scoped !== undefined)
|
|
95
|
+
byDepotPath.set(scoped.depotPath, scoped);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return [...byDepotPath.values()];
|
|
99
|
+
}
|
|
100
|
+
function assertResolvedMove(options) {
|
|
101
|
+
const deletesCurrentMap = options.files.some((file) => file.depotPath === options.before.mapDepotPath && file.action === "move/delete");
|
|
102
|
+
if (!deletesCurrentMap || options.after.mapDepotPath !== options.before.mapDepotPath) {
|
|
103
|
+
return Effect.void;
|
|
104
|
+
}
|
|
105
|
+
return Effect.fail(new MapHistoryError({
|
|
106
|
+
kind: "ambiguous_map_lineage",
|
|
107
|
+
message: `Changelist ${options.change} moves ${options.before.mapDepotPath}, but Perforce did not provide one bounded direct destination.`,
|
|
108
|
+
recovery: "Inspect the map's direct Perforce move records and retry.",
|
|
109
|
+
retrySafe: false
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
function emptyWorldBeforeCreation(world) {
|
|
113
|
+
return { ...world, actors: [], diagnostics: [] };
|
|
114
|
+
}
|
|
115
|
+
function deduplicateDiagnostics(diagnostics) {
|
|
116
|
+
const unique = new Map();
|
|
117
|
+
for (const diagnostic of diagnostics) {
|
|
118
|
+
unique.set(`${diagnostic.code}\u0000${diagnostic.message}\u0000${diagnostic.retrySafe}`, diagnostic);
|
|
119
|
+
}
|
|
120
|
+
return [...unique.values()].sort((left, right) => compareText(`${left.code}\u0000${left.message}`, `${right.code}\u0000${right.message}`));
|
|
121
|
+
}
|
|
122
|
+
function readHistoricalWorld(options) {
|
|
123
|
+
return Effect.fn("MapHistory.readHistoricalWorld")(function* () {
|
|
124
|
+
const reader = yield* AssetReader;
|
|
125
|
+
const world = yield* reader
|
|
126
|
+
.readSavedWorld({
|
|
127
|
+
concurrency: options.limits.maxConcurrency,
|
|
128
|
+
mapPath: options.scope.mapProjectRelativePath,
|
|
129
|
+
maximumAssets: options.limits.maxPackages,
|
|
130
|
+
projectRoot: options.treeProjectRoot
|
|
131
|
+
})
|
|
132
|
+
.pipe(Effect.mapError((error) => savedWorldError("Could not read historical map", error)));
|
|
133
|
+
if (world.sourceKind !== options.scope.sourceKind) {
|
|
134
|
+
return yield* Effect.fail(historicalLayoutError(options.scope, world));
|
|
135
|
+
}
|
|
136
|
+
return world;
|
|
137
|
+
})();
|
|
138
|
+
}
|
|
139
|
+
function snapshotOf(world, scope) {
|
|
140
|
+
return {
|
|
141
|
+
actors: world.actors,
|
|
142
|
+
completeness: world.completeness,
|
|
143
|
+
diagnostics: world.diagnostics,
|
|
144
|
+
mapPackage: world.authority.mapPackage,
|
|
145
|
+
mapPath: scope.mapProjectRelativePath,
|
|
146
|
+
sourceKind: world.sourceKind,
|
|
147
|
+
summary: world.summary
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function reconstructScopedMapHistory(options) {
|
|
151
|
+
return Effect.fn("MapHistory.reconstructScopedMapHistory")(function* () {
|
|
152
|
+
const { limits, range, reportProgress, scope } = options;
|
|
153
|
+
yield* reportProgress(progress("listing_changes", 0, 0));
|
|
154
|
+
const lineage = yield* resolvePerforceMapLineage({
|
|
155
|
+
limits,
|
|
156
|
+
projectRoot: options.projectRoot,
|
|
157
|
+
scope
|
|
158
|
+
});
|
|
159
|
+
const selection = yield* selectSubmittedChanges({
|
|
160
|
+
fileSpecs: lineage.locations.flatMap((location) => location.fileSpecs),
|
|
161
|
+
maxChangelists: limits.maxChangelists,
|
|
162
|
+
range
|
|
163
|
+
});
|
|
164
|
+
const totalChangelists = selection.revisions.length;
|
|
165
|
+
const tree = yield* acquireHistoricalProjectTree();
|
|
166
|
+
const diagnostics = [];
|
|
167
|
+
let complete = true;
|
|
168
|
+
let materializedFiles = 0;
|
|
169
|
+
let previous;
|
|
170
|
+
let previousScope;
|
|
171
|
+
let rangeStartSnapshot;
|
|
172
|
+
if (selection.baseline !== undefined) {
|
|
173
|
+
const baselineScope = lineageScopeAtChange(lineage, selection.baseline.change);
|
|
174
|
+
yield* reportProgress(progress("materializing_baseline", 0, totalChangelists));
|
|
175
|
+
materializedFiles += yield* materializeBaseline({
|
|
176
|
+
change: selection.baseline.change,
|
|
177
|
+
concurrency: limits.maxConcurrency,
|
|
178
|
+
maxFiles: limits.maxMaterializedFiles,
|
|
179
|
+
scope: baselineScope,
|
|
180
|
+
tree
|
|
181
|
+
});
|
|
182
|
+
yield* reportProgress(progress("parsing", 0, totalChangelists));
|
|
183
|
+
previous = yield* readHistoricalWorld({
|
|
184
|
+
limits,
|
|
185
|
+
scope: baselineScope,
|
|
186
|
+
treeProjectRoot: tree.projectRoot
|
|
187
|
+
});
|
|
188
|
+
complete &&= previous.completeness === "complete";
|
|
189
|
+
diagnostics.push(...previous.diagnostics);
|
|
190
|
+
previousScope = baselineScope;
|
|
191
|
+
rangeStartSnapshot = snapshotOf(previous, baselineScope);
|
|
192
|
+
}
|
|
193
|
+
const source = yield* PerforceHistorySource;
|
|
194
|
+
const revisions = [];
|
|
195
|
+
for (const [index, selected] of selection.revisions.entries()) {
|
|
196
|
+
yield* reportProgress(progress("applying_revision", index, totalChangelists));
|
|
197
|
+
const described = yield* source.describeChangelist(selected.change);
|
|
198
|
+
if (described.status !== "submitted") {
|
|
199
|
+
return yield* Effect.fail(new MapHistoryError({
|
|
200
|
+
kind: "perforce_command",
|
|
201
|
+
message: `Changelist ${selected.change} is not submitted.`,
|
|
202
|
+
recovery: "Select submitted Perforce history and retry.",
|
|
203
|
+
retrySafe: false
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
const beforeScope = lineageScopeAtChange(lineage, selected.change - 1);
|
|
207
|
+
const afterScope = lineageScopeAtChange(lineage, selected.change);
|
|
208
|
+
yield* assertResolvedMove({
|
|
209
|
+
after: afterScope,
|
|
210
|
+
before: beforeScope,
|
|
211
|
+
change: selected.change,
|
|
212
|
+
files: described.files
|
|
213
|
+
});
|
|
214
|
+
const revisionScopes = beforeScope.mapDepotPath === afterScope.mapDepotPath
|
|
215
|
+
? [afterScope]
|
|
216
|
+
: [beforeScope, afterScope];
|
|
217
|
+
const plan = planScopedRevision({
|
|
218
|
+
files: described.files,
|
|
219
|
+
scope: scopedFilesForRevision(described.files, revisionScopes)
|
|
220
|
+
});
|
|
221
|
+
const remainingMaterializations = limits.maxMaterializedFiles - materializedFiles;
|
|
222
|
+
materializedFiles += yield* materializePlannedRevision({
|
|
223
|
+
change: selected.change,
|
|
224
|
+
concurrency: limits.maxConcurrency,
|
|
225
|
+
maxFiles: Math.max(0, remainingMaterializations),
|
|
226
|
+
plan,
|
|
227
|
+
tree
|
|
228
|
+
});
|
|
229
|
+
yield* reportProgress(progress("parsing", index, totalChangelists));
|
|
230
|
+
const current = yield* readHistoricalWorld({
|
|
231
|
+
limits,
|
|
232
|
+
scope: afterScope,
|
|
233
|
+
treeProjectRoot: tree.projectRoot
|
|
234
|
+
});
|
|
235
|
+
yield* reportProgress(progress("diffing", index, totalChangelists));
|
|
236
|
+
const before = previous ?? emptyWorldBeforeCreation(current);
|
|
237
|
+
const snapshotDiff = diffSavedWorldSnapshots(before, current);
|
|
238
|
+
const evidence = yield* packageRevisionEvidence(described.files, revisionScopes);
|
|
239
|
+
const unclassifiedPackageChanges = findUnclassifiedPackageChanges({
|
|
240
|
+
after: current,
|
|
241
|
+
before,
|
|
242
|
+
diff: snapshotDiff,
|
|
243
|
+
packageChanges: plan.kind === "ready" ? packageChangeEvidence(plan.packageChanges) : []
|
|
244
|
+
});
|
|
245
|
+
const revisionDiagnostics = [...current.diagnostics, ...snapshotDiff.diagnostics];
|
|
246
|
+
revisions.push({
|
|
247
|
+
...(selected.description === undefined
|
|
248
|
+
? {}
|
|
249
|
+
: { description: selected.description }),
|
|
250
|
+
...(selected.user === undefined ? {} : { user: selected.user }),
|
|
251
|
+
change: selected.change,
|
|
252
|
+
changes: snapshotDiff.changes,
|
|
253
|
+
completeness: current.completeness,
|
|
254
|
+
diagnostics: revisionDiagnostics,
|
|
255
|
+
files: evidence,
|
|
256
|
+
submittedAt: selected.submittedAt,
|
|
257
|
+
unclassifiedPackageChanges
|
|
258
|
+
});
|
|
259
|
+
complete &&= current.completeness === "complete";
|
|
260
|
+
diagnostics.push(...revisionDiagnostics);
|
|
261
|
+
previous = current;
|
|
262
|
+
previousScope = afterScope;
|
|
263
|
+
yield* reportProgress(progress("applying_revision", index + 1, totalChangelists));
|
|
264
|
+
}
|
|
265
|
+
const completeness = complete ? "complete" : "partial";
|
|
266
|
+
return {
|
|
267
|
+
baseline: selection.baseline === undefined
|
|
268
|
+
? { status: "map_not_yet_created" }
|
|
269
|
+
: {
|
|
270
|
+
change: selection.baseline.change,
|
|
271
|
+
status: "available"
|
|
272
|
+
},
|
|
273
|
+
completeness,
|
|
274
|
+
diagnostics: deduplicateDiagnostics(diagnostics),
|
|
275
|
+
...(scope.externalActorDepotRoot === undefined
|
|
276
|
+
? {}
|
|
277
|
+
: { externalActorDepotRoot: scope.externalActorDepotRoot }),
|
|
278
|
+
mapDepotPath: (lineage.locations.at(-1) ?? scope).mapDepotPath,
|
|
279
|
+
...(rangeStartSnapshot === undefined ? {} : { rangeStartSnapshot }),
|
|
280
|
+
...(previous === undefined || previousScope === undefined
|
|
281
|
+
? {}
|
|
282
|
+
: { rangeEndSnapshot: snapshotOf(previous, previousScope) }),
|
|
283
|
+
revisions
|
|
284
|
+
};
|
|
285
|
+
})();
|
|
286
|
+
}
|
|
287
|
+
function readPerforceMapHistoryWorkflow(query, reportProgress) {
|
|
288
|
+
return Effect.fn("MapHistory.readPerforceMapHistory")(function* () {
|
|
289
|
+
yield* reportProgress(progress("resolving_scope", 0, 0));
|
|
290
|
+
const scope = yield* resolvePerforceMapScope(query);
|
|
291
|
+
const body = yield* reconstructScopedMapHistory({
|
|
292
|
+
limits: query.limits,
|
|
293
|
+
projectRoot: query.projectRoot,
|
|
294
|
+
range: query.range,
|
|
295
|
+
reportProgress,
|
|
296
|
+
scope
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
...body,
|
|
300
|
+
query,
|
|
301
|
+
schemaVersion: 1
|
|
302
|
+
};
|
|
303
|
+
})();
|
|
304
|
+
}
|
|
305
|
+
function readPerforceFastMapHistoryWorkflow(query, reportProgress) {
|
|
306
|
+
return Effect.fn("MapHistory.readPerforceFastMapHistory")(function* () {
|
|
307
|
+
yield* reportProgress(progress("resolving_scope", 0, 0));
|
|
308
|
+
const resolved = yield* resolvePerforceFastMapScope(query);
|
|
309
|
+
const body = yield* reconstructScopedMapHistory({
|
|
310
|
+
limits: query.limits,
|
|
311
|
+
projectRoot: query.projectRoot,
|
|
312
|
+
range: query.range,
|
|
313
|
+
reportProgress,
|
|
314
|
+
scope: resolved.scope
|
|
315
|
+
});
|
|
316
|
+
return {
|
|
317
|
+
...body,
|
|
318
|
+
coverage: resolved.coverage,
|
|
319
|
+
mode: "fast",
|
|
320
|
+
query,
|
|
321
|
+
schemaVersion: 1
|
|
322
|
+
};
|
|
323
|
+
})();
|
|
324
|
+
}
|
|
325
|
+
function durationError(maxDurationMs) {
|
|
326
|
+
return new MapHistoryError({
|
|
327
|
+
kind: "resource_limit",
|
|
328
|
+
message: `Map history exceeded its ${maxDurationMs}ms duration limit.`,
|
|
329
|
+
recovery: "Narrow the history range or raise maxDurationMs explicitly.",
|
|
330
|
+
retrySafe: true
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
/** Builds Map History from injected snapshot and Perforce boundaries. */
|
|
334
|
+
export const mapHistoryLayer = Layer.effect(MapHistory, Effect.gen(function* () {
|
|
335
|
+
const reader = yield* AssetReader;
|
|
336
|
+
const perforce = yield* PerforceHistorySource;
|
|
337
|
+
const latestProgress = yield* Ref.make(progress("idle", 0, 0));
|
|
338
|
+
const reportProgress = (value) => Ref.set(latestProgress, value);
|
|
339
|
+
return MapHistory.of({
|
|
340
|
+
progress: () => Ref.get(latestProgress),
|
|
341
|
+
readPerforceFastMapHistory: (query) => Effect.scoped(readPerforceFastMapHistoryWorkflow(query, reportProgress)).pipe(Effect.provideService(AssetReader, reader), Effect.provideService(PerforceHistorySource, perforce), Effect.provideService(PerforceProjectContext, query.projectRoot), Effect.timeoutOrElse({
|
|
342
|
+
duration: query.limits.maxDurationMs,
|
|
343
|
+
orElse: () => Effect.fail(durationError(query.limits.maxDurationMs))
|
|
344
|
+
}), Effect.onExit((exit) => reportProgress(progress(Exit.isSuccess(exit) ? "ready" : "failed", 0, 0))), Effect.withSpan("map_history.read_perforce_fast")),
|
|
345
|
+
readPerforceMapHistory: (query) => Effect.scoped(readPerforceMapHistoryWorkflow(query, reportProgress)).pipe(Effect.provideService(AssetReader, reader), Effect.provideService(PerforceHistorySource, perforce), Effect.provideService(PerforceProjectContext, query.projectRoot), Effect.timeoutOrElse({
|
|
346
|
+
duration: query.limits.maxDurationMs,
|
|
347
|
+
orElse: () => Effect.fail(durationError(query.limits.maxDurationMs))
|
|
348
|
+
}), Effect.onExit((exit) => reportProgress(progress(Exit.isSuccess(exit) ? "ready" : "failed", 0, 0))), Effect.withSpan("map_history.read_perforce"))
|
|
349
|
+
});
|
|
350
|
+
}));
|
|
351
|
+
/** The optional default layer uses the configured asset reader and local Perforce configuration. */
|
|
352
|
+
export const mapHistoryLiveLayer = Layer.provide(mapHistoryLayer, Layer.merge(AssetReaderLive, perforceHistorySourceLayer()));
|
|
353
|
+
export function makeMapHistoryTestLayer(service) {
|
|
354
|
+
return Layer.succeed(MapHistory, MapHistory.of(service));
|
|
355
|
+
}
|
|
356
|
+
export function readPerforceMapHistory(query) {
|
|
357
|
+
return Effect.flatMap(MapHistory, (history) => history.readPerforceMapHistory(query));
|
|
358
|
+
}
|
|
359
|
+
export function readPerforceFastMapHistory(query) {
|
|
360
|
+
return Effect.flatMap(MapHistory, (history) => history.readPerforceFastMapHistory(query));
|
|
361
|
+
}
|
|
362
|
+
export function mapHistoryProgress() {
|
|
363
|
+
return Effect.flatMap(MapHistory, (history) => history.progress());
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=map-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-history.js","sourceRoot":"","sources":["../src/map-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SavedWorld } from "@ue-shed/protocol";
|
|
2
|
+
import type { MapSnapshotDiff, SavedPackageChangeEvidence, UnclassifiedPackageChange } from "./schema.js";
|
|
3
|
+
export interface CorrelatePackageChangesOptions {
|
|
4
|
+
readonly after: SavedWorld;
|
|
5
|
+
readonly before: SavedWorld;
|
|
6
|
+
readonly diff: MapSnapshotDiff;
|
|
7
|
+
readonly packageChanges: readonly SavedPackageChangeEvidence[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Retains every changed saved package that the supported actor projection cannot explain.
|
|
11
|
+
*
|
|
12
|
+
* `packageName` is supplied by the verified depot-to-project mapping boundary. This function does
|
|
13
|
+
* not infer Unreal package identity from depot strings.
|
|
14
|
+
*/
|
|
15
|
+
export declare function findUnclassifiedPackageChanges(options: CorrelatePackageChangesOptions): readonly UnclassifiedPackageChange[];
|
|
16
|
+
//# sourceMappingURL=package-correlation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-correlation.d.ts","sourceRoot":"","sources":["../src/package-correlation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAErE,OAAO,KAAK,EAGX,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,MAAM,aAAa,CAAC;AAoDrB,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,8BAA8B,GACrC,SAAS,yBAAyB,EAAE,CAgCtC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { actorIdentityKey, actorIdentityOf } from "./diff.js";
|
|
2
|
+
function actorPackagesForChange(change) {
|
|
3
|
+
switch (change.kind) {
|
|
4
|
+
case "actor_added":
|
|
5
|
+
return [change.after.packageName];
|
|
6
|
+
case "actor_removed":
|
|
7
|
+
return [change.before.packageName];
|
|
8
|
+
case "actor_moved":
|
|
9
|
+
case "actor_label_changed":
|
|
10
|
+
case "actor_class_changed":
|
|
11
|
+
case "actor_package_changed":
|
|
12
|
+
case "actor_position_resolution_changed":
|
|
13
|
+
return [change.before.packageName, change.after.packageName];
|
|
14
|
+
case "snapshot_coverage_changed":
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function ambiguousPackageNames(world) {
|
|
19
|
+
const actorsByIdentity = new Map();
|
|
20
|
+
for (const actor of world.actors) {
|
|
21
|
+
const key = actorIdentityKey(actorIdentityOf(actor));
|
|
22
|
+
const actors = actorsByIdentity.get(key);
|
|
23
|
+
if (actors === undefined)
|
|
24
|
+
actorsByIdentity.set(key, [actor]);
|
|
25
|
+
else
|
|
26
|
+
actors.push(actor);
|
|
27
|
+
}
|
|
28
|
+
return new Set([...actorsByIdentity.values()]
|
|
29
|
+
.filter((actors) => actors.length > 1)
|
|
30
|
+
.flatMap((actors) => actors.map((actor) => actor.packageName)));
|
|
31
|
+
}
|
|
32
|
+
function identitiesInPackage(packageName, before, after, ambiguousPackages) {
|
|
33
|
+
if (ambiguousPackages.has(packageName))
|
|
34
|
+
return [];
|
|
35
|
+
const identities = new Map();
|
|
36
|
+
for (const actor of [...before.actors, ...after.actors]) {
|
|
37
|
+
if (actor.packageName !== packageName)
|
|
38
|
+
continue;
|
|
39
|
+
const identity = actorIdentityOf(actor);
|
|
40
|
+
identities.set(actorIdentityKey(identity), identity);
|
|
41
|
+
}
|
|
42
|
+
return [...identities.entries()]
|
|
43
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
44
|
+
.map(([, identity]) => identity);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Retains every changed saved package that the supported actor projection cannot explain.
|
|
48
|
+
*
|
|
49
|
+
* `packageName` is supplied by the verified depot-to-project mapping boundary. This function does
|
|
50
|
+
* not infer Unreal package identity from depot strings.
|
|
51
|
+
*/
|
|
52
|
+
export function findUnclassifiedPackageChanges(options) {
|
|
53
|
+
const explainedPackages = new Set(options.diff.changes.flatMap((change) => actorPackagesForChange(change)));
|
|
54
|
+
const ambiguousPackages = new Set([
|
|
55
|
+
...ambiguousPackageNames(options.before),
|
|
56
|
+
...ambiguousPackageNames(options.after)
|
|
57
|
+
]);
|
|
58
|
+
const snapshotPartial = options.before.completeness === "partial" || options.after.completeness === "partial";
|
|
59
|
+
return [...options.packageChanges]
|
|
60
|
+
.sort((left, right) => left.depotPath.localeCompare(right.depotPath))
|
|
61
|
+
.filter((change) => !explainedPackages.has(change.packageName))
|
|
62
|
+
.map((change) => ({
|
|
63
|
+
action: change.action,
|
|
64
|
+
actorIdentities: identitiesInPackage(change.packageName, options.before, options.after, ambiguousPackages),
|
|
65
|
+
afterRevision: change.afterRevision,
|
|
66
|
+
beforeRevision: change.beforeRevision,
|
|
67
|
+
depotPath: change.depotPath,
|
|
68
|
+
packageName: change.packageName,
|
|
69
|
+
reason: snapshotPartial
|
|
70
|
+
? "snapshot_partial"
|
|
71
|
+
: ambiguousPackages.has(change.packageName)
|
|
72
|
+
? "actor_identity_unavailable"
|
|
73
|
+
: "projection_unchanged"
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=package-correlation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-correlation.js","sourceRoot":"","sources":["../src/package-correlation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AssetReader } from "@ue-shed/unreal-assets";
|
|
2
|
+
import type { SavedWorld } from "@ue-shed/protocol";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { MapHistoryError } from "./errors.js";
|
|
5
|
+
import { PerforceHistorySource, type PerforceMapMove } from "./perforce.js";
|
|
6
|
+
import type { ScopedPerforceFile } from "./revision-plan.js";
|
|
7
|
+
import type { PerforceMapHistoryQuery } from "./schema.js";
|
|
8
|
+
export interface ResolvedPerforceMapScope {
|
|
9
|
+
/**
|
|
10
|
+
* When set, only these package names may enter historical materialization. Fast History uses
|
|
11
|
+
* this to keep unrelated external actors out of a targeted reconstruction.
|
|
12
|
+
*/
|
|
13
|
+
readonly allowedPackageNames?: ReadonlySet<string>;
|
|
14
|
+
readonly externalActorDepotRoot?: string;
|
|
15
|
+
readonly externalActorProjectRoot?: string;
|
|
16
|
+
readonly fileSpecs: readonly string[];
|
|
17
|
+
readonly mapDepotPath: string;
|
|
18
|
+
readonly mapPackageName: string;
|
|
19
|
+
readonly mapProjectRelativePath: string;
|
|
20
|
+
readonly sourceKind: "level" | "world_partition";
|
|
21
|
+
}
|
|
22
|
+
export interface ResolvedPerforceMapLineage {
|
|
23
|
+
readonly locations: readonly ResolvedPerforceMapScope[];
|
|
24
|
+
readonly moves: readonly PerforceMapMove[];
|
|
25
|
+
}
|
|
26
|
+
export declare const MAX_DIRECT_MAP_MOVES = 16;
|
|
27
|
+
declare function depotPackageFileSpec(depotPath: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Converts a `/Game/...` package name to the project-relative saved package path for a primary
|
|
30
|
+
* `.uasset` or `.umap` file. Companion sidecar extensions are derived later from depot listings.
|
|
31
|
+
*/
|
|
32
|
+
export declare function projectRelativePathForPackageName(packageName: string, extension: ".uasset" | ".umap"): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Converts a depot path to one exact, supported saved-package file in the selected map scope.
|
|
35
|
+
* Paths outside the map or current external-actor subtree, including unrelated depot metadata,
|
|
36
|
+
* deliberately return `undefined` rather than becoming historical project files.
|
|
37
|
+
*/
|
|
38
|
+
export declare function scopedPerforceFile(scope: ResolvedPerforceMapScope, depotPath: string): ScopedPerforceFile | undefined;
|
|
39
|
+
/** Resolves the selected saved map and its present-day World Partition actor subtree to P4 scopes. */
|
|
40
|
+
export declare function resolvePerforceMapScope(query: PerforceMapHistoryQuery): Effect.Effect<ResolvedPerforceMapScope, MapHistoryError, AssetReader | PerforceHistorySource>;
|
|
41
|
+
/** Resolves only direct map moves and keeps every resulting location inside the selected project. */
|
|
42
|
+
export declare function resolvePerforceMapLineage(options: {
|
|
43
|
+
readonly limits: PerforceMapHistoryQuery["limits"];
|
|
44
|
+
readonly projectRoot: PerforceMapHistoryQuery["projectRoot"];
|
|
45
|
+
readonly scope: ResolvedPerforceMapScope;
|
|
46
|
+
}): Effect.Effect<ResolvedPerforceMapLineage, MapHistoryError, PerforceHistorySource>;
|
|
47
|
+
export declare function resolvePresentDayMapScope(query: {
|
|
48
|
+
readonly limits: PerforceMapHistoryQuery["limits"];
|
|
49
|
+
readonly mapPath: PerforceMapHistoryQuery["mapPath"];
|
|
50
|
+
readonly projectRoot: PerforceMapHistoryQuery["projectRoot"];
|
|
51
|
+
}): Effect.Effect<{
|
|
52
|
+
readonly scope: ResolvedPerforceMapScope;
|
|
53
|
+
readonly world: SavedWorld;
|
|
54
|
+
}, MapHistoryError, AssetReader | PerforceHistorySource>;
|
|
55
|
+
export { depotPackageFileSpec };
|
|
56
|
+
//# sourceMappingURL=perforce-map-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perforce-map-scope.d.ts","sourceRoot":"","sources":["../src/perforce-map-scope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAyB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACxC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACjD;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;CAC3C;AAED,eAAO,MAAM,oBAAoB,KAAK,CAAC;AA2BvC,iBAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIvD;AAmCD;;;GAGG;AACH,wBAAgB,iCAAiC,CAChD,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GAAG,OAAO,GAC5B,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,wBAAwB,EAC/B,SAAS,EAAE,MAAM,GACf,kBAAkB,GAAG,SAAS,CAkDhC;AAED,sGAAsG;AACtG,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,uBAAuB,GAC5B,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,EAAE,WAAW,GAAG,qBAAqB,CAAC,CAK/F;AAED,qGAAqG;AACrG,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CACzC,GAAG,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAyGpF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;CAC7D,GAAG,MAAM,CAAC,MAAM,CAChB;IAAE,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EACxE,eAAe,EACf,WAAW,GAAG,qBAAqB,CACnC,CAwEA;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|