mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix completely overriding PATH in shellSync (#5451)
This commit is contained in:
parent
592600c1bb
commit
5c11d7f7fe
32
src/common/utils/__tests__/union-env-path.test.ts
Normal file
32
src/common/utils/__tests__/union-env-path.test.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import path from "path";
|
||||||
|
import { unionPATHs } from "../union-env-path";
|
||||||
|
|
||||||
|
describe("unionPATHs", () => {
|
||||||
|
it("return the same path if given only one with no double delimiters", () => {
|
||||||
|
expect(unionPATHs(`/bin/bar${path.delimiter}/usr/bin`)).toBe(`/bin/bar${path.delimiter}/usr/bin`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("return equivalent path if given only one with no double delimiters", () => {
|
||||||
|
expect(unionPATHs(`/bin/bar${path.delimiter}${path.delimiter}/usr/bin`)).toBe(`/bin/bar${path.delimiter}/usr/bin`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should remove duplicate entries, appending non duplicates in order received", () => {
|
||||||
|
expect(unionPATHs(
|
||||||
|
`/bin/bar${path.delimiter}/usr/bin`,
|
||||||
|
`/bin/bar${path.delimiter}/usr/lens/bat`,
|
||||||
|
)).toBe(`/bin/bar${path.delimiter}/usr/bin${path.delimiter}/usr/lens/bat`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should remove duplicate entries, appending non duplicates in order received, 3", () => {
|
||||||
|
expect(unionPATHs(
|
||||||
|
`/bin/bar${path.delimiter}/usr/bin`,
|
||||||
|
`/bin/bar${path.delimiter}/usr/lens/bat`,
|
||||||
|
`/usr/local/lens${path.delimiter}/usr/bin`,
|
||||||
|
)).toBe(`/bin/bar${path.delimiter}/usr/bin${path.delimiter}/usr/lens/bat${path.delimiter}/usr/local/lens`);
|
||||||
|
});
|
||||||
|
});
|
||||||
20
src/common/utils/union-env-path.ts
Normal file
20
src/common/utils/union-env-path.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import path from "path";
|
||||||
|
import * as iter from "./iter";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Join all entires with a PATH env var delimated string together
|
||||||
|
* @param PATHs Any number of PATH env variables
|
||||||
|
*
|
||||||
|
* NOTE: This function does not attempt to handle any sort of escape sequences since after testing
|
||||||
|
* it was found that `zsh` (at least on `macOS`) does not when trying to find programs
|
||||||
|
*/
|
||||||
|
export function unionPATHs(...PATHs: string[]): string {
|
||||||
|
const entries = new Set(iter.filterFlatMap(PATHs, PATH => PATH.split(path.delimiter)));
|
||||||
|
|
||||||
|
return iter.join(entries.values(), path.delimiter);
|
||||||
|
}
|
||||||
@ -8,6 +8,7 @@ import os from "os";
|
|||||||
import { app } from "electron";
|
import { app } from "electron";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
import { isSnap } from "../common/vars";
|
import { isSnap } from "../common/vars";
|
||||||
|
import { unionPATHs } from "../common/utils/union-env-path";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shellSync loads what would have been the environment if this application was
|
* shellSync loads what would have been the environment if this application was
|
||||||
@ -25,7 +26,8 @@ export async function shellSync() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isSnap) {
|
if (!isSnap) {
|
||||||
process.env.PATH = env.PATH;
|
// Prefer the synced PATH over the initial one
|
||||||
|
process.env.PATH = unionPATHs(env.PATH ?? "", process.env.PATH ?? "");
|
||||||
}
|
}
|
||||||
|
|
||||||
// The spread operator allows joining of objects. The precedence is last to first.
|
// The spread operator allows joining of objects. The precedence is last to first.
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
import shellEnvironment from "shell-env";
|
import shellEnvironment from "shell-env";
|
||||||
import logger from "../logger";
|
import logger from "../logger";
|
||||||
|
|
||||||
export type EnvironmentVariables = Record<string, string>;
|
export type EnvironmentVariables = Partial<Record<string, string>>;
|
||||||
|
|
||||||
let shellSyncFailed = false;
|
let shellSyncFailed = false;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user