diff options
| author | Kasper Timm Hansen <kaspth@gmail.com> | 2019-08-04 01:32:41 +0200 | 
|---|---|---|
| committer | Kasper Timm Hansen <kaspth@gmail.com> | 2019-08-04 01:32:41 +0200 | 
| commit | 03e44f93001db97953917e0a100c627e189e2be6 (patch) | |
| tree | 644d82e33a8b7269bfeb22e7f363cd726a6c97be /railties/lib/rails/commands/credentials/credentials_command | |
| parent | 6db2c426c0156dd3738673a676261693cfe92a8d (diff) | |
| download | rails-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')
| -rw-r--r-- | railties/lib/rails/commands/credentials/credentials_command/diffing.rb | 43 | 
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 | 
