diff --git a/lib/kamal/commands/app.rb b/lib/kamal/commands/app.rb index e25efd20..5f0744cc 100644 --- a/lib/kamal/commands/app.rb +++ b/lib/kamal/commands/app.rb @@ -234,6 +234,6 @@ class Kamal::Commands::App < Kamal::Commands::Base end def copy_contents(source, destination, continue_on_error: false) - [ :cp, "-rn", "#{source}/*", destination, *("|| true" if continue_on_error)] + [ :cp, "-rnT", "#{source}", destination, *("|| true" if continue_on_error)] end end diff --git a/test/cli/app_test.rb b/test/cli/app_test.rb index 0ce7b32f..ba58d607 100644 --- a/test/cli/app_test.rb +++ b/test/cli/app_test.rb @@ -84,7 +84,7 @@ class CliAppTest < CliTestCase run_command("boot", config: :with_assets).tap do |output| assert_match "docker tag dhh/app:latest dhh/app:latest", output - assert_match "/usr/bin/env mkdir -p .kamal/assets/volumes/app-web-latest ; cp -rn .kamal/assets/extracted/app-web-latest/* .kamal/assets/volumes/app-web-latest ; cp -rn .kamal/assets/extracted/app-web-latest/* .kamal/assets/volumes/app-web-123 || true ; cp -rn .kamal/assets/extracted/app-web-123/* .kamal/assets/volumes/app-web-latest || true", output + assert_match "/usr/bin/env mkdir -p .kamal/assets/volumes/app-web-latest ; cp -rnT .kamal/assets/extracted/app-web-latest .kamal/assets/volumes/app-web-latest ; cp -rnT .kamal/assets/extracted/app-web-latest .kamal/assets/volumes/app-web-123 || true ; cp -rnT .kamal/assets/extracted/app-web-123 .kamal/assets/volumes/app-web-latest || true", output assert_match "/usr/bin/env mkdir -p .kamal/assets/extracted/app-web-latest && docker stop -t 1 app-web-assets 2> /dev/null || true && docker run --name app-web-assets --detach --rm dhh/app:latest sleep 1000000 && docker cp -L app-web-assets:/public/assets/. .kamal/assets/extracted/app-web-latest && docker stop -t 1 app-web-assets", output assert_match /docker run --detach --restart unless-stopped --name app-web-latest --hostname 1.1.1.1-[0-9a-f]{12} /, output assert_match "docker container ls --all --filter name=^app-web-123$ --quiet | xargs docker stop", output diff --git a/test/commands/app_test.rb b/test/commands/app_test.rb index ce2bf4c6..278dcaa1 100644 --- a/test/commands/app_test.rb +++ b/test/commands/app_test.rb @@ -358,14 +358,14 @@ class CommandsAppTest < ActiveSupport::TestCase test "sync asset volumes" do assert_equal [ :mkdir, "-p", ".kamal/assets/volumes/app-web-999", ";", - :cp, "-rn", ".kamal/assets/extracted/app-web-999/*", ".kamal/assets/volumes/app-web-999" + :cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-999" ], new_command(asset_path: "/public/assets").sync_asset_volumes assert_equal [ :mkdir, "-p", ".kamal/assets/volumes/app-web-999", ";", - :cp, "-rn", ".kamal/assets/extracted/app-web-999/*", ".kamal/assets/volumes/app-web-999", ";", - :cp, "-rn", ".kamal/assets/extracted/app-web-999/*", ".kamal/assets/volumes/app-web-998", "|| true", ";", - :cp, "-rn", ".kamal/assets/extracted/app-web-998/*", ".kamal/assets/volumes/app-web-999", "|| true", + :cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-999", ";", + :cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-998", "|| true", ";", + :cp, "-rnT", ".kamal/assets/extracted/app-web-998", ".kamal/assets/volumes/app-web-999", "|| true", ], new_command(asset_path: "/public/assets").sync_asset_volumes(old_version: 998) end