Class: Overcommit::HookSigner
- Inherits:
-
Object
- Object
- Overcommit::HookSigner
- Defined in:
- lib/overcommit/hook_signer.rb
Overview
Calculates, stores, and retrieves stored signatures of hook plugins.
Constant Summary collapse
- IGNORED_CONFIG_KEYS =
We don’t want to include the skip setting as it is set by Overcommit itself
%w[skip].freeze
Instance Attribute Summary collapse
-
#hook_name ⇒ Object
readonly
Returns the value of attribute hook_name.
Instance Method Summary collapse
-
#hook_path ⇒ String
Returns the path of the file that should be incorporated into this hooks signature.
-
#initialize(hook_name, config, context) ⇒ HookSigner
constructor
A new instance of HookSigner.
- #signable_file?(file) ⇒ Boolean
-
#signature_changed? ⇒ true, false
Return whether the signature for this hook has changed since it was last calculated.
-
#update_signature! ⇒ Object
Update the current stored signature for this hook.
Constructor Details
#initialize(hook_name, config, context) ⇒ HookSigner
Returns a new instance of HookSigner.
15 16 17 18 19 |
# File 'lib/overcommit/hook_signer.rb', line 15 def initialize(hook_name, config, context) @hook_name = hook_name @config = config @context = context end |
Instance Attribute Details
#hook_name ⇒ Object (readonly)
Returns the value of attribute hook_name.
6 7 8 |
# File 'lib/overcommit/hook_signer.rb', line 6 def hook_name @hook_name end |
Instance Method Details
#hook_path ⇒ String
Returns the path of the file that should be incorporated into this hooks signature.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/overcommit/hook_signer.rb', line 25 def hook_path @hook_path ||= begin plugin_path = File.join(@config.plugin_directory, @context.hook_type_name, "#{Overcommit::Utils.snake_case(@hook_name)}.rb") if File.exist?(plugin_path) plugin_path else # Otherwise this is an ad hoc hook using an existing hook script hook_config = @config.for_hook(@hook_name, @context.hook_class_name) command = Array(hook_config['command'] || hook_config['required_executable']) if @config.verify_signatures? && signable_file?(command.first) && !Overcommit::GitRepo.tracked?(command.first) raise Overcommit::Exceptions::InvalidHookDefinition, 'Hook specified a `required_executable` or `command` that ' \ 'is a path relative to the root of the repository, and so ' \ 'must be tracked by Git in order to be signed' end File.join(Overcommit::Utils.repo_root, command.first.to_s) end end end |
#signable_file?(file) ⇒ Boolean
53 54 55 56 57 58 |
# File 'lib/overcommit/hook_signer.rb', line 53 def signable_file?(file) return unless file sep = Overcommit::OS.windows? ? '\\' : File::SEPARATOR file.start_with?(".#{sep}") || file.start_with?(Overcommit::Utils.repo_root) end |
#signature_changed? ⇒ true, false
Return whether the signature for this hook has changed since it was last calculated.
64 65 66 |
# File 'lib/overcommit/hook_signer.rb', line 64 def signature_changed? signature != stored_signature end |
#update_signature! ⇒ Object
Update the current stored signature for this hook.
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/overcommit/hook_signer.rb', line 69 def update_signature! result = Overcommit::Utils.execute( %w[git config --local] + [signature_config_key, signature] ) unless result.success? raise Overcommit::Exceptions::GitConfigError, "Unable to write to local repo git config: #{result.stderr}" end end |