Skip to content

Commit 11f645d

Browse files
Fix removing packages from Emscripten FS (#103)
* Fix mutating paths when packages are deleted, add spec property to empack_env_meta data type * Fix removing packages * Fix typos * Fix types and logging
1 parent fd1637a commit 11f645d

File tree

5 files changed

+46
-15
lines changed

5 files changed

+46
-15
lines changed

packages/mambajs-core/src/helper.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ export interface IEmpackEnvMetaPkg {
3030
filename_stem: string;
3131
filename: string;
3232
url: string;
33-
depends: [],
34-
subdir: string
33+
depends: [];
34+
subdir: string;
3535
}
3636

3737
export interface IEmpackEnvMeta {
3838
prefix: string;
3939
packages: IEmpackEnvMetaPkg[];
40+
specs?: string[];
4041
}
4142

4243
/**
@@ -203,7 +204,11 @@ export function saveFilesIntoEmscriptenFS(
203204
}
204205
}
205206

206-
export function removeFilesFromEmscriptenFS(FS: any, paths: any): void {
207+
export function removeFilesFromEmscriptenFS(
208+
FS: any,
209+
paths: any,
210+
logger?: ILogger
211+
): void {
207212
try {
208213
const pwd = FS.cwd();
209214
FS.chdir('/');
@@ -216,6 +221,8 @@ export function removeFilesFromEmscriptenFS(FS: any, paths: any): void {
216221
} else {
217222
FS.unlink(path);
218223
}
224+
} else {
225+
console.log(`Uninstall error: Path ${path} does not exist`);
219226
}
220227
});
221228
FS.chdir(pwd);

packages/mambajs-core/src/index.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,38 @@ export interface IRemovePackagesFromEnvOptions {
241241
*/
242242
export const removePackagesFromEmscriptenFS = async (
243243
options: IRemovePackagesFromEnvOptions
244-
): Promise<void> => {
244+
): Promise<{ [key: string]: string }> => {
245245
const { removedPackages, Module, paths, logger } = options;
246+
const newPath = { ...paths };
247+
248+
const removedPackagesMap: { [name: string]: string } = {};
249+
Object.keys(removedPackages).forEach(filename => {
250+
const removedPkg = removedPackages[filename];
251+
const pkg = `${removedPkg.name}-${removedPkg.version}-${removedPkg.build_string}`;
252+
removedPackagesMap[filename] = pkg;
253+
});
254+
246255
Object.keys(removedPackages).map(filename => {
247256
const pkg = removedPackages[filename];
248257
logger?.log(`Uninstalling ${pkg.name} ${pkg.version}`);
249-
const packages = paths[filename];
250-
removeFilesFromEmscriptenFS(Module.FS, packages);
251-
delete paths[filename];
258+
let packages = newPath[filename];
259+
if (!packages) {
260+
// file extensions can be different after resolving packages even though a package has the same name, build and version,
261+
// so we need to check this and delete
262+
const pkgData = removedPackagesMap[filename];
263+
Object.keys(newPath).forEach((path: string) => {
264+
if (path.includes(pkgData)) {
265+
packages = newPath[path];
266+
}
267+
});
268+
}
269+
if (!packages) {
270+
throw new Error(`There are no paths for ${filename}`);
271+
}
272+
removeFilesFromEmscriptenFS(Module.FS, packages, logger);
273+
delete newPath[filename];
252274
});
275+
return newPath;
253276
};
254277

255278
export interface IBootstrapPythonOptions {

packages/mambajs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"typescript": "^5"
3838
},
3939
"dependencies": {
40-
"@conda-org/rattler": "^0.3.0",
40+
"@conda-org/rattler": "^0.3.1",
4141
"@emscripten-forge/mambajs-core": "^0.13.0",
4242
"yaml": "^2.7.0"
4343
}

packages/mambajs/src/solverpip.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,9 @@ async function processRequirement(
183183
url: solved.url,
184184
repo_name: 'PyPi'
185185
};
186-
installedWheels[requirement.package] = solved.name
187-
installPipPackagesLookup[requirement.package] = pipSolvedPackages[solved.name]
186+
installedWheels[requirement.package] = solved.name;
187+
installPipPackagesLookup[requirement.package] =
188+
pipSolvedPackages[solved.name];
188189

189190
if (!pkgMetadata.info.requires_dist) {
190191
return;

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ __metadata:
2323
languageName: node
2424
linkType: hard
2525

26-
"@conda-org/rattler@npm:^0.3.0":
27-
version: 0.3.0
28-
resolution: "@conda-org/rattler@npm:0.3.0"
29-
checksum: 10c0/af9d03c8bc63694c654ea950df4f3e2044c1d2205e258e4e739a9c9971898a40e4fba627066a3e6683c2a3e7bc337b1c167932901845ddd9904a7417bf3c0e92
26+
"@conda-org/rattler@npm:^0.3.1":
27+
version: 0.3.1
28+
resolution: "@conda-org/rattler@npm:0.3.1"
29+
checksum: 10c0/882dda8d0d420a61d19ac95d551469d3da8f7cf1ea59bcf08579d4bda42b0a00d6d64a1df0b898cfccef4b38123ca26b8088f8ec96298cec937fcff05a253376
3030
languageName: node
3131
linkType: hard
3232

@@ -98,7 +98,7 @@ __metadata:
9898
version: 0.0.0-use.local
9999
resolution: "@emscripten-forge/mambajs@workspace:packages/mambajs"
100100
dependencies:
101-
"@conda-org/rattler": "npm:^0.3.0"
101+
"@conda-org/rattler": "npm:^0.3.1"
102102
"@emscripten-forge/mambajs-core": "npm:^0.13.0"
103103
"@esbuild-plugins/node-globals-polyfill": "npm:^0.2.3"
104104
"@esbuild-plugins/node-modules-polyfill": "npm:^0.2.2"

0 commit comments

Comments
 (0)