diff options
author | Izaak Alpert <ialpert@blackberry.com> | 2013-09-26 16:42:49 -0400 |
---|---|---|
committer | Izaak Alpert <ialpert@blackberry.com> | 2013-10-10 09:19:28 -0400 |
commit | ce21d8688d091312f47c547c2900a83fdcaebc75 (patch) | |
tree | c51a898984dd12678f6ee1c7e653b7aed321088f /lib/api/repositories.rb | |
parent | e8d1e827d8fe68d61a7be180bcc411c0d4e7982c (diff) | |
download | gitlab-ce-ce21d8688d091312f47c547c2900a83fdcaebc75.tar.gz |
feature API call to download repo archive
defaults to HEAD
Conflicts:
spec/requests/api/repositories_spec.rb
Change-Id: Id114aca6c59d75f18e49bf9f33809a04e010bfb6
Diffstat (limited to 'lib/api/repositories.rb')
-rw-r--r-- | lib/api/repositories.rb | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb index 1a911eae2bb..ac17aeabb13 100644 --- a/lib/api/repositories.rb +++ b/lib/api/repositories.rb @@ -144,7 +144,7 @@ module API trees = [] %w(trees blobs submodules).each do |type| - trees += tree.send(type).map { |t| { name: t.name, type: type.singularize, mode: t.mode, id: t.id } } + trees += tree.send(type).map { |t| {name: t.name, type: type.singularize, mode: t.mode, id: t.id} } end trees @@ -176,6 +176,30 @@ module API content_type blob.mime_type present blob.data end + + # Get a an archive of the repository + # + # Parameters: + # id (required) - The ID of a project + # sha (optional) - the commit sha to download defaults to head + # Example Request: + # GET /projects/:id/repository/archive + get ":id/repository/archive" do + authorize! :download_code, user_project + repo = user_project.repository + ref = params[:sha] + storage_path = Rails.root.join("tmp", "repositories") + + file_path = repo.archive_repo(ref || 'HEAD', storage_path) + if file_path + data = File.open(file_path).read + content_type 'application/x-gzip' + header "Content-Disposition:"," infile; filename=\"#{File.basename(file_path)}\"" + present data + else + not_found! + end + end end end end |