diff options
Diffstat (limited to 'lib/api')
| -rw-r--r-- | lib/api/helpers.rb | 20 | ||||
| -rw-r--r-- | lib/api/repositories.rb | 2 |
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index fc309f65a56..03a2968fcc7 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -56,8 +56,12 @@ module API end end - def paginate(object) - object.page(params[:page]).per(params[:per_page].to_i) + def paginate(relation) + per_page = params[:per_page].to_i + paginated = relation.page(params[:page]).per(per_page) + add_pagination_headers(paginated, per_page) + + paginated end def authenticate! @@ -134,6 +138,18 @@ module API private + def add_pagination_headers(paginated, per_page) + request_url = request.url.split('?').first + + links = [] + links << %(<#{request_url}?page=#{paginated.current_page - 1}&per_page=#{per_page}>; rel="prev") unless paginated.first_page? + links << %(<#{request_url}?page=#{paginated.current_page + 1}&per_page=#{per_page}>; rel="next") unless paginated.last_page? + links << %(<#{request_url}?page=1&per_page=#{per_page}>; rel="first") + links << %(<#{request_url}?page=#{paginated.total_pages}&per_page=#{per_page}>; rel="last") + + header 'Link', links.join(', ') + end + def abilities @abilities ||= begin abilities = Six.new diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb index ba53bf9baa4..53482c3b7f2 100644 --- a/lib/api/repositories.rb +++ b/lib/api/repositories.rb @@ -161,7 +161,7 @@ module API repo = user_project.repository ref = params[:sha] format = params[:format] - storage_path = Rails.root.join("tmp", "repositories") + storage_path = Gitlab.config.gitlab.repository_downloads_path file_path = repo.archive_repo(ref, storage_path, format) if file_path && File.exists?(file_path) |
