Class: CommitRange
- Inherits:
-
Object
- Object
- CommitRange
- Includes:
- ActiveModel::Conversion, Referable
- Defined in:
- app/models/commit_range.rb
Overview
CommitRange makes it easier to work with commit ranges
Examples:
range = CommitRange.new('f3f85602...e86e1013', project)
range.exclude_start? # => false
range.to_s # => "f3f85602...e86e1013"
range = CommitRange.new('f3f856029bc5f966c5a7ee24cf7efefdd20e6019..e86e1013709735be5bb767e2b228930c543f25ae', project)
range.exclude_start? # => true
range.to_param # => {from: "f3f856029bc5f966c5a7ee24cf7efefdd20e6019^", to: "e86e1013709735be5bb767e2b228930c543f25ae"}
range.to_s # => "f3f85602..e86e1013"
# Assuming the specified project has a repository containing both commits:
range.valid_commits? # => true
Constant Summary collapse
- REF_PATTERN =
The beginning and ending refs can be named or SHAs, and the range notation can be double- or triple-dot.
/[0-9a-zA-Z][0-9a-zA-Z_.-]*[0-9a-zA-Z\^]/
- PATTERN =
/#{REF_PATTERN}\.{2,3}#{REF_PATTERN}/
- STRICT_PATTERN =
In text references, the beginning and ending refs can only be valid SHAs.
/#{Gitlab::Git::Commit::RAW_SHA_PATTERN}\.{2,3}#{Gitlab::Git::Commit::RAW_SHA_PATTERN}/
Instance Attribute Summary collapse
-
#commit_from ⇒ Object
readonly
Returns the value of attribute commit_from.
-
#commit_to ⇒ Object
(also: #commit_end)
readonly
Returns the value of attribute commit_to.
-
#notation ⇒ Object
readonly
Returns the value of attribute notation.
-
#project ⇒ Object
The Project model.
-
#ref_from ⇒ Object
readonly
Returns the value of attribute ref_from.
-
#ref_to ⇒ Object
readonly
Returns the value of attribute ref_to.
Class Method Summary collapse
- .link_reference_pattern ⇒ Object
-
.reference_pattern ⇒ Object
Pattern used to extract commit range references from text.
- .reference_prefix ⇒ Object
Instance Method Summary collapse
- #commit_start ⇒ Object
- #exclude_start? ⇒ Boolean
-
#initialize(range_string, project) ⇒ CommitRange
constructor
Initialize a CommitRange.
- #inspect ⇒ Object
- #persisted? ⇒ Boolean
- #reference_link_text(from = nil) ⇒ Object
- #sha_from ⇒ Object
- #sha_start ⇒ Object
- #sha_to ⇒ Object (also: #sha_end)
-
#to_param ⇒ Object
Return a Hash of parameters for passing to a URL helper.
- #to_reference(from = nil, full: false) ⇒ Object
- #to_s ⇒ Object (also: #id)
-
#valid_commits? ⇒ Boolean
Check if both the starting and ending commit IDs exist in a project’s repository.
Methods included from Referable
#referable_inspect, #to_reference_base
Constructor Details
#initialize(range_string, project) ⇒ CommitRange
Initialize a CommitRange
range_string - The String commit range. project - The Project model.
Raises ArgumentError if ‘range_string` does not match `PATTERN`.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'app/models/commit_range.rb', line 61 def initialize(range_string, project) @project = project range_string = range_string.strip unless /\A#{PATTERN}\z/o.match?(range_string) raise ArgumentError, "invalid CommitRange string format: #{range_string}" end @ref_from, @notation, @ref_to = range_string.split(/(\.{2,3})/, 2) if project.valid_repo? @commit_from = project.commit(@ref_from) @commit_to = project.commit(@ref_to) end if valid_commits? @ref_from = Commit.truncate_sha(sha_from) if sha_from.start_with?(@ref_from) @ref_to = Commit.truncate_sha(sha_to) if sha_to.start_with?(@ref_to) end end |
Instance Attribute Details
#commit_from ⇒ Object (readonly)
Returns the value of attribute commit_from.
23 24 25 |
# File 'app/models/commit_range.rb', line 23 def commit_from @commit_from end |
#commit_to ⇒ Object (readonly) Also known as: commit_end
Returns the value of attribute commit_to.
23 24 25 |
# File 'app/models/commit_range.rb', line 23 def commit_to @commit_to end |
#notation ⇒ Object (readonly)
Returns the value of attribute notation.
23 24 25 |
# File 'app/models/commit_range.rb', line 23 def notation @notation end |
#project ⇒ Object
The Project model
27 28 29 |
# File 'app/models/commit_range.rb', line 27 def project @project end |
#ref_from ⇒ Object (readonly)
Returns the value of attribute ref_from.
24 25 26 |
# File 'app/models/commit_range.rb', line 24 def ref_from @ref_from end |
#ref_to ⇒ Object (readonly)
Returns the value of attribute ref_to.
24 25 26 |
# File 'app/models/commit_range.rb', line 24 def ref_to @ref_to end |
Class Method Details
.link_reference_pattern ⇒ Object
51 52 53 |
# File 'app/models/commit_range.rb', line 51 def self.link_reference_pattern @link_reference_pattern ||= compose_link_reference_pattern('compare', /(?<commit_range>#{PATTERN})/o) end |
.reference_pattern ⇒ Object
Pattern used to extract commit range references from text
This pattern supports cross-project references.
44 45 46 47 48 49 |
# File 'app/models/commit_range.rb', line 44 def self.reference_pattern @reference_pattern ||= %r{ (?:#{Project.reference_pattern}#{reference_prefix})? (?<commit_range>#{STRICT_PATTERN}) }x end |
.reference_prefix ⇒ Object
37 38 39 |
# File 'app/models/commit_range.rb', line 37 def self.reference_prefix '@' end |
Instance Method Details
#commit_start ⇒ Object
153 154 155 156 157 158 159 160 161 |
# File 'app/models/commit_range.rb', line 153 def commit_start return unless sha_start if exclude_start? @commit_start ||= project.commit(sha_start) else commit_from end end |
#exclude_start? ⇒ Boolean
121 122 123 |
# File 'app/models/commit_range.rb', line 121 def exclude_start? @notation == '..' end |
#inspect ⇒ Object
83 84 85 |
# File 'app/models/commit_range.rb', line 83 def inspect %(#<#{self.class}:#{object_id} #{self}>) end |
#persisted? ⇒ Boolean
131 132 133 |
# File 'app/models/commit_range.rb', line 131 def persisted? true end |
#reference_link_text(from = nil) ⇒ Object
103 104 105 106 107 108 109 110 111 112 |
# File 'app/models/commit_range.rb', line 103 def reference_link_text(from = nil) project_reference = project.to_reference_base(from) reference = ref_from + notation + ref_to if project_reference.present? project_reference + self.class.reference_prefix + reference else reference end end |
#sha_from ⇒ Object
135 136 137 138 139 |
# File 'app/models/commit_range.rb', line 135 def sha_from return unless @commit_from @commit_from.id end |
#sha_start ⇒ Object
147 148 149 150 151 |
# File 'app/models/commit_range.rb', line 147 def sha_start return unless sha_from exclude_start? ? "#{sha_from}^" : sha_from end |
#sha_to ⇒ Object Also known as: sha_end
141 142 143 144 145 |
# File 'app/models/commit_range.rb', line 141 def sha_to return unless @commit_to @commit_to.id end |
#to_param ⇒ Object
Return a Hash of parameters for passing to a URL helper
See ‘namespace_project_compare_url`
117 118 119 |
# File 'app/models/commit_range.rb', line 117 def to_param { from: sha_start, to: sha_to } end |
#to_reference(from = nil, full: false) ⇒ Object
93 94 95 96 97 98 99 100 101 |
# File 'app/models/commit_range.rb', line 93 def to_reference(from = nil, full: false) project_reference = project.to_reference_base(from, full: full) if project_reference.present? project_reference + self.class.reference_prefix + self.id else self.id end end |
#to_s ⇒ Object Also known as: id
87 88 89 |
# File 'app/models/commit_range.rb', line 87 def to_s sha_from + notation + sha_to end |
#valid_commits? ⇒ Boolean
Check if both the starting and ending commit IDs exist in a project’s repository
127 128 129 |
# File 'app/models/commit_range.rb', line 127 def valid_commits? commit_start.present? && commit_end.present? end |