Commit 81a21e57 authored by Robert Speicher's avatar Robert Speicher

CommitRange improvements

parent 6bac823a
...@@ -45,12 +45,10 @@ class CommitRange ...@@ -45,12 +45,10 @@ class CommitRange
raise ArgumentError, "invalid CommitRange string format: #{range_string}" raise ArgumentError, "invalid CommitRange string format: #{range_string}"
end end
@inclusive = range_string !~ /\.{3}/ @inclusive = !range_string.include?('...')
@sha_from, @notation, @sha_to = range_string.split(/(\.{2,3})/, 2) @sha_from, @notation, @sha_to = range_string.split(/(\.{2,3})/, 2)
@project = project @project = project
@_commit_map = {}
end end
def inspect def inspect
...@@ -63,7 +61,7 @@ class CommitRange ...@@ -63,7 +61,7 @@ class CommitRange
# Returns `[nil, nil]` if `valid_commits?` is falsey # Returns `[nil, nil]` if `valid_commits?` is falsey
def to_a def to_a
if valid_commits? if valid_commits?
[commit(sha_from), commit(sha_to)] [commit_from, commit_to]
else else
[nil, nil] [nil, nil]
end end
...@@ -104,25 +102,24 @@ class CommitRange ...@@ -104,25 +102,24 @@ class CommitRange
return nil unless project.present? return nil unless project.present?
return false unless project.valid_repo? return false unless project.valid_repo?
commit(sha_from).present? && commit(sha_to).present? commit_from.present? && commit_to.present?
end end
def persisted? def persisted?
true true
end end
private def commit_from
@commit_from ||= project.repository.commit(sha_from_as_param)
def sha_from_as_param
sha_from + (inclusive? ? '^' : '')
end end
def commit(sha) def commit_to
unless @_commit_map[sha] @commit_to ||= project.repository.commit(sha_to)
# FIXME (rspeicher): Law of Demeter
@_commit_map[sha] = project.repository.commit(sha)
end end
@_commit_map[sha] private
def sha_from_as_param
sha_from + (inclusive? ? '^' : '')
end end
end end
...@@ -18,8 +18,8 @@ describe CommitRange do ...@@ -18,8 +18,8 @@ describe CommitRange do
before do before do
expect(range).to receive(:valid_commits?).and_return(true) expect(range).to receive(:valid_commits?).and_return(true)
allow(range).to receive(:commit).with(sha_from).and_return(commit1) allow(range).to receive(:commit_from).and_return(commit1)
allow(range).to receive(:commit).with(sha_to).and_return(commit2) allow(range).to receive(:commit_to).and_return(commit2)
end end
it 'returns an Array of Commits' do it 'returns an Array of Commits' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment