48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
class RepositoriesController < ApplicationController
|
|
before_filter :project
|
|
|
|
# Authorize
|
|
before_filter :add_project_abilities
|
|
before_filter :authorize_read_project!
|
|
before_filter :require_non_empty_project
|
|
before_filter :render_full_content
|
|
|
|
layout "project"
|
|
|
|
def show
|
|
@activities = @project.commits_with_refs(20)
|
|
end
|
|
|
|
def branches
|
|
@branches = @project.repo.heads.sort_by(&:name)
|
|
end
|
|
|
|
def tags
|
|
@tags = @project.repo.tags.sort_by(&:name).reverse
|
|
end
|
|
|
|
def archive
|
|
unless can?(current_user, :download_code, @project)
|
|
render_404 and return
|
|
end
|
|
|
|
ref = params[:ref] || @project.root_ref
|
|
commit = @project.commit(ref)
|
|
render_404 and return unless commit
|
|
|
|
# Build file path
|
|
file_name = @project.code + "-" + commit.id.to_s + ".tar.gz"
|
|
storage_path = File.join(Rails.root, "tmp", "repositories", @project.code)
|
|
file_path = File.join(storage_path, file_name)
|
|
|
|
# Create file if not exists
|
|
unless File.exists?(file_path)
|
|
FileUtils.mkdir_p storage_path
|
|
file = @project.repo.archive_to_file(ref, nil, file_path)
|
|
end
|
|
|
|
# Send file to user
|
|
send_file file_path
|
|
end
|
|
end
|