rosa-build/app/controllers/projects/git/trees_controller.rb

36 lines
1.6 KiB
Ruby
Raw Normal View History

2012-01-30 20:39:34 +00:00
# -*- encoding : utf-8 -*-
class Projects::Git::TreesController < Projects::Git::BaseController
before_filter lambda{redirect_to @project if params[:treeish] == @project.default_branch and params[:path].blank?}, :only => :show
skip_before_filter :set_branch_and_tree, :set_treeish_and_path, :only => :archive
2011-04-04 12:28:33 +01:00
def show
@tree = @tree / @path if @path.present?
@commit = @branch.present? ? @branch.commit() : @project.repo.log(@treeish, @path, :max_count => 1).first
render 'empty' unless @commit
end
def archive
format, @treeish = params[:format], params[:treeish]
2012-09-20 15:26:26 +01:00
if (@treeish =~ /^#{@project.owner.uname}-#{@project.name}-/) && !(@treeish =~ /[\s]+/) && (format =~ /^(zip|tar\.gz)$/)
2012-09-20 12:21:54 +01:00
@treeish = @treeish.gsub(/^#{@project.owner.uname}-#{@project.name}-/, '')
@commit = @project.repo.commits(@treeish, 1).first
end
raise Grit::NoSuchPathError unless @commit
2012-09-20 12:21:54 +01:00
name = "#{@project.owner.uname}-#{@project.name}-#{@treeish}"
2012-09-20 15:26:26 +01:00
fullname = "#{name}.#{format == 'zip' ? 'zip' : 'tar.gz'}"
file = Tempfile.new fullname, 'tmp'
2012-10-03 21:27:13 +01:00
system("cd #{@project.path}; git archive --format=#{format == 'zip' ? 'zip' : 'tar'} --prefix=#{name}/ #{@treeish} #{format == 'zip' ? '' : ' | gzip -9'} > #{file.path}")
file.close
2012-09-20 15:26:26 +01:00
send_file file.path, :disposition => 'attachment', :type => "application/#{format == 'zip' ? 'zip' : 'x-tar-gz'}", :filename => fullname
end
2013-02-12 16:35:14 +00:00
def tags
2013-02-13 11:38:25 +00:00
@tags = @project.repo.tags.select{ |t| t.commit }.sort_by(&:name)
2013-02-12 16:35:14 +00:00
end
def branches
2013-02-13 11:23:58 +00:00
@branches = @project.repo.branches.sort_by(&:name).select{ |b| b.name != @branch.name }.unshift(@branch)
2013-02-12 16:35:14 +00:00
end
2012-01-30 20:39:34 +00:00
end