Class: Gitlab::Diff::DiffRefs
- Inherits:
-
Object
- Object
- Gitlab::Diff::DiffRefs
- Defined in:
- lib/gitlab/diff/diff_refs.rb
Instance Attribute Summary collapse
-
#base_sha ⇒ Object
readonly
Returns the value of attribute base_sha.
-
#head_sha ⇒ Object
readonly
Returns the value of attribute head_sha.
-
#start_sha ⇒ Object
readonly
Returns the value of attribute start_sha.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #compare_in(project) ⇒ Object
-
#complete? ⇒ Boolean
There is only one case in which we will have ‘start_sha` and `head_sha`, but not `base_sha`, which is when a diff is generated between an orphaned branch and another branch, which means there is no base, but we’re still able to highlight it, and to create diff notes, which are the primary things ‘DiffRefs` are used for.
- #hash ⇒ Object
-
#initialize(base_sha:, head_sha:, start_sha: base_sha) ⇒ DiffRefs
constructor
A new instance of DiffRefs.
Constructor Details
#initialize(base_sha:, head_sha:, start_sha: base_sha) ⇒ DiffRefs
Returns a new instance of DiffRefs.
10 11 12 13 14 |
# File 'lib/gitlab/diff/diff_refs.rb', line 10 def initialize(base_sha:, head_sha:, start_sha: base_sha) @base_sha = base_sha @start_sha = start_sha @head_sha = head_sha end |
Instance Attribute Details
#base_sha ⇒ Object (readonly)
Returns the value of attribute base_sha.
6 7 8 |
# File 'lib/gitlab/diff/diff_refs.rb', line 6 def base_sha @base_sha end |
#head_sha ⇒ Object (readonly)
Returns the value of attribute head_sha.
8 9 10 |
# File 'lib/gitlab/diff/diff_refs.rb', line 8 def head_sha @head_sha end |
#start_sha ⇒ Object (readonly)
Returns the value of attribute start_sha.
7 8 9 |
# File 'lib/gitlab/diff/diff_refs.rb', line 7 def start_sha @start_sha end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
16 17 18 19 20 21 |
# File 'lib/gitlab/diff/diff_refs.rb', line 16 def ==(other) other.is_a?(self.class) && Git.shas_eql?(base_sha, other.base_sha) && Git.shas_eql?(start_sha, other.start_sha) && Git.shas_eql?(head_sha, other.head_sha) end |
#compare_in(project) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gitlab/diff/diff_refs.rb', line 43 def compare_in(project) # We're at the initial commit, so just get that as we can't compare to anything. if Gitlab::Git.blank_ref?(start_sha) project.commit(head_sha) else straight = start_sha == base_sha CompareService.new(project, head_sha).execute(project, start_sha, base_sha: base_sha, straight: straight) end end |
#complete? ⇒ Boolean
There is only one case in which we will have ‘start_sha` and `head_sha`, but not `base_sha`, which is when a diff is generated between an orphaned branch and another branch, which means there is no base, but we’re still able to highlight it, and to create diff notes, which are the primary things ‘DiffRefs` are used for. `DiffRefs` are “complete” when they have `start_sha` and `head_sha`, because `base_sha` can always be derived from this, to return an actual sha, or `nil`. We have `base_sha` directly available on `DiffRefs` because it’s faster# than having to look it up in the repo every time.
39 40 41 |
# File 'lib/gitlab/diff/diff_refs.rb', line 39 def complete? start_sha.present? && head_sha.present? end |
#hash ⇒ Object
25 26 27 |
# File 'lib/gitlab/diff/diff_refs.rb', line 25 def hash [self.class, base_sha, start_sha, head_sha].hash end |