Class: Overcommit::Hook::Base
- Inherits:
-
Object
- Object
- Overcommit::Hook::Base
- Extended by:
- Forwardable
- Defined in:
- lib/overcommit/hook/base.rb
Overview
Functionality common to all hooks.
Direct Known Subclasses
CommitMsg::Base, PostCheckout::Base, PostCommit::Base, PostMerge::Base, PostRewrite::Base, PreCommit::Base, PreCommit::Jsl, PreCommit::Mdl, PrePush::Base, PreRebase::Base
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
-
#applicable_files ⇒ Object
Gets a list of staged files that apply to this hook based on its configured ‘include` and `exclude` lists.
-
#command ⇒ Array<String>
Return command to execute for this hook.
- #description ⇒ Object
- #enabled? ⇒ Boolean
-
#execute(cmd, options = {}) ⇒ #status, ...
Execute a command in a separate process.
- #execute_in_background(cmd) ⇒ Object
-
#flags ⇒ Array<String>
Return command line flags to be passed to the command.
- #in_path?(cmd) ⇒ Boolean
-
#included_files ⇒ Object
Gets a list of all files that apply to this hook based on its configured ‘include` and `exclude` lists.
-
#initialize(config, context) ⇒ Base
constructor
A new instance of Base.
- #name ⇒ Object
- #parallelize? ⇒ Boolean
- #processors ⇒ Object
- #quiet? ⇒ Boolean
- #required? ⇒ Boolean
- #required_executable ⇒ Object
- #required_libraries ⇒ Object
-
#run ⇒ Object
Runs the hook.
- #run? ⇒ Boolean
-
#run_and_transform ⇒ Object
Runs the hook and transforms the status returned based on the hook’s configuration.
- #skip? ⇒ Boolean
Constructor Details
#initialize(config, context) ⇒ Base
Returns a new instance of Base.
25 26 27 28 |
# File 'lib/overcommit/hook/base.rb', line 25 def initialize(config, context) @config = config.for_hook(self) @context = context end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
21 22 23 |
# File 'lib/overcommit/hook/base.rb', line 21 def config @config end |
Instance Method Details
#applicable_files ⇒ Object
Gets a list of staged files that apply to this hook based on its configured ‘include` and `exclude` lists.
157 158 159 |
# File 'lib/overcommit/hook/base.rb', line 157 def applicable_files @applicable_files ||= select_applicable(modified_files) end |
#command ⇒ Array<String>
Return command to execute for this hook.
This is intended to be configurable so hooks can prefix their commands with ‘bundle exec` or similar. It will appends the command line flags specified by the `flags` option after.
Note that any files intended to be passed must be handled by the hook itself.
133 134 135 |
# File 'lib/overcommit/hook/base.rb', line 133 def command Array(@config['command'] || required_executable) + flags end |
#description ⇒ Object
56 57 58 |
# File 'lib/overcommit/hook/base.rb', line 56 def description @config['description'] || "Run #{name}" end |
#enabled? ⇒ Boolean
76 77 78 |
# File 'lib/overcommit/hook/base.rb', line 76 def enabled? @config['enabled'] != false end |
#execute(cmd, options = {}) ⇒ #status, ...
Execute a command in a separate process.
If ‘splittable_args` is specified, ensures that those arguments are concatenated onto the end of the `cmd` arguments, but split up so that the operating system’s maximum command length is not exceeded. This is useful for splitting up long file lists.
107 108 109 |
# File 'lib/overcommit/hook/base.rb', line 107 def execute(cmd, = {}) Overcommit::Utils.execute(cmd, ) end |
#execute_in_background(cmd) ⇒ Object
111 112 113 |
# File 'lib/overcommit/hook/base.rb', line 111 def execute_in_background(cmd) Overcommit::Utils.execute_in_background(cmd) end |
#flags ⇒ Array<String>
Return command line flags to be passed to the command.
This excludes the list of files, as that must be handled by the hook itself.
The intention here is to provide flexibility for when a tool removes/renames its flags. Rather than wait for Overcommit to update the flags it uses, you can update your configuration to use the new flags right away without being blocked.
Also note that any flags containing dynamic content must be passed in the hook’s #run method.
151 152 153 |
# File 'lib/overcommit/hook/base.rb', line 151 def flags Array(@config['flags']) end |
#in_path?(cmd) ⇒ Boolean
89 90 91 |
# File 'lib/overcommit/hook/base.rb', line 89 def in_path?(cmd) Overcommit::Utils.in_path?(cmd) end |
#included_files ⇒ Object
Gets a list of all files that apply to this hook based on its configured ‘include` and `exclude` lists.
163 164 165 |
# File 'lib/overcommit/hook/base.rb', line 163 def included_files @included_files ||= select_applicable(all_files) end |
#name ⇒ Object
52 53 54 |
# File 'lib/overcommit/hook/base.rb', line 52 def name self.class.name.split('::').last end |
#parallelize? ⇒ Boolean
64 65 66 |
# File 'lib/overcommit/hook/base.rb', line 64 def parallelize? @config['parallelize'] != false end |
#processors ⇒ Object
68 69 70 |
# File 'lib/overcommit/hook/base.rb', line 68 def processors @config.fetch('processors', 1) end |
#quiet? ⇒ Boolean
72 73 74 |
# File 'lib/overcommit/hook/base.rb', line 72 def quiet? @config['quiet'] end |
#required? ⇒ Boolean
60 61 62 |
# File 'lib/overcommit/hook/base.rb', line 60 def required? @config['required'] end |
#required_executable ⇒ Object
115 116 117 |
# File 'lib/overcommit/hook/base.rb', line 115 def required_executable @config['required_executable'] end |
#required_libraries ⇒ Object
119 120 121 |
# File 'lib/overcommit/hook/base.rb', line 119 def required_libraries Array(@config['required_library'] || @config['required_libraries']) end |
#run ⇒ Object
Runs the hook.
31 32 33 |
# File 'lib/overcommit/hook/base.rb', line 31 def run raise NotImplementedError, 'Hook must define `run`' end |
#run? ⇒ Boolean
84 85 86 87 |
# File 'lib/overcommit/hook/base.rb', line 84 def run? enabled? && !(@config['requires_files'] && applicable_files.empty?) end |
#run_and_transform ⇒ Object
Runs the hook and transforms the status returned based on the hook’s configuration.
Poorly named because we already have a bunch of hooks in the wild that implement ‘#run`, and we needed a wrapper step to transform the status based on any custom configuration.
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/overcommit/hook/base.rb', line 41 def run_and_transform if output = check_for_requirements status = :fail else result = Overcommit::Utils.with_environment(@config.fetch('env', {})) { run } status, output = process_hook_return_value(result) end [transform_status(status), output] end |
#skip? ⇒ Boolean
80 81 82 |
# File 'lib/overcommit/hook/base.rb', line 80 def skip? @config['skip'] end |