diff --git a/lib/mrsk/cli/build.rb b/lib/mrsk/cli/build.rb index e52b3358b..e9aeec66e 100644 --- a/lib/mrsk/cli/build.rb +++ b/lib/mrsk/cli/build.rb @@ -17,9 +17,15 @@ def push verify_local_dependencies run_hook "pre-build" + if (uncommitted_changes = Mrsk::Utils.uncommitted_changes).present? + say "The following paths have uncommitted changes:\n #{uncommitted_changes}", :yellow + end + run_locally do begin - MRSK.with_verbosity(:debug) { execute *MRSK.builder.push } + MRSK.with_verbosity(:debug) do + execute *MRSK.builder.push + end rescue SSHKit::Command::Failed => e if e.message =~ /(no builder)|(no such file or directory)/ error "Missing compatible builder, so creating a new one first" diff --git a/lib/mrsk/configuration.rb b/lib/mrsk/configuration.rb index ee6dce056..48c6cd3aa 100644 --- a/lib/mrsk/configuration.rb +++ b/lib/mrsk/configuration.rb @@ -253,7 +253,7 @@ def role_names def git_version @git_version ||= if system("git rev-parse") - uncommitted_suffix = `git status --porcelain`.strip.present? ? "_uncommitted_#{SecureRandom.hex(8)}" : "" + uncommitted_suffix = Mrsk::Utils.uncommitted_changes.present? ? "_uncommitted_#{SecureRandom.hex(8)}" : "" "#{`git rev-parse HEAD`.strip}#{uncommitted_suffix}" else diff --git a/lib/mrsk/utils.rb b/lib/mrsk/utils.rb index e463f5478..939c92dd0 100644 --- a/lib/mrsk/utils.rb +++ b/lib/mrsk/utils.rb @@ -93,4 +93,8 @@ def abbreviate_version(version) end end end + + def uncommitted_changes + `git status --porcelain`.strip + end end diff --git a/test/configuration_test.rb b/test/configuration_test.rb index 0f7e12ffe..d58fd6564 100644 --- a/test/configuration_test.rb +++ b/test/configuration_test.rb @@ -84,7 +84,7 @@ class ConfigurationTest < ActiveSupport::TestCase ENV.delete("VERSION") @config.expects(:`).with("git rev-parse HEAD").returns("git-version") - @config.expects(:`).with("git status --porcelain").returns("") + Mrsk::Utils.expects(:uncommitted_changes).returns("") assert_equal "git-version", @config.version end @@ -92,7 +92,7 @@ class ConfigurationTest < ActiveSupport::TestCase ENV.delete("VERSION") @config.expects(:`).with("git rev-parse HEAD").returns("git-version") - @config.expects(:`).with("git status --porcelain").returns("M file\n") + Mrsk::Utils.expects(:uncommitted_changes).returns("M file\n") assert_match /^git-version_uncommitted_[0-9a-f]{16}$/, @config.version end diff --git a/test/utils_test.rb b/test/utils_test.rb index 24a1b96b6..0c42d72b9 100644 --- a/test/utils_test.rb +++ b/test/utils_test.rb @@ -61,4 +61,14 @@ class UtilsTest < ActiveSupport::TestCase assert_equal "\"https://example.com/\\$2\"", Mrsk::Utils.escape_shell_value("https://example.com/$2") end + + test "uncommitted changes exist" do + Mrsk::Utils.expects(:`).with("git status --porcelain").returns("M file\n") + assert_equal "M file", Mrsk::Utils.uncommitted_changes + end + + test "uncommitted changes do not exist" do + Mrsk::Utils.expects(:`).with("git status --porcelain").returns("") + assert_equal "", Mrsk::Utils.uncommitted_changes + end end