From 03e44f93001db97953917e0a100c627e189e2be6 Mon Sep 17 00:00:00 2001 From: Kasper Timm Hansen Date: Sun, 4 Aug 2019 01:32:41 +0200 Subject: Revise credentials diffing flow to use a separate diff command Didn't like the complicated stuff that happened on credentials:edit. It would append to .gitattributes multiple times. Though I see why it was written that way. I'm cutting off for now, but since this new flow would require each developer to run --enable perhaps this should really be: 1. Developer enrolls Rails app by running `credentials:diff --enable` 2. credentials:edit checks .gitattributes for `diff=rails_credentials` and if the current file is covered by that. 3. If so, set up the "rails_credentials" driver automatically. --- .../credentials/credentials_command/diffing.rb | 43 +++++++--------------- 1 file changed, 13 insertions(+), 30 deletions(-) (limited to 'railties/lib/rails/commands/credentials/credentials_command/diffing.rb') diff --git a/railties/lib/rails/commands/credentials/credentials_command/diffing.rb b/railties/lib/rails/commands/credentials/credentials_command/diffing.rb index 1598ecaa8d..b7330178a3 100644 --- a/railties/lib/rails/commands/credentials/credentials_command/diffing.rb +++ b/railties/lib/rails/commands/credentials/credentials_command/diffing.rb @@ -3,45 +3,28 @@ module Rails::Command::CredentialsCommand::Diffing # :nodoc: class Error < StandardError; end - def enable_credentials_diffing - unless already_answered? || enabled? - answer = yes?("Would you like to make the credentials diff from git more readable in the future? [Y/n]") + def enable_diffing + if enabled? + say "Already enabled!" + else + enable + say "Diffing enabled! Editing a credentials file will display a diff of what actually changed." end - - enable if answer - FileUtils.touch(tracker) unless answer.nil? rescue Error - say "Couldn't setup git to enable credentials diffing" + say "Couldn't setup Git to enable credentials diffing." end private - def already_answered? - tracker.exist? - end - def enabled? - system_call("git config --get 'diff.rails_credentials.textconv'", accepted_codes: [0, 1]) + system "git config --get diff.rails_credentials.textconv", out: File::NULL end def enable - system_call("git config diff.rails_credentials.textconv 'bin/rails credentials:diff'", accepted_codes: [0]) - - git_attributes = Rails.root.join(".gitattributes") - File.open(git_attributes, "a+") do |file| - file.write(<<~EOM) - config/credentials/*.yml.enc diff=rails_credentials - config/credentials.yml.enc diff=rails_credentials - EOM - end - end - - def tracker - Rails.root.join("tmp", "rails_pretty_credentials") - end + raise Error unless system("git config diff.rails_credentials.textconv 'bin/rails credentials:diff'") - def system_call(command_line, accepted_codes:) - result = system(command_line) - raise(Error) if accepted_codes.exclude?($?.exitstatus) - result + Rails.root.join(".gitattributes").write(<<~end_of_template, mode: "a") + config/credentials/*.yml.enc diff=rails_credentials + config/credentials.yml.enc diff=rails_credentials + end_of_template end end -- cgit v1.2.3