aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/commands/credentials/credentials_command/diffing.rb
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2019-08-04 01:32:41 +0200
committerKasper Timm Hansen <kaspth@gmail.com>2019-08-04 01:32:41 +0200
commit03e44f93001db97953917e0a100c627e189e2be6 (patch)
tree644d82e33a8b7269bfeb22e7f363cd726a6c97be /railties/lib/rails/commands/credentials/credentials_command/diffing.rb
parent6db2c426c0156dd3738673a676261693cfe92a8d (diff)
downloadrails-03e44f93001db97953917e0a100c627e189e2be6.tar.gz
rails-03e44f93001db97953917e0a100c627e189e2be6.tar.bz2
rails-03e44f93001db97953917e0a100c627e189e2be6.zip
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.
Diffstat (limited to 'railties/lib/rails/commands/credentials/credentials_command/diffing.rb')
-rw-r--r--railties/lib/rails/commands/credentials/credentials_command/diffing.rb43
1 files changed, 13 insertions, 30 deletions
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