Skip to content

Commit

Permalink
Correctly handle module files missing from a previously patched save
Browse files Browse the repository at this point in the history
Resolves clusterio#611
  • Loading branch information
Danielv123 committed Apr 23, 2024
1 parent 79c1a2d commit e52fe36
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions packages/host/src/patch.ts
Expand Up @@ -78,7 +78,14 @@ export class SaveModule {
static async fromSave(json: Static<typeof SaveModule.jsonSchema>, root: JSZip) {
const module = new this(lib.ModuleInfo.fromJSON(json));
module.files = new Map(
await Promise.all(json.files.map(async f => [f, await root.file(f)!.async("nodebuffer")] as const))
await Promise.all(json.files.map(async filename => {
const file = root.file(filename);
if (file === null) {
lib.logger.warn(`Missing file ${filename} in save`);
return [filename, Buffer.alloc(0)] as const;
}
return [filename, await file.async("nodebuffer")] as const;
}))
);
return module;
}
Expand Down Expand Up @@ -280,7 +287,7 @@ function reorderDependencies(modules: SaveModule[]) {
throw new Error(`Module ${module.info.name} requires ${dependency} ${requirement}`);
}

// We have an unmet dependency, take it out and continue
// We have an unmet dependency, take it out and continue
} else {
if (hold.has(dependency)) {
hold.get(dependency)!.push(module);
Expand Down Expand Up @@ -369,7 +376,7 @@ export async function patch(savePath: string, modules: SaveModule[]) {
);
}

// No info file present, try to detect if it's a known compatible scenario.
// No info file present, try to detect if it's a known compatible scenario.
} else {
let controlFile = root.file("control.lua");
if (!controlFile) {
Expand All @@ -395,8 +402,11 @@ export async function patch(savePath: string, modules: SaveModule[]) {
}
} else {
for (let module of patchInfo.modules) {
for (let file of module.files.keys()) {
zip.remove(root.file(file)!.name);
for (let filepath of module.files.keys()) {
const file = root.file(filepath);
if (file !== null) {
zip.remove(file.name);
}
}
}
patchInfo.modules = [];
Expand Down

0 comments on commit e52fe36

Please sign in to comment.