diff options
author | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2016-02-02 16:09:55 +0300 |
---|---|---|
committer | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2016-02-02 16:09:55 +0300 |
commit | 771f14b96e058649ca5db7ce6c99e38108d4abec (patch) | |
tree | 875e851b17b30673d2a128ab264f70ecc661d965 /lib/gitlab/workhorse.rb | |
parent | b1f22aa35aa62d72f514b3f9beee0a190b6599cc (diff) |
First version of "git archive" headers
Diffstat (limited to 'lib/gitlab/workhorse.rb')
-rw-r--r-- | lib/gitlab/workhorse.rb | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb index a23120a4176..2f3e57156b6 100644 --- a/lib/gitlab/workhorse.rb +++ b/lib/gitlab/workhorse.rb @@ -4,18 +4,37 @@ require 'json' module Gitlab class Workhorse class << self + SEND_DATA_HEADER = 'Gitlab-Workhorse-Send-Data' + def send_git_blob(repository, blob) - params_hash = { + params = { 'RepoPath' => repository.path_to_repo, 'BlobId' => blob.id, } - params = Base64.urlsafe_encode64(JSON.dump(params_hash)) [ - 'Gitlab-Workhorse-Send-Data', - "git-blob:#{params}", + SEND_DATA_HEADER, + "git-blob:#{encode(params)}", ] end + + def send_git_archive(project, ref, format) + format ||= 'tar.gz' + format.downcase! + params = project.repository.archive_metadata(ref, Gitlab.config.gitlab.repository_downloads_path, format) + raise "Repository or ref not found" if params.empty? + + [ + SEND_DATA_HEADER, + "git-archive:#{encode(params)}", + ] + end + + protected + + def encode(hash) + Base64.urlsafe_encode64(JSON.dump(hash)) + end end end end |