Merge branch 'master' into 90-pull

Conflicts:
	db/schema.rb
This commit is contained in:
Alexander Machehin 2012-08-07 18:21:04 +06:00
commit a316105e9c
21 changed files with 61 additions and 34 deletions

View File

@ -23,8 +23,11 @@ class Platforms::ProductBuildListsController < Platforms::BaseController
end
def destroy
@product_build_list.destroy
flash[:notice] = t('flash.product.build_list_delete')
if @product_build_list.destroy
flash[:notice] = t('flash.product_build_list.delete')
else
flash[:error] = t('flash.product_build_list.delete_error')
end
redirect_to [@platform, @product]
end

View File

@ -42,9 +42,11 @@ class Projects::BuildListsController < Projects::BaseController
def create
notices, errors = [], []
@repository = Repository.find params[:build_list][:save_to_repository_id]
@platform = @repository.platform
params[:build_list][:save_to_platform_id] = @platform.id
@platform = Platform.includes(:repositories).find params[:build_list][:save_to_platform_id]
@repository = @project.repositories.where(:id => @platform.repository_ids).first
params[:build_list][:save_to_repository_id] = @repository.id
params[:build_list][:auto_publish] = false if @platform.released
Arch.where(:id => params[:arches]).each do |arch|

View File

@ -27,11 +27,9 @@ class BuildList < ActiveRecord::Base
validate lambda {
errors.add(:save_to_repository, I18n.t('flash.build_list.wrong_repository')) unless save_to_repository_id.in? save_to_platform.repositories.map(&:id)
}
validate lambda {
errors.add(:save_to_repository, I18n.t('flash.build_list.cannot_write')) unless current_user.can?(:write, save_to_repository)
}
LIVE_TIME = 3.week
LIVE_TIME = 4.week # for unpublished
MAX_LIVE_TIME = 3.month # for published
# The kernel does not send these statuses directly
BUILD_CANCELED = 5000
@ -100,7 +98,7 @@ class BuildList < ActiveRecord::Base
s
}
scope :scoped_to_project_name, lambda {|project_name| joins(:project).where('projects.name LIKE ?', "%#{project_name}%")}
scope :outdated, where('updated_at < ? AND status <> ?', Time.now - LIVE_TIME, BUILD_PUBLISHED)
scope :outdated, where('created_at < ? AND status <> ? OR created_at < ?', Time.now - LIVE_TIME, BUILD_PUBLISHED, Time.now - MAX_LIVE_TIME)
serialize :additional_repos
serialize :include_repos

View File

@ -4,6 +4,7 @@ class MassBuild < ActiveRecord::Base
has_many :build_lists, :dependent => :destroy
scope :by_platform, lambda { |platform| where(:platform_id => platform.id) }
scope :outdated, where('created_at < ?', Time.now + 1.day - BuildList::MAX_LIVE_TIME)
attr_accessor :repositories, :arches
attr_accessible :repositories, :arches, :auto_publish

View File

@ -180,7 +180,7 @@ class Platform < ActiveRecord::Base
arches.map(&:name).each do |arch|
begin
return if mass_build.reload.stop_build
p.build_for(self, user, arch, auto_publish, mass_build_id)
p.build_for(self, rep.id, user, arch, auto_publish, mass_build_id)
rescue RuntimeError, Exception
# p.async(:build_for, self, user, arch, auto_publish, mass_build_id) # TODO need this?
end

View File

@ -31,6 +31,7 @@ class ProductBuildList < ActiveRecord::Base
scope :recent, order("#{table_name}.updated_at DESC")
after_create :xml_rpc_create
before_destroy :can_destroy?
after_destroy :xml_delete_iso_container
def container_path
@ -49,6 +50,10 @@ class ProductBuildList < ActiveRecord::Base
self.class.human_status(status)
end
def can_destroy?
[BUILD_COMPLETED, BUILD_FAILED].include? status
end
protected
def xml_rpc_create

View File

@ -24,10 +24,11 @@ class Project < ActiveRecord::Base
validates :name, :uniqueness => {:scope => [:owner_id, :owner_type], :case_sensitive => false}, :presence => true, :format => {:with => /^#{NAME_REGEXP}$/, :message => I18n.t("activerecord.errors.project.uname")}
validates :owner, :presence => true
validates :visibility, :presence => true, :inclusion => {:in => VISIBILITIES}
validate { errors.add(:base, :can_have_less_or_equal, :count => MAX_OWN_PROJECTS) if owner.projects.size >= MAX_OWN_PROJECTS }
attr_accessible :name, :description, :visibility, :srpm, :is_package, :default_branch, :has_issues, :has_wiki
attr_readonly :name
attr_readonly :name, :owner_id, :owner_type
scope :recent, order("name ASC")
scope :search_order, order("CHAR_LENGTH(name) ASC")
@ -84,13 +85,13 @@ class Project < ActiveRecord::Base
owner == user
end
def build_for(platform, user, arch = 'i586', auto_publish = false, mass_build_id = nil, priority = 0)
def build_for(platform, repository_id, user, arch = 'i586', auto_publish = false, mass_build_id = nil, priority = 0)
# Select main and project platform repository(contrib, non-free and etc)
# If main does not exist, will connect only project platform repository
# If project platform repository is main, only main will be connect
build_reps = [platform.repositories.find_by_name('main')]
build_reps += platform.repositories.select {|rep| self.repository_ids.include? rep.id}
build_reps_ids = build_reps.compact.map(&:id).uniq
main_rep_id = platform.repositories.find_by_name('main').id
build_reps_ids = [main_rep_id, repository_id].compact.uniq
arch = Arch.find_by_name(arch) if arch.acts_like?(:string)
build_lists.create do |bl|
bl.save_to_platform = platform
@ -104,6 +105,7 @@ class Project < ActiveRecord::Base
bl.include_repos = build_reps_ids
bl.priority = priority
bl.mass_build_id = mass_build_id
bl.save_to_repository_id = repository_id
end
end

View File

@ -3,5 +3,6 @@
%td= product_build_list.human_status
%td= link_to nil, product_build_list.container_path
%td= link_to product_build_list.product.name, platform_product_path(product_build_list.product.platform, product_build_list.product)
%td= link_to image_tag('x.png'), platform_product_product_build_list_path(product_build_list.product.platform, product_build_list.product, product_build_list), :method => :delete, :confirm => t("layout.confirm") if can? :destroy, product_build_list
- pbl = product_build_list
%td= link_to image_tag('x.png'), platform_product_product_build_list_path(pbl.product.platform, pbl.product, pbl), :method => :delete, :confirm => t("layout.confirm") if can?(:destroy, pbl) && pbl.can_destroy?
%td= l(product_build_list.updated_at, :format => :long)

View File

@ -3,6 +3,6 @@
%td= build_list.human_status
%td= link_to build_list.project.name_with_owner, build_list.project
%td= build_list_version_link(build_list)
%td= link_to build_list.save_to_platform.name, build_list.save_to_platform
%td= link_to "#{build_list.save_to_platform.name}/#{build_list.save_to_repository.name}", [build_list.save_to_platform, build_list.save_to_repository]
%td= build_list.arch.name
%td= link_to build_list.user.try(:fullname), build_list.user

View File

@ -7,7 +7,7 @@
%th.lpadding16= t("activerecord.attributes.build_list.status")
%th.lpadding16= t("activerecord.attributes.build_list.project")
%th.lpadding16= t("activerecord.attributes.build_list.project_version")
%th.lpadding16= t("activerecord.attributes.build_list.save_to_platform")
%th.lpadding16= t("activerecord.attributes.build_list.save_to_repository")
%th.lpadding16= t("activerecord.attributes.build_list.arch")
%th.lpadding16= t("activerecord.attributes.build_list.user")
%tbody= render :partial => 'projects/build_lists/build_list', :collection => @build_lists

View File

@ -11,7 +11,7 @@
.offset25{:style => 'padding-left: 25px'}= render 'include_repos', :platform => pl
%section.right
%h3= t("activerecord.attributes.build_list.save_to_platform")
.lineForm= f.select :save_to_repository_id, @project.repositories.collect{|r| ["#{r.platform.name}/#{r.name}", r.id]}
.lineForm= f.select :save_to_platform_id, @project.repositories.collect{|r| ["#{r.platform.name}/#{r.name}", r.platform.id]}
%h3= t("activerecord.attributes.build_list.project_version")
.lineForm= f.select :project_version, versions_for_group_select(@project), :selected => params[:build_list].try(:fetch, :project_version) || "latest_" + @project.default_branch
%h3= t("activerecord.attributes.build_list.arch")

View File

@ -9,7 +9,9 @@
.leftlist= t("activerecord.attributes.build_list.container_path")
.rightlist
- if @build_list.status == BuildList::BUILD_PUBLISHED
= t("layout.build_lists.container_published")
= raw "%s %s" % [t("layout.build_lists.container_published"),
link_to("#{@build_list.save_to_platform.name}/#{@build_list.save_to_repository.name}",
[@build_list.save_to_platform, @build_list.save_to_repository])]
- elsif @build_list.container_path.present?
- container_url = "http://#{request.host_with_port}/downloads#{@build_list.container_path}"
= link_to container_url, container_url
@ -26,11 +28,9 @@
.rightlist
= link_to @build_list.build_for_platform.name, @build_list.build_for_platform
.both
.leftlist= t("activerecord.attributes.build_list.save_to_platform")
.leftlist= t("activerecord.attributes.build_list.save_to_repository")
.rightlist
= link_to @build_list.save_to_platform.name, @build_list.save_to_platform
\/
= link_to @build_list.save_to_repository.name, [@build_list.save_to_platform, @build_list.save_to_repository]
= link_to "#{@build_list.save_to_platform.name}/#{@build_list.save_to_repository.name}", [@build_list.save_to_platform, @build_list.save_to_repository]
.both
.leftlist= t("activerecord.attributes.build_list.include_repos")
.rightlist= (@build_list.include_repos||[]).map{|r| Repository.find(r).name}.join(', ')

View File

@ -19,6 +19,7 @@ en:
include_repos: Included repositories
created_at: Created on
save_to_platform: Platform
save_to_repository: Repository
build_for_platform: Build for platform
update_type: Update type
build_requires: Build with all the required packages

View File

@ -19,6 +19,7 @@ ru:
include_repos: Подключаемые репозитории
created_at: Создан
save_to_platform: Платформа
save_to_repository: Репозиторий
build_for_platform: Собрано для платформы
update_type: Критичность обновления
build_requires: Пересборка с зависимостями

View File

@ -33,7 +33,6 @@ en:
save_error: Unable to save product
build_started: Product build started
destroyed: Product deleted
build_list_delete: Product build list deleted
activerecord:
models:

View File

@ -33,7 +33,6 @@ ru:
save_error: Не удалось сохранить изменения
build_started: Запущена сборка продукта
destroyed: Продукт удален
build_list_delete: Сборочный лист продукта удален
activerecord:
models:

View File

@ -25,6 +25,10 @@ en:
product: Product
container_path: Container
status: Status
notified_at: Notified at
user: User
notified_at: Notified at
flash:
product_build_list:
delete: Product build list deleted
delete_error: Unable to delete product build list

View File

@ -28,3 +28,8 @@ ru:
user: Пользователь
notified_at: Информация получена
flash:
product_build_list:
delete: Сборочный лист продукта удален
delete_error: Не удалось удалить cборочный лист продукта

View File

@ -4,7 +4,7 @@ base_path = "/srv/rosa_build"
rails_env = ENV['RAILS_ENV'] || 'production'
worker_processes 4
worker_processes 8
working_directory File.join(base_path, 'current') # available in 0.94.0+
# listen File.join(base_path, 'tmp', 'pids', 'unicorn.sock')

View File

@ -9,9 +9,11 @@ class AddSaveToRepositoryToBuildLists < ActiveRecord::Migration
platform = bl.save_to_platform
rep = (project.repositories.map(&:id) & platform.repositories.map(&:id)).first
bl.save_to_repository_id = rep
bl.save
rescue
bl.save!
rescue Exception => e
puts e.inspect
false
end
end

View File

@ -2,15 +2,19 @@
namespace :buildlist do
namespace :clear do
desc 'Remove outdated unpublished BuildLists'
desc 'Remove outdated BuildLists and MassBuilds'
task :outdated => :environment do
say "Removing outdated BuildLists"
outdated = BuildList.outdated
say "There are #{outdated.count} outdated BuildLists at #{Time.now}"
BuildList.outdated.destroy_all
say "Outdated BuildLists was successfully removed"
say "Removing outdated MassBuilds"
outdated = MassBuild.outdated
say "There are #{outdated.count} outdated MassBuilds at #{Time.now}"
MassBuild.outdated.destroy_all
say "Outdated BuildLists and MassBuilds was successfully removed"
end
end
end