Escape more paths and write a test
This commit is contained in:
@@ -1,33 +1,31 @@
|
|||||||
module Kamal::Commands::Builder::Clone
|
module Kamal::Commands::Builder::Clone
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
delegate :clone_directory, :build_directory, to: :"config.builder"
|
|
||||||
end
|
|
||||||
|
|
||||||
def clone
|
def clone
|
||||||
git :clone, escaped_root, "--recurse-submodules", path: clone_directory
|
git :clone, escaped_root, "--recurse-submodules", path: config.builder.clone_directory.shellescape
|
||||||
end
|
end
|
||||||
|
|
||||||
def clone_reset_steps
|
def clone_reset_steps
|
||||||
[
|
[
|
||||||
git(:remote, "set-url", :origin, escaped_root, path: build_directory),
|
git(:remote, "set-url", :origin, escaped_root, path: escaped_build_directory),
|
||||||
git(:fetch, :origin, path: build_directory),
|
git(:fetch, :origin, path: escaped_build_directory),
|
||||||
git(:reset, "--hard", Kamal::Git.revision, path: build_directory),
|
git(:reset, "--hard", Kamal::Git.revision, path: escaped_build_directory),
|
||||||
git(:clean, "-fdx", path: build_directory),
|
git(:clean, "-fdx", path: escaped_build_directory),
|
||||||
git(:submodule, :update, "--init", path: build_directory)
|
git(:submodule, :update, "--init", path: escaped_build_directory)
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def clone_status
|
def clone_status
|
||||||
git :status, "--porcelain", path: build_directory
|
git :status, "--porcelain", path: escaped_build_directory
|
||||||
end
|
end
|
||||||
|
|
||||||
def clone_revision
|
def clone_revision
|
||||||
git :"rev-parse", :HEAD, path: build_directory
|
git :"rev-parse", :HEAD, path: escaped_build_directory
|
||||||
end
|
end
|
||||||
|
|
||||||
def escaped_root
|
def escaped_root
|
||||||
Kamal::Git.root.shellescape
|
Kamal::Git.root.shellescape
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def escaped_build_directory
|
||||||
|
config.builder.build_directory.shellescape
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -149,6 +149,21 @@ class CommandsBuilderTest < ActiveSupport::TestCase
|
|||||||
assert_equal "docker info --format '{{index .RegistryConfig.Mirrors 0}}'", command.first_mirror.join(" ")
|
assert_equal "docker info --format '{{index .RegistryConfig.Mirrors 0}}'", command.first_mirror.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "clone path with spaces" do
|
||||||
|
command = new_builder_command
|
||||||
|
Kamal::Git.stubs(:root).returns("/absolute/path with spaces")
|
||||||
|
clone_command = command.clone.join(" ")
|
||||||
|
clone_reset_commands = command.clone_reset_steps.map { |a| a.join(" ") }
|
||||||
|
|
||||||
|
assert_match(%r{path\\ with\\ space}, clone_command)
|
||||||
|
refute_match(%r{path with spaces}, clone_command)
|
||||||
|
|
||||||
|
clone_reset_commands.each do |command|
|
||||||
|
assert_match(%r{path\\ with\\ space}, command)
|
||||||
|
refute_match(%r{path with spaces}, command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def new_builder_command(additional_config = {})
|
def new_builder_command(additional_config = {})
|
||||||
Kamal::Commands::Builder.new(Kamal::Configuration.new(@config.deep_merge(additional_config), version: "123"))
|
Kamal::Commands::Builder.new(Kamal::Configuration.new(@config.deep_merge(additional_config), version: "123"))
|
||||||
|
|||||||
Reference in New Issue
Block a user