Class: Overcommit::HookContext::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/overcommit/hook_context/base.rb

Overview

This class is abstract.

Contains helpers related to the context with which a hook is being run.

It acts as an adapter to the arguments passed to the hook, as well as context-specific information such as staged files, providing a single source of truth for this context.

This is also important to house in a separate object so that any calculations can be memoized across all hooks in a single object, which helps with performance.

Instance Method Summary collapse

Constructor Details

#initialize(config, args, input) ⇒ Base

Creates a hook context from the given configuration and input options.


19
20
21
22
23
# File 'lib/overcommit/hook_context/base.rb', line 19

def initialize(config, args, input)
  @config = config
  @args = args
  @input = input
end

Instance Method Details

#all_filesArray<String>

Returns the full list of files tracked by git


85
86
87
# File 'lib/overcommit/hook_context/base.rb', line 85

def all_files
  Overcommit::GitRepo.all_files
end

#cleanup_environmentObject

Resets the environment to an appropriate state.

This is called after the hooks have been run by the [HookRunner]. Different hook types can perform different cleanup operations, which are intended to “undo” the results of the call to #setup_environment.


68
69
70
# File 'lib/overcommit/hook_context/base.rb', line 68

def cleanup_environment
  # Implemented by subclass, if applicable
end

#execute_hook(command) ⇒ Object

Executes a command as if it were a regular git hook, passing all command-line arguments and the standard input stream.

This is intended to be used by ad hoc hooks so developers can link up their existing git hooks with Overcommit.


30
31
32
# File 'lib/overcommit/hook_context/base.rb', line 30

def execute_hook(command)
  Overcommit::Utils.execute(command, args: @args, input: input_string)
end

#hook_class_nameString

Returns the camel-cased type of this hook (e.g. PreCommit)


37
38
39
# File 'lib/overcommit/hook_context/base.rb', line 37

def hook_class_name
  self.class.name.split('::').last
end

#hook_script_nameString

Returns the actual name of the hook script being run (e.g. pre-commit).


51
52
53
# File 'lib/overcommit/hook_context/base.rb', line 51

def hook_script_name
  hook_type_name.tr('_', '-')
end

#hook_type_nameString

Returns the snake-cased type of this hook (e.g. pre_commit)


44
45
46
# File 'lib/overcommit/hook_context/base.rb', line 44

def hook_type_name
  Overcommit::Utils.snake_case(hook_class_name)
end

#input_linesArray<String>

Returns an array of lines passed to the hook via the standard input stream.


101
102
103
# File 'lib/overcommit/hook_context/base.rb', line 101

def input_lines
  @input_lines ||= input_string.split("\n")
end

#input_stringString

Returns the contents of the entire standard input stream that were passed to the hook.


93
94
95
# File 'lib/overcommit/hook_context/base.rb', line 93

def input_string
  @input_string ||= @input.read
end

#modified_filesArray<String>

Returns a list of files that have been modified.

By default, this returns an empty list. Subclasses should implement if there is a concept of files changing for the type of hook being run.


78
79
80
# File 'lib/overcommit/hook_context/base.rb', line 78

def modified_files
  []
end

#post_fail_messageString

Returns a message to display on failure.


108
109
110
# File 'lib/overcommit/hook_context/base.rb', line 108

def post_fail_message
  nil
end

#setup_environmentObject

Initializes anything related to the environment.

This is called before the hooks are run by the [HookRunner]. Different hook types can perform different setup.


59
60
61
# File 'lib/overcommit/hook_context/base.rb', line 59

def setup_environment
  # Implemented by subclass, if applicable
end