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, **options) ⇒ Base

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

Parameters:

  • config (Overcommit::Configuration)
  • args (Array<String>)
  • input (IO)

    standard input stream

  • options (Hash)

    cli options



22
23
24
25
26
27
# File 'lib/overcommit/hook_context/base.rb', line 22

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

Instance Method Details

#all_filesArray<String>

Returns the full list of files tracked by git

Returns:

  • (Array<String>)


89
90
91
# File 'lib/overcommit/hook_context/base.rb', line 89

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.



72
73
74
# File 'lib/overcommit/hook_context/base.rb', line 72

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.



34
35
36
# File 'lib/overcommit/hook_context/base.rb', line 34

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)

Returns:

  • (String)


41
42
43
# File 'lib/overcommit/hook_context/base.rb', line 41

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).

Returns:

  • (String)


55
56
57
# File 'lib/overcommit/hook_context/base.rb', line 55

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

#hook_type_nameString

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

Returns:

  • (String)


48
49
50
# File 'lib/overcommit/hook_context/base.rb', line 48

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.

Returns:

  • (Array<String>)


105
106
107
# File 'lib/overcommit/hook_context/base.rb', line 105

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.

Returns:

  • (String)


97
98
99
# File 'lib/overcommit/hook_context/base.rb', line 97

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.

Returns:

  • (Array<String>)


82
83
84
# File 'lib/overcommit/hook_context/base.rb', line 82

def modified_files
  []
end

#post_fail_messageString

Returns a message to display on failure.

Returns:

  • (String)


112
113
114
# File 'lib/overcommit/hook_context/base.rb', line 112

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.



63
64
65
# File 'lib/overcommit/hook_context/base.rb', line 63

def setup_environment
  # Implemented by subclass, if applicable
end