Module: Overcommit::HookContext::Helpers::FileModifications
- Defined in:
- lib/overcommit/hook_context/helpers/file_modifications.rb
Overview
This module contains methods for determining what files were changed and on what unique line numbers did the change occur.
Instance Method Summary collapse
-
#amendment? ⇒ Boolean
Returns whether this hook run was triggered by ‘git commit –amend`.
-
#modified_files ⇒ Object
Get a list of added, copied, or modified files that have been staged.
-
#modified_lines_in_file(file) ⇒ Object
Returns the set of line numbers corresponding to the lines that were changed in a specified file.
Instance Method Details
#amendment? ⇒ Boolean
Returns whether this hook run was triggered by ‘git commit –amend`
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/overcommit/hook_context/helpers/file_modifications.rb', line 9 def amendment? return @amendment unless @amendment.nil? cmd = Overcommit::Utils.parent_command return unless cmd amend_pattern = 'commit(\s.*)?\s--amend(\s|$)' # Since the ps command can return invalid byte sequences for commands # containing unicode characters, we replace the offending characters, # since the pattern we're looking for will consist of ASCII characters unless cmd.valid_encoding? cmd = Overcommit::Utils. parent_command. encode('UTF-16be', invalid: :replace, replace: '?'). encode('UTF-8') end return @amendment if # True if the command is a commit with the --amend flag @amendment = !(/\s#{amend_pattern}/ =~ cmd).nil? # Check for git aliases that call `commit --amend` `git config --get-regexp "^alias\\." "#{amend_pattern}"`. scan(/alias\.([-\w]+)/). # Extract the alias each do |match| return @amendment if # True if the command uses a git alias for `commit --amend` @amendment = !(/git(\.exe)?\s+#{match[0]}/ =~ cmd).nil? end @amendment end |
#modified_files ⇒ Object
Get a list of added, copied, or modified files that have been staged. Renames and deletions are ignored, since there should be nothing to check.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/overcommit/hook_context/helpers/file_modifications.rb', line 45 def modified_files unless @modified_files currently_staged = Overcommit::GitRepo.modified_files(staged: true) @modified_files = currently_staged # Include files modified in last commit if amending if amendment? subcmd = 'show --format=%n' previously_modified = Overcommit::GitRepo.modified_files(subcmd: subcmd) @modified_files |= filter_modified_files(previously_modified) end end @modified_files end |
#modified_lines_in_file(file) ⇒ Object
Returns the set of line numbers corresponding to the lines that were changed in a specified file.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/overcommit/hook_context/helpers/file_modifications.rb', line 62 def modified_lines_in_file(file) @modified_lines ||= {} unless @modified_lines[file] @modified_lines[file] = Overcommit::GitRepo.extract_modified_lines(file, staged: true) # Include lines modified in last commit if amending if amendment? subcmd = 'show --format=%n' @modified_lines[file] += Overcommit::GitRepo.extract_modified_lines(file, subcmd: subcmd) end end @modified_lines[file] end |