diff options
| author | Douwe Maan <douwe@gitlab.com> | 2017-03-08 03:05:24 +0000 |
|---|---|---|
| committer | Douwe Maan <douwe@gitlab.com> | 2017-03-08 03:05:24 +0000 |
| commit | ff9267a707e5e02cd1af14d3c5a4835b1d405c77 (patch) | |
| tree | cdeaf59ad27907c7825831f4c6a2a88601dacc83 /lib/api | |
| parent | e17bc3afc565bd13aa77380b2926fbae17ecf94f (diff) | |
| parent | d13451cd49e3380c3b69c3143cea929a9b3ec06a (diff) | |
| download | gitlab-ce-ff9267a707e5e02cd1af14d3c5a4835b1d405c77.tar.gz | |
Merge branch '1381-present-commits-pagination-headers-correctly' into 'master'
GET "projects/:id/repository/commits" endpoint improvements
Closes #1381 and #20207
See merge request !9679
Diffstat (limited to 'lib/api')
| -rw-r--r-- | lib/api/commits.rb | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/lib/api/commits.rb b/lib/api/commits.rb index b0aa10f8bf2..42401abfe0f 100644 --- a/lib/api/commits.rb +++ b/lib/api/commits.rb @@ -18,22 +18,34 @@ module API optional :ref_name, type: String, desc: 'The name of a repository branch or tag, if not given the default branch is used' optional :since, type: DateTime, desc: 'Only commits after or on this date will be returned' optional :until, type: DateTime, desc: 'Only commits before or on this date will be returned' - optional :page, type: Integer, default: 0, desc: 'The page for pagination' - optional :per_page, type: Integer, default: 20, desc: 'The number of results per page' optional :path, type: String, desc: 'The file path' + use :pagination end get ":id/repository/commits" do - ref = params[:ref_name] || user_project.try(:default_branch) || 'master' - offset = params[:page] * params[:per_page] + path = params[:path] + before = params[:until] + after = params[:since] + ref = params[:ref_name] || user_project.try(:default_branch) || 'master' + offset = (params[:page] - 1) * params[:per_page] commits = user_project.repository.commits(ref, - path: params[:path], + path: path, limit: params[:per_page], offset: offset, - after: params[:since], - before: params[:until]) + before: before, + after: after) + + commit_count = + if path || before || after + user_project.repository.count_commits(ref: ref, path: path, before: before, after: after) + else + # Cacheable commit count. + user_project.repository.commit_count_for_ref(ref) + end + + paginated_commits = Kaminari.paginate_array(commits, total_count: commit_count) - present commits, with: Entities::RepoCommit + present paginate(paginated_commits), with: Entities::RepoCommit end desc 'Commit multiple file changes as one commit' do |
