mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
fix(installer): installs to the wrong directory on Windows (#3462)
Close: #3443
This commit is contained in:
parent
50b6907bc3
commit
90c5aadbca
2 changed files with 66 additions and 4 deletions
|
@ -78,16 +78,16 @@ function getFlagFromPermission(perm: Permission): string {
|
||||||
|
|
||||||
function getInstallerDir(): string {
|
function getInstallerDir(): string {
|
||||||
// In Windows's Powershell $HOME environmental variable maybe null
|
// In Windows's Powershell $HOME environmental variable maybe null
|
||||||
// if so use $HOMEPATH instead.
|
// if so use $USERPROFILE instead.
|
||||||
const { HOME, HOMEPATH } = env();
|
const { HOME, USERPROFILE } = env();
|
||||||
|
|
||||||
const HOME_PATH = HOME || HOMEPATH;
|
const HOME_PATH = HOME || USERPROFILE;
|
||||||
|
|
||||||
if (!HOME_PATH) {
|
if (!HOME_PATH) {
|
||||||
throw new Error("$HOME is not defined.");
|
throw new Error("$HOME is not defined.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return path.join(HOME_PATH, ".deno", "bin");
|
return path.resolve(HOME_PATH, ".deno", "bin");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function readCharacter(): Promise<string> {
|
async function readCharacter(): Promise<string> {
|
||||||
|
|
|
@ -42,8 +42,10 @@ function installerTest(t: TestFunction, useOriginHomeDir = false): void {
|
||||||
const tempDir = await makeTempDir();
|
const tempDir = await makeTempDir();
|
||||||
const envVars = env();
|
const envVars = env();
|
||||||
const originalHomeDir = envVars["HOME"];
|
const originalHomeDir = envVars["HOME"];
|
||||||
|
const originalUserProfile = envVars["USERPROFILE"];
|
||||||
if (!useOriginHomeDir) {
|
if (!useOriginHomeDir) {
|
||||||
envVars["HOME"] = tempDir;
|
envVars["HOME"] = tempDir;
|
||||||
|
envVars["USERPROFILE"] = tempDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -54,6 +56,9 @@ function installerTest(t: TestFunction, useOriginHomeDir = false): void {
|
||||||
if (originalHomeDir) {
|
if (originalHomeDir) {
|
||||||
envVars["HOME"] = originalHomeDir;
|
envVars["HOME"] = originalHomeDir;
|
||||||
}
|
}
|
||||||
|
if (originalUserProfile) {
|
||||||
|
envVars["USERPROFILE"] = originalUserProfile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -400,6 +405,63 @@ installerTest(async function installAndMakesureArgsRight(): Promise<void> {
|
||||||
assert(!thrown, "It should not throw an error");
|
assert(!thrown, "It should not throw an error");
|
||||||
}, true); // set true to install module in your real $HOME dir.
|
}, true); // set true to install module in your real $HOME dir.
|
||||||
|
|
||||||
|
installerTest(async function installWithoutHOMEVar(): Promise<void> {
|
||||||
|
const { HOME } = env();
|
||||||
|
env()["HOME"] = "";
|
||||||
|
|
||||||
|
await install(
|
||||||
|
"echo_test",
|
||||||
|
"http://localhost:4500/installer/testdata/echo.ts",
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
env()["HOME"] = HOME;
|
||||||
|
|
||||||
|
const filePath = path.resolve(HOME, ".deno/bin/echo_test");
|
||||||
|
const fileInfo = await stat(filePath);
|
||||||
|
assert(fileInfo.isFile());
|
||||||
|
|
||||||
|
if (path.isWindows) {
|
||||||
|
assertEquals(
|
||||||
|
await fs.readFileStr(filePath + ".cmd"),
|
||||||
|
/* eslint-disable max-len */
|
||||||
|
`% This executable is generated by Deno. Please don't modify it unless you know what it means. %
|
||||||
|
@IF EXIST "%~dp0\deno.exe" (
|
||||||
|
"%~dp0\deno.exe" "run" "http://localhost:4500/installer/testdata/echo.ts" %*
|
||||||
|
) ELSE (
|
||||||
|
@SETLOCAL
|
||||||
|
@SET PATHEXT=%PATHEXT:;.TS;=;%
|
||||||
|
"deno" "run" "http://localhost:4500/installer/testdata/echo.ts" %*
|
||||||
|
)
|
||||||
|
`
|
||||||
|
/* eslint-enable max-len */
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
await fs.readFileStr(filePath),
|
||||||
|
/* eslint-disable max-len */
|
||||||
|
`#!/bin/sh
|
||||||
|
# This executable is generated by Deno. Please don't modify it unless you know what it means.
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')")
|
||||||
|
|
||||||
|
case \`uname\` in
|
||||||
|
*CYGWIN*) basedir=\`cygpath -w "$basedir"\`;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/deno" ]; then
|
||||||
|
"$basedir/deno" "run" "http://localhost:4500/installer/testdata/echo.ts" "$@"
|
||||||
|
ret=$?
|
||||||
|
else
|
||||||
|
"deno" "run" "http://localhost:4500/installer/testdata/echo.ts" "$@"
|
||||||
|
ret=$?
|
||||||
|
fi
|
||||||
|
exit $ret
|
||||||
|
`
|
||||||
|
/* eslint-enable max-len */
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test(function testIsRemoteUrl(): void {
|
test(function testIsRemoteUrl(): void {
|
||||||
assert(isRemoteUrl("https://deno.land/std/http/file_server.ts"));
|
assert(isRemoteUrl("https://deno.land/std/http/file_server.ts"));
|
||||||
assert(isRemoteUrl("http://deno.land/std/http/file_server.ts"));
|
assert(isRemoteUrl("http://deno.land/std/http/file_server.ts"));
|
||||||
|
|
Loading…
Reference in a new issue