summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-07-02 12:40:20 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-07-02 12:40:20 +0300
commit81d41c0f927f69d75937d3c8f757740e936ed6e9 (patch)
treea13b2a16ffbe775926e6e4723432bb031b37e291
parent2e3818f14f1c8ac54f36c216082dcab0d5cce99a (diff)
downloadgitlab-ce-81d41c0f927f69d75937d3c8f757740e936ed6e9.tar.gz
Collect contributors info via API
-rw-r--r--lib/api/repositories.rb22
-rw-r--r--spec/requests/api/repositories_spec.rb15
2 files changed, 36 insertions, 1 deletions
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 459379ad30c..ace3283616a 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -160,7 +160,29 @@ module API
get ':id/repository/contributors' do
authorize! :download_code, user_project
+ contributors = {}
+ contributors
+
log = user_project.repository.graph_log
+ log.each do |entry|
+ email = entry[:author_email].to_s
+
+ if contributors.has_key?(email)
+ contributors[email][:commits] += 1
+ contributors[email][:additions] += entry[:additions] || 0
+ contributors[email][:deletions] += entry[:deletions] || 0
+ else
+ contributors[email] = {
+ email: email,
+ name: entry[:author_name],
+ commits: 1,
+ additions: entry[:additions] || 0,
+ deletions: entry[:deletions] || 0,
+ }
+ end
+ end
+
+ contributors
end
end
end
diff --git a/spec/requests/api/repositories_spec.rb b/spec/requests/api/repositories_spec.rb
index 94850d0f1ae..daf534d7317 100644
--- a/spec/requests/api/repositories_spec.rb
+++ b/spec/requests/api/repositories_spec.rb
@@ -128,7 +128,7 @@ describe API::API, api: true do
end
end
- describe 'GET /GET /projects/:id/repository/compare' do
+ describe 'GET /projects/:id/repository/compare' do
it "should compare branches" do
get api("/projects/#{project.id}/repository/compare", user), from: 'master', to: 'simple_merge_request'
response.status.should == 200
@@ -166,4 +166,17 @@ describe API::API, api: true do
json_response['compare_same_ref'].should be_true
end
end
+
+ describe 'GET /projects/:id/repository/contributors' do
+ it 'should return valid data' do
+ get api("/projects/#{project.id}/repository/contributors", user)
+ response.status.should == 200
+ contributor = json_response.values.first
+ contributor['email'].should == 'dmitriy.zaporozhets@gmail.com'
+ contributor['name'].should == 'Dmitriy Zaporozhets'
+ contributor['commits'].should == 185
+ contributor['additions'].should == 66072
+ contributor['deletions'].should == 63013
+ end
+ end
end