Class: LinterChanges::GitDiff

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/linter_changes/git_diff.rb

Instance Method Summary collapse

Constructor Details

#initialize(target_branch:) ⇒ GitDiff

Returns a new instance of GitDiff.



9
10
11
# File 'lib/linter_changes/git_diff.rb', line 9

def initialize(target_branch:)
  @target_branch = target_branch
end

Instance Method Details

#changed_filesObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/linter_changes/git_diff.rb', line 14

def changed_files
  return @changed_files if defined? @changed_files

  Logger.debug "Target branch: #{@target_branch}"
  cmd = "git diff --name-only #{@target_branch}...HEAD"
  Logger.debug "Executing command: #{cmd}"

  stdout, stderr, status = Open3.capture3(cmd)
  unless status.success?
    Logger.error "Error obtaining git changes: #{stderr}"
    exit 1
  end

  @changed_files = stdout.strip.split("\n")
  Logger.debug "Changed files: #{@changed_files.join(', ')}"
  @changed_files
end

#changed_lines_contains?(file:, pattern:) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
38
39
40
41
# File 'lib/linter_changes/git_diff.rb', line 33

def changed_lines_contains? file:, pattern:
  cmd = "git diff #{@target_branch}...HEAD -- #{file}"
  stdout, stderr, status = Open3.capture3(cmd)
  unless status.success?
    Logger.error "Error obtaining git diff for #{file}: #{stderr}"
    exit 1
  end
  stdout.include? pattern
end

#reference_exists?(ref) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/linter_changes/git_diff.rb', line 44

def reference_exists?(ref)
  !!system("git rev-parse --verify #{ref} > /dev/null 2>&1")
end

#references_exists?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/linter_changes/git_diff.rb', line 49

def references_exists?
  return @references_exist if defined?(@references_exists)

  @references_exist = if !reference_exists?(@target_branch)
                        Logger.debug("Reference for #{@target_branch} does not exists")
                        false
                      elsif !reference_exists?('HEAD')
                        Logger.debug('Reference for HEAD does not exists')
                        false
                      else
                        true
                      end
  @references_exist
end