Merge two methods.

This commit is contained in:
Hiroyuki Sato 2016-12-20 22:43:59 +09:00
parent e78f1048d9
commit 1a59766d0c
3 changed files with 10 additions and 13 deletions

View file

@ -654,19 +654,16 @@ class Repository
end
def last_commit_for_path(sha, path)
sha = cache_last_commit_id_for_path(sha, path)
sha = last_commit_id_for_path(sha, path)
commit(sha)
end
def last_commit_id_for_path(sha, path)
args = %W(#{Gitlab.config.git.bin_path} rev-list --max-count=1 #{sha} -- #{path})
Gitlab::Popen.popen(args, path_to_repo).first.strip
end
def cache_last_commit_id_for_path(sha, path)
key = path.blank? ? "last_commit_id_for_path:#{sha}" : "last_commit_id_for_path:#{sha}:#{Digest::SHA1.hexdigest(path)}"
cache.fetch(key) do
last_commit_id_for_path(sha, path)
args = %W(#{Gitlab.config.git.bin_path} rev-list --max-count=1 #{sha} -- #{path})
Gitlab::Popen.popen(args, path_to_repo).first.strip
end
end

View file

@ -70,7 +70,7 @@ module API
ref: params[:ref],
blob_id: blob.id,
commit_id: commit.id,
last_commit_id: repo.cache_last_commit_id_for_path(commit.sha, params[:file_path])
last_commit_id: repo.last_commit_id_for_path(commit.sha, params[:file_path])
}
end

View file

@ -142,16 +142,16 @@ describe Repository, models: true do
describe '#last_commit_id_for_path' do
subject { repository.last_commit_id_for_path(sample_commit.id, '.gitignore') }
it { is_expected.to eq('c1acaa58bbcbc3eafe538cb8274ba387047b69f8') }
end
it "returns last commit id for a given path" do
is_expected.to eq('c1acaa58bbcbc3eafe538cb8274ba387047b69f8')
end
describe '#cache_last_commit_id_for_path' do
it "caches #last_commit_id_for_path" do
it "caches last commit id for a given path" do
cache = repository.send(:cache)
key = "last_commit_id_for_path:#{sample_commit.id}:#{Digest::SHA1.hexdigest('.gitignore')}"
expect(cache).to receive(:fetch).with(key).and_return('c1acaa5')
expect(repository.cache_last_commit_id_for_path(sample_commit.id, '.gitignore')).to eq('c1acaa5')
is_expected.to eq('c1acaa5')
end
end