Skip to content

Commit b325677

Browse files
authored
Support paths with white spaces in Windows releases (#9065)
1 parent bf7ace5 commit b325677

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

lib/mix/lib/mix/tasks/release.init.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,11 @@ defmodule Mix.Tasks.Release.Init do
245245
popd
246246
247247
if not defined RELEASE_NAME (set RELEASE_NAME=<%= @release.name %>)
248-
if not defined RELEASE_VSN (for /f "tokens=1,2" %%K in (!RELEASE_ROOT!\releases\start_erl.data) do (set ERTS_VSN=%%K) && (set RELEASE_VSN=%%L))
248+
if not defined RELEASE_VSN (for /f "tokens=1,2" %%K in ('type "!RELEASE_ROOT!\releases\start_erl.data"') do (set ERTS_VSN=%%K) && (set RELEASE_VSN=%%L))
249249
if not defined RELEASE_MODE (set RELEASE_MODE=embedded)
250250
set RELEASE_COMMAND=%~1
251251
set REL_VSN_DIR=!RELEASE_ROOT!\releases\!RELEASE_VSN!
252-
call !REL_VSN_DIR!\env.bat
252+
call "!REL_VSN_DIR!\env.bat"
253253
254254
if not defined RELEASE_COOKIE (set /p RELEASE_COOKIE=<!RELEASE_ROOT!\releases\COOKIE)
255255
if not defined RELEASE_NODE (set RELEASE_NODE=!RELEASE_NAME!)

lib/mix/test/mix/tasks/release_test.exs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,10 @@ defmodule Mix.Tasks.ReleaseTest do
144144
} = wait_until_evaled(Path.join(root, "RELEASE_BOOTED"))
145145

146146
if match?({:win32, _}, :os.type()) do
147-
assert String.ends_with?(app_dir, "_build/dev/rel/RELEAS~1/lib/release_test-0.1.0")
148-
assert String.ends_with?(release_root, "_build\\dev\\rel\\RELEAS~1")
149-
assert String.ends_with?(root_dir, "_build/dev/rel/RELEAS~1")
147+
# `RELEAS~1` is the DOS path name (8 character) for the `release_test` directory
148+
assert app_dir =~ ~r"_build/dev/rel/(release_test|RELEAS~1)/lib/release_test-0\.1\.0$"
149+
assert release_root =~ ~r"_build\\dev\\rel\\(release_test|RELEAS~1)$"
150+
assert root_dir =~ ~r"_build/dev/rel/(release_test|RELEAS~1)$"
150151
assert String.ends_with?(sys_config_env, "releases\\0.1.0\\sys")
151152
assert String.ends_with?(sys_config_init, "releases\\0.1.0\\sys")
152153
else
@@ -285,7 +286,11 @@ defmodule Mix.Tasks.ReleaseTest do
285286
end
286287

287288
test "runs eval and version commands" do
288-
in_fixture("release_test", fn ->
289+
# In some Windows setups (mostly with Docker), `System.cmd/3` fails because
290+
# the path to the command/executable and one or more arguments contain spaces.
291+
tmp_dir = Path.join(inspect(__MODULE__), "runs_eval_and_version_commands")
292+
293+
in_fixture("release_test", tmp_dir, fn ->
289294
config = [releases: [eval: [include_erts: false, cookie: "abcdefghij"]]]
290295

291296
Mix.Project.in_project(:release_test, ".", config, fn _ ->
@@ -297,7 +302,7 @@ defmodule Mix.Tasks.ReleaseTest do
297302
assert String.trim_trailing(version) == "eval 0.1.0"
298303
refute File.exists?(Path.join(root, "RELEASE_BOOTED"))
299304

300-
{hello_world, 0} = System.cmd(script, ["eval", ~s[IO.puts :hello_world]])
305+
{hello_world, 0} = System.cmd(script, ["eval", "IO.puts :hello_world"])
301306
assert String.trim_trailing(hello_world) == "hello_world"
302307
refute File.exists?(Path.join(root, "RELEASE_BOOTED"))
303308

0 commit comments

Comments
 (0)