Merge branch '22578-cycle-analytics-incorrect-commit-count'
This commit is contained in:
commit
edebd5e763
4 changed files with 45 additions and 16 deletions
|
@ -9,6 +9,7 @@ v 8.12.2 (unreleased)
|
|||
- Fix Import/Export not recognising correctly the imported services.
|
||||
- Fix snippets pagination
|
||||
- Fix List-Unsubscribe header in emails
|
||||
- Fix an issue with the "Commits" section of the cycle analytics summary. !6513
|
||||
|
||||
v 8.12.1
|
||||
- Fix a memory leak in HTML::Pipeline::SanitizationFilter::WHITELIST
|
||||
|
|
|
@ -10,15 +10,33 @@ class CycleAnalytics
|
|||
end
|
||||
|
||||
def commits
|
||||
repository = @project.repository.raw_repository
|
||||
|
||||
if @project.default_branch
|
||||
repository.log(ref: @project.default_branch, after: @from).count
|
||||
end
|
||||
ref = @project.default_branch.presence
|
||||
count_commits_for(ref)
|
||||
end
|
||||
|
||||
def deploys
|
||||
@project.deployments.where("created_at > ?", @from).count
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Don't use the `Gitlab::Git::Repository#log` method, because it enforces
|
||||
# a limit. Since we need a commit count, we _can't_ enforce a limit, so
|
||||
# the easiest way forward is to replicate the relevant portions of the
|
||||
# `log` function here.
|
||||
def count_commits_for(ref)
|
||||
return unless ref
|
||||
|
||||
repository = @project.repository.raw_repository
|
||||
sha = @project.repository.commit(ref).sha
|
||||
|
||||
cmd = %W(git --git-dir=#{repository.path} log)
|
||||
cmd << '--format=%H'
|
||||
cmd << "--after=#{@from.iso8601}"
|
||||
cmd << sha
|
||||
|
||||
raw_output = IO.popen(cmd) { |io| io.read }
|
||||
raw_output.lines.count
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,6 +34,12 @@ describe CycleAnalytics::Summary, models: true do
|
|||
|
||||
expect(subject.commits).to eq(0)
|
||||
end
|
||||
|
||||
it "finds a large (> 100) snumber of commits if present" do
|
||||
Timecop.freeze(5.days.from_now) { create_commit("Test message", project, user, 'master', count: 100) }
|
||||
|
||||
expect(subject.commits).to eq(100)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#deploys" do
|
||||
|
|
|
@ -4,24 +4,28 @@ module CycleAnalyticsHelpers
|
|||
create_commit("Commit for ##{issue.iid}", issue.project, user, branch_name)
|
||||
end
|
||||
|
||||
def create_commit(message, project, user, branch_name)
|
||||
filename = random_git_name
|
||||
def create_commit(message, project, user, branch_name, count: 1)
|
||||
oldrev = project.repository.commit(branch_name).sha
|
||||
commit_shas = Array.new(count) do |index|
|
||||
filename = random_git_name
|
||||
|
||||
options = {
|
||||
committer: project.repository.user_to_committer(user),
|
||||
author: project.repository.user_to_committer(user),
|
||||
commit: { message: message, branch: branch_name, update_ref: true },
|
||||
file: { content: "content", path: filename, update: false }
|
||||
}
|
||||
options = {
|
||||
committer: project.repository.user_to_committer(user),
|
||||
author: project.repository.user_to_committer(user),
|
||||
commit: { message: message, branch: branch_name, update_ref: true },
|
||||
file: { content: "content", path: filename, update: false }
|
||||
}
|
||||
|
||||
commit_sha = Gitlab::Git::Blob.commit(project.repository, options)
|
||||
project.repository.commit(commit_sha)
|
||||
commit_sha = Gitlab::Git::Blob.commit(project.repository, options)
|
||||
project.repository.commit(commit_sha)
|
||||
|
||||
commit_sha
|
||||
end
|
||||
|
||||
GitPushService.new(project,
|
||||
user,
|
||||
oldrev: oldrev,
|
||||
newrev: commit_sha,
|
||||
newrev: commit_shas.last,
|
||||
ref: 'refs/heads/master').execute
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue