Class: RailVerdict::Git::Context
- Inherits:
-
Object
- Object
- RailVerdict::Git::Context
- Defined in:
- lib/rail_verdict/git/context.rb
Instance Attribute Summary collapse
-
#base ⇒ Object
readonly
Returns the value of attribute base.
-
#binary_paths ⇒ Object
readonly
Returns the value of attribute binary_paths.
-
#changed_files ⇒ Object
readonly
Returns the value of attribute changed_files.
-
#changed_line_set ⇒ Object
readonly
Returns the value of attribute changed_line_set.
-
#conflicted_paths ⇒ Object
readonly
Returns the value of attribute conflicted_paths.
-
#head ⇒ Object
readonly
Returns the value of attribute head.
-
#merge_base ⇒ Object
readonly
Returns the value of attribute merge_base.
-
#repository_root ⇒ Object
readonly
Returns the value of attribute repository_root.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(repository_root:, head:, base:, merge_base:, changed_files:, changed_line_set:, binary_paths:, conflicted_paths:) ⇒ Context
constructor
A new instance of Context.
- #rename_map ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize(repository_root:, head:, base:, merge_base:, changed_files:, changed_line_set:, binary_paths:, conflicted_paths:) ⇒ Context
Returns a new instance of Context.
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rail_verdict/git/context.rb', line 41 def initialize(repository_root:, head:, base:, merge_base:, changed_files:, changed_line_set:, binary_paths:, conflicted_paths:) @repository_root = repository_root.dup.freeze @head = head.dup.freeze @base = base.dup.freeze @merge_base = merge_base.dup.freeze @changed_files = changed_files.map(&:freeze).freeze @changed_line_set = deep_freeze_line_set(changed_line_set) @binary_paths = binary_paths.dup.freeze @conflicted_paths = conflicted_paths.dup.freeze freeze end |
Instance Attribute Details
#base ⇒ Object (readonly)
Returns the value of attribute base.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def base @base end |
#binary_paths ⇒ Object (readonly)
Returns the value of attribute binary_paths.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def binary_paths @binary_paths end |
#changed_files ⇒ Object (readonly)
Returns the value of attribute changed_files.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def changed_files @changed_files end |
#changed_line_set ⇒ Object (readonly)
Returns the value of attribute changed_line_set.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def changed_line_set @changed_line_set end |
#conflicted_paths ⇒ Object (readonly)
Returns the value of attribute conflicted_paths.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def conflicted_paths @conflicted_paths end |
#head ⇒ Object (readonly)
Returns the value of attribute head.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def head @head end |
#merge_base ⇒ Object (readonly)
Returns the value of attribute merge_base.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def merge_base @merge_base end |
#repository_root ⇒ Object (readonly)
Returns the value of attribute repository_root.
39 40 41 |
# File 'lib/rail_verdict/git/context.rb', line 39 def repository_root @repository_root end |
Class Method Details
.build(repository_root:, base_override:, configuration:, runner: ProcessRunner) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/rail_verdict/git/context.rb', line 76 def self.build(repository_root:, base_override:, configuration:, runner: ProcessRunner) root = File.realpath(repository_root) raise Git::NotARepository, "repository root does not exist: #{repository_root}" unless File.directory?(root) git_root = resolve_git_root(root, runner: runner) unless Pathname.new(git_root) == Pathname.new(root) || root.start_with?(git_root + File::SEPARATOR) || git_root == root git_root = root if File.directory?(File.join(root, ".git")) end unless Dir.exist?(File.join(git_root, ".git")) || File.file?(File.join(git_root, ".git")) toplevel = git_toplevel(root, runner: runner) if toplevel && File.directory?(toplevel) git_root = toplevel end end repository_root = git_root head = resolve_head(repository_root, runner: runner) base_raw = resolve_base_raw(base_override, configuration) if base_raw.nil? || base_raw.strip.empty? raise Git::BaseUnresolvable, "changed scope requires an explicit base: supply --base <revision> or set git.base in .railverdict.yml" end base = resolve_base_commit(base_raw.strip, repository_root, runner: runner) merge_base = resolve_merge_base(base, head, repository_root, runner: runner) changed_files, binary_set = resolve_changed_files(merge_base, head, repository_root, runner: runner) changed_line_set = resolve_changed_line_set(merge_base, head, changed_files, repository_root, runner: runner) conflicted = resolve_conflicts(repository_root, runner: runner) binary_paths = (binary_set.to_a + changed_line_set.select { |_, v| v.nil? }.keys).uniq.sort.freeze filtered_line_set = changed_line_set.reject { |_, v| v.nil? } new( repository_root: repository_root, head: head, base: base, merge_base: merge_base, changed_files: changed_files, changed_line_set: filtered_line_set, binary_paths: binary_paths, conflicted_paths: conflicted ) end |
Instance Method Details
#rename_map ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/rail_verdict/git/context.rb', line 66 def rename_map map = {} changed_files.each do |file| next unless file.status == :renamed map[file.new_path] = file.old_path if file.new_path && file.old_path end map.freeze end |
#to_h ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rail_verdict/git/context.rb', line 53 def to_h { "repository_root" => repository_root, "head" => head, "base" => base, "merge_base" => merge_base, "changed_files" => changed_files.map(&:to_h), "changed_line_set" => changed_line_set, "binary_paths" => binary_paths.sort, "conflicted_paths" => conflicted_paths.sort } end |