From d901426b7938ffb5c29a74e30f563c92d415b848 Mon Sep 17 00:00:00 2001 From: Pavel Chipiga Date: Wed, 21 Dec 2011 16:01:50 +0200 Subject: [PATCH] Move project build functinality to build_lists controller. Refactor downloads url - create model based methods for url genertion. Cleanup code. Add includeed_repos functionality. Display included_repos on build_list page. Refs #65 --- app/controllers/application_controller.rb | 2 +- app/controllers/build_lists_controller.rb | 51 ++++++++++--- app/controllers/platforms_controller.rb | 2 +- app/controllers/projects_controller.rb | 74 +------------------ app/models/ability.rb | 13 ++-- app/models/build_list.rb | 9 +-- app/models/platform.rb | 30 +++++++- app/models/project.rb | 4 + .../build_lists/_include_repos.html.haml | 3 + .../new.html.haml} | 40 +++++----- app/views/build_lists/show.html.haml | 5 ++ app/views/git/shared/_navigation.html.haml | 2 +- app/views/projects/show.html.haml | 2 +- config/locales/ru.yml | 4 +- config/routes.rb | 4 +- ...152347_add_include_repos_to_build_lists.rb | 9 +++ db/schema.rb | 3 +- lib/build_server.rb | 11 ++- public/javascripts/application.js | 57 ++++++-------- 19 files changed, 163 insertions(+), 162 deletions(-) create mode 100644 app/views/build_lists/_include_repos.html.haml rename app/views/{projects/build.html.haml => build_lists/new.html.haml} (52%) create mode 100644 db/migrate/20111220152347_add_include_repos_to_build_lists.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 081802f1c..4a64259cd 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,7 +4,7 @@ class ApplicationController < ActionController::Base layout :layout_by_resource before_filter lambda { EventLog.current_controller = self }, - :only => [:create, :destroy, :open_id, :auto_build, :process_build, :cancel, :publish, :change_visibility] # :update + :only => [:create, :destroy, :open_id, :auto_build, :cancel, :publish, :change_visibility] # :update after_filter lambda { EventLog.current_controller = nil } helper_method :get_owner diff --git a/app/controllers/build_lists_controller.rb b/app/controllers/build_lists_controller.rb index 91e6d345b..175023c22 100644 --- a/app/controllers/build_lists_controller.rb +++ b/app/controllers/build_lists_controller.rb @@ -3,11 +3,13 @@ class BuildListsController < ApplicationController before_filter :authenticate_user!, :except => CALLBACK_ACTIONS before_filter :authenticate_build_service!, :only => CALLBACK_ACTIONS - before_filter :find_project, :only => [:index, :filter, :show, :publish] + before_filter :find_project, :only => [:index, :filter, :show, :publish, :new, :create] before_filter :find_arches, :only => [:index, :filter, :all] before_filter :find_project_versions, :only => [:index, :filter] before_filter :find_build_list_by_bs, :only => [:status_build, :pre_build, :post_build] + # load_and_authorize_resource :project, :except => CALLBACK_ACTIONS + # load_and_authorize_resource :build_list, :through => :project, :shallow => true, :except => CALLBACK_ACTIONS load_and_authorize_resource :except => CALLBACK_ACTIONS def all @@ -29,15 +31,6 @@ class BuildListsController < ApplicationController render :action => 'index' end - def cancel - build_list = BuildList.find(params[:id]) - if build_list.cancel_build_list - redirect_to :back, :notice => t('layout.build_lists.cancel_successed') - else - redirect_to :back, :notice => t('layout.build_lists.cancel_failed') - end - end - def index @build_lists = @project.build_lists.recent.paginate :page => params[:page] @filter = BuildList::Filter.new(@project) @@ -57,6 +50,35 @@ class BuildListsController < ApplicationController @item_groups = @build_list.items.group_by_level end + def new + @build_list = BuildList.new + end + + def create + notices, errors = [], [] + Arch.where(:id => params[:archs]).each do |arch| + Platform.main.where(:id => params[:bpls]).each do |bpl| + @build_list = @project.build_lists.build(params[:build_list]) + @build_list.bpl = bpl; @build_list.arch = arch + flash_options = {:project_version => @build_list.project_version, :arch => arch.name, :bpl => bpl.name, :pl => @build_list.pl} + if @build_list.save + notices << t("flash.build_list.saved", flash_options) + else + errors << t("flash.build_list.save_error", flash_options) + end + end + end + errors << t("flash.build_list.no_arch_or_platform_selected") if errors.blank? and notices.blank? + if errors.present? + @build_list ||= BuildList.new + flash[:error] = errors.join('
').html_safe + render :action => :new + else + flash[:notice] = notices.join('
').html_safe + redirect_to @project + end + end + def publish @build_list = @project.build_lists.find(params[:id]) @build_list.publish @@ -64,6 +86,15 @@ class BuildListsController < ApplicationController redirect_to project_build_lists_path(@project) end + def cancel + build_list = BuildList.find(params[:id]) + if build_list.cancel_build_list + redirect_to :back, :notice => t('layout.build_lists.cancel_successed') + else + redirect_to :back, :notice => t('layout.build_lists.cancel_failed') + end + end + def status_build @item = @build_list.items.find_by_name!(params[:package_name]) @item.status = params[:status] diff --git a/app/controllers/platforms_controller.rb b/app/controllers/platforms_controller.rb index f096ff050..3d34da351 100644 --- a/app/controllers/platforms_controller.rb +++ b/app/controllers/platforms_controller.rb @@ -30,7 +30,7 @@ class PlatformsController < ApplicationController {:name => p.name, :architectures => ['i586', 'x86_64'], :repositories => p.repositories.map(&:name), - :url => "http://#{request.host_with_port}/downloads/#{p.name}/repository/"} + :url => p.public_downloads_url(request.host_with_port)} end } end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 4ec20ac45..a870d584c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -4,14 +4,12 @@ class ProjectsController < ApplicationController belongs_to :user, :group, :polymorphic => true, :optional => true before_filter :authenticate_user!, :except => :auto_build - before_filter :find_project, :only => [:show, :edit, :update, :destroy, :fork, :build, :process_build] + before_filter :find_project, :only => [:show, :edit, :update, :destroy, :fork] before_filter :get_paths, :only => [:new, :create, :edit, :update] load_and_authorize_resource def index -# puts parent.inspect -# puts parent.is_a? User @projects = if parent? and !parent.nil? parent.projects else @@ -95,52 +93,6 @@ class ProjectsController < ApplicationController render :nothing => true end - def build - @arches = Arch.recent - @bpls = Platform.main - @pls = @project.repositories.collect { |rep| ["#{rep.platform.name}/#{rep.name}", rep.platform.id] } - @project_versions = @project.versions - end - - def process_build - @arch_ids = params[:build][:arches].select{|_,v| v == "1"}.collect{|x| x[0].to_i } - @arches = Arch.where(:id => @arch_ids) - - @project_version = params[:build][:project_version] - - bpls_ids = params[:build][:bpl].blank? ? [] : params[:build][:bpl].select{|_,v| v == "1"}.collect{|x| x[0].to_i } - bpls = Platform.where(:id => bpls_ids) - - pl = Platform.find params[:build][:pl] - update_type = params[:build][:update_type] - build_requires = params[:build][:build_requires] - - @project_versions = @project.versions - - if !check_arches || !check_project_versions - @arches = Arch.recent - @bpls = Platform.main - @pls = @project.repositories.collect { |rep| ["#{rep.platform.name}/#{rep.name}", rep.platform.id] } - - render :action => "build" - else - flash[:notice], flash[:error] = "", "" - @arches.each do |arch| - bpls.each do |bpl| - build_list = @project.build_lists.new(:arch => arch, :project_version => @project_version, :pl => pl, :bpl => bpl, :update_type => update_type, :build_requires => build_requires) - - if build_list.save - flash[:notice] += t("flash.build_list.saved", :project_version => @project_version, :arch => arch.name, :bpl => bpl.name, :pl => pl) - else - flash[:error] += t("flash.build_list.save_error", :project_version => @project_version, :arch => arch.name, :bpl => bpl.name, :pl => pl) - end - end - end - - redirect_to project_path(@project) - end - end - protected def get_paths @@ -161,28 +113,4 @@ class ProjectsController < ApplicationController def find_project @project = Project.find params[:id] end - - def check_arches - if @arch_ids.blank? - flash[:error] = t("flash.build_list.no_arch_selected") - false - elsif @arch_ids.length != @arches.length - flash[:error] = t("flash.build_list.no_arch_found") - false - else - true - end - end - - def check_project_versions - if @project_version.blank? - flash[:error] = t("flash.build_list.no_project_version_selected") - false - elsif !@project_versions.flatten.include?(@project_version) - flash[:error] = t("flash.build_list.no_project_version_found", :project_version => @project_version) - false - else - true - end - end end diff --git a/app/models/ability.rb b/app/models/ability.rb index fd6118a6b..1741cb881 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -51,14 +51,14 @@ class Ability can [:read, :create], PrivateUser, :platform => {:owner_type => 'User', :owner_id => user.id} # If rule has multiple conditions CanCan joins them by 'AND' sql operator - can [:read, :update, :process_build, :build, :destroy], Project, :owner_type => 'User', :owner_id => user.id + can [:read, :update, :destroy], Project, :owner_type => 'User', :owner_id => user.id #can :read, Project, :relations => {:role => 'reader'} can :read, Project, projects_in_relations_with(:role => 'reader', :object_type => 'User', :object_id => user.id) do |project| #The can? and cannot? call cannot be used with a raw sql 'can' definition. project.relations.exists?(:role => 'reader', :object_type => 'User', :object_id => user.id) end - #can [:update, :process_build, :build], Project, :relations => {:role => 'writer'} - can [:read, :update, :process_build, :build], Project, projects_in_relations_with(:role => ['writer', 'admin'], :object_type => 'User', :object_id => user.id) do |project| + #can [:update], Project, :relations => {:role => 'writer'} + can [:read, :update], Project, projects_in_relations_with(:role => ['writer', 'admin'], :object_type => 'User', :object_id => user.id) do |project| project.relations.exists?(:role => ['writer', 'admin'], :object_type => 'User', :object_id => user.id) end @@ -112,13 +112,13 @@ class Ability project.relations.exists? :object_id => user.group_ids, :object_type => 'Group', :role => 'admin' end - can [:read, :update, :process_build, :build, :destroy], Project, :owner_type => 'Group', :owner_id => user.group_ids + can [:read, :update, :destroy], Project, :owner_type => 'Group', :owner_id => user.group_ids #can :read, Project, :relations => {:role => 'reader', :object_type => 'Group', :object_id => user.group_ids} can :read, Project, projects_in_relations_with(:role => 'reader', :object_type => 'Group', :object_id => user.group_ids) do |project| project.relations.exists?(:role => 'reader', :object_type => 'Group', :object_id => user.group_ids) end - #can [:update, :process_build, :build], Project, :relations => {:role => 'writer', :object_type => 'Group', :object_id => user.group_ids} - can [:read, :update, :process_build, :build], Project, projects_in_relations_with(:role => ['writer', 'admin'], :object_type => 'Group', :object_id => user.group_ids) do |project| + #can [:update], Project, :relations => {:role => 'writer', :object_type => 'Group', :object_id => user.group_ids} + can [:read, :update], Project, projects_in_relations_with(:role => ['writer', 'admin'], :object_type => 'Group', :object_id => user.group_ids) do |project| project.relations.exists?(:role => ['writer', 'admin'], :object_type => 'Group', :object_id => user.group_ids) end @@ -135,6 +135,7 @@ class Ability end can(:fork, Project) {|p| can? :read, p} + can(:create, BuildList) {|bl| can? :update, bl.project} # Things that can not do simple user cannot :create, [Platform, User] diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 1cab5a9f8..27be7ac92 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -5,9 +5,7 @@ class BuildList < ActiveRecord::Base belongs_to :bpl, :class_name => 'Platform' has_many :items, :class_name => "BuildList::Item", :dependent => :destroy - validates :project_id, :presence => true - validates :project_version, :presence => true - #validates_inclusion_of :update_type, :in => UPDATE_TYPES#, :message => "extension %s is not included in the list" + validates :project_id, :project_version, :arch, :include_repos, :presence => true UPDATE_TYPES = %w[security bugfix enhancement recommended newpackage] validates :update_type, :inclusion => UPDATE_TYPES validate lambda { @@ -82,6 +80,7 @@ class BuildList < ActiveRecord::Base scope :scoped_to_project_name, lambda {|project_name| joins(:project).where('projects.name LIKE ?', "%#{project_name}%")} serialize :additional_repos + serialize :include_repos before_create :set_default_status after_create :place_build @@ -139,8 +138,8 @@ class BuildList < ActiveRecord::Base end def place_build - #XML-RPC params: project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web - self.status = BuildServer.add_build_list project.name, project_version, pl.name, arch.name, (pl_id == bpl_id ? '' : bpl.name), update_type, build_requires, id + #XML-RPC params: project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web, include_repos + self.status = BuildServer.add_build_list project.name, project_version, pl.name, arch.name, (pl_id == bpl_id ? '' : bpl.name), update_type, build_requires, id, include_repos self.status = BUILD_PENDING if self.status == 0 save end diff --git a/app/models/platform.rb b/app/models/platform.rb index 311c8545d..1ab3f10e6 100644 --- a/app/models/platform.rb +++ b/app/models/platform.rb @@ -43,14 +43,17 @@ class Platform < ActiveRecord::Base urpmi_commands[pl.name] = [] local_pair = pl.id != self.id ? blank_pair : pair head = hidden? ? "http://#{local_pair[:login]}@#{local_pair[:pass]}:#{host}/private/" : "http://#{host}/downloads/" - if pl.distrib_type == APP_CONFIG['distr_types'].first + # prefix = prefix_url hidden?, :host => host, :login => local_pair[:login], :password => local_pair[:pass] + if pl.distrib_type == APP_CONFIG['distr_types'].first # mdv Arch.all.each do |arch| tail = "/#{arch.name}/main/release" urpmi_commands[pl.name] << "urpmi.addmedia #{name} #{head}#{name}/repository/#{pl.name}#{tail}" + # urpmi_commands[pl.name] << "urpmi.addmedia #{name} #{prefix}/#{name}/repository#{pl.downloads_url '', arch.name, 'main', 'release'}" end else tail = '' urpmi_commands[pl.name] << "urpmi.addmedia #{name} #{head}#{name}/repository/#{pl.name}#{tail}" + # urpmi_commands[pl.name] << "urpmi.addmedia #{name} #{prefix}/#{name}/repository#{pl.downloads_url ''}" end end @@ -65,6 +68,27 @@ class Platform < ActiveRecord::Base Rails.root.join("public", "downloads", name) end + def prefix_url(pub, options = {}) + options[:host] ||= EventLog.current_controller.request.host_with_port rescue ::Rosa::Application.config.action_mailer.default_url_options[:host] + pub ? "http://#{options[:host]}/downloads" : "http://#{options[:login]}:#{options[:password]}@#{options[:host]}/private" + end + + def public_downloads_url(host = nil, arch = nil, repo = nil, suffix = nil) + downloads_url prefix_url(true, :host => host), arch, repo, suffix + end + + def private_downloads_url(login, password, host = nil, arch = nil, repo = nil, suffix = nil) + downloads_url prefix_url(false, :host => host, :login => login, :password => password), arch, repo, suffix + end + + def downloads_url(prefix, arch = nil, repo = nil, suffix = nil) + "#{prefix}/#{name}/repository/".tap do |url| + url << "#{arch}/" if arch.present? + url << "#{repo}/" if repo.present? + url << "#{suffix}/" if suffix.present? + end + end + def hidden? visibility == 'hidden' end @@ -115,9 +139,7 @@ class Platform < ActiveRecord::Base system("sudo mkdir -p #{mount_path}") system("sudo mount --bind #{path} #{mount_path}") Arch.all.each do |arch| - host = EventLog.current_controller.request.host_with_port rescue ::Rosa::Application.config.action_mailer.default_url_options[:host] - url = "http://#{host}/downloads/#{name}/repository/" - str = "country=Russian Federation,city=Moscow,latitude=52.18,longitude=48.88,bw=1GB,version=2011,arch=#{arch.name},type=distrib,url=#{url}\n" + str = "country=Russian Federation,city=Moscow,latitude=52.18,longitude=48.88,bw=1GB,version=2011,arch=#{arch.name},type=distrib,url=#{public_downloads_url}\n" File.open(File.join(mount_path, "#{name}.#{arch.name}.list"), 'w') {|f| f.write(str) } end end diff --git a/app/models/project.rb b/app/models/project.rb index f0e66c885..0e5330202 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -128,6 +128,10 @@ class Project < ActiveRecord::Base end end + def platforms + @platforms ||= repositories.map(&:platform).uniq + end + protected def build_path(dir) diff --git a/app/views/build_lists/_include_repos.html.haml b/app/views/build_lists/_include_repos.html.haml new file mode 100644 index 000000000..55902b2f9 --- /dev/null +++ b/app/views/build_lists/_include_repos.html.haml @@ -0,0 +1,3 @@ +- platform.repositories.each do |repo| + = check_box_tag "build_list[include_repos][]", repo.id, repo.name == 'main' || @project.repositories.map(&:id).include?(repo.id), :id => "include_repos_#{repo.id}" # (params[:build_list]||[]).fetch(:include_repos, []).include?(repo.id.to_s) + = label_tag "include_repos_#{repo.id}", repo.name \ No newline at end of file diff --git a/app/views/projects/build.html.haml b/app/views/build_lists/new.html.haml similarity index 52% rename from app/views/projects/build.html.haml rename to app/views/build_lists/new.html.haml index 531334fae..1d53612ca 100644 --- a/app/views/projects/build.html.haml +++ b/app/views/build_lists/new.html.haml @@ -5,46 +5,50 @@ %li= link_to t("layout.projects.new"), new_project_path %li= link_to t("layout.projects.show"), project_path(@project) %li=# link_to "git-repo", project_repo_path(@platform, @repository, @project) - %li.active= link_to t("layout.projects.build"), build_project_path(@project) + %li.active= link_to t("layout.projects.build"), new_project_build_list_path(@project) .content %h2.title= t("layout.projects.new_build", :project_name => @project.name) .inner - = form_for :build, :url => process_build_project_path(@project), :html => { :class => :form, :method => :post } do |f| + = form_for [@project, @build_list], :html => { :class => :form, :method => :post } do |f| .columns.wat-cf .column.left .group = f.label :project_version, t("activerecord.attributes.build_list.project_version"), :class => :label - = f.select :project_version, @project_versions + = f.select :project_version, @project.versions .group.pl_ids_container = f.label :bpl, t("activerecord.attributes.build_list.bpl"), :class => :label - - @bpls.each do |bpl| - = f.check_box "bpl[#{bpl.id}]", :bpl_id => bpl.id, :class => 'build_bpl_ids' - = bpl.name + - Platform.main.each do |bpl| + = check_box_tag "bpls[]", bpl.id, (params[:bpls]||[]).include?(bpl.id.to_s), :class => 'build_bpl_ids', :id => "bpls_#{bpl.id}" + = label_tag "bpls_#{bpl.id}", bpl.name %br - + .group = f.label :update_type, t("activerecord.attributes.build_list.update_type"), :class => :label - = f.select :update_type, BuildList::UPDATE_TYPES.collect { |ut| [ut, ut] } - + = f.select :update_type, BuildList::UPDATE_TYPES + .group = f.check_box :build_requires - = t("activerecord.attributes.build_list.build_requires") + = f.label :build_requires, t("activerecord.attributes.build_list.build_requires") .column.right .group = f.label :arches, t("activerecord.attributes.build_list.arch"), :class => :label - - @arches.each do |arch| - = f.check_box "arches[#{arch.id}]" - = arch.name + - Arch.recent.each do |arch| + = check_box_tag "archs[]", arch.id, (params[:archs]||[]).include?(arch.id.to_s), :id => "archs_#{arch.id}" + = label_tag "archs_#{arch.id}", arch.name %br - + .group - = f.label :pl, t("activerecord.attributes.build_list.pl"), :class => :label - = f.select :pl, @pls + = f.label :pl_id, t("activerecord.attributes.build_list.pl"), :class => :label + = f.select :pl_id, @project.repositories.collect{|r| ["#{r.platform.name}/#{r.name}", r.platform.id]} + + .group + = f.label :include_repos, t("activerecord.attributes.build_list.include_repos"), :class => :label + #include_repos .group.navform.wat-cf %button.button{:type => "submit"} @@ -53,4 +57,6 @@ %span.text_button_padding= t("layout.or") = link_to t("layout.cancel"), root_path, :class => "text_button_padding link_button" --# content_for :sidebar, render(:partial => 'sidebar') +.preloaded_include_repos{:style => 'display: none'} + - @project.platforms.each do |p| + %div{:class => "include_repos_#{p.id}"}= render 'include_repos', :platform => p diff --git a/app/views/build_lists/show.html.haml b/app/views/build_lists/show.html.haml index 6d53030e6..6ed12c9e9 100644 --- a/app/views/build_lists/show.html.haml +++ b/app/views/build_lists/show.html.haml @@ -34,6 +34,11 @@ = t("activerecord.attributes.build_list.pl") \: = @build_list.pl.name + %p + %b + = t("activerecord.attributes.build_list.include_repos") + \: + = (@build_list.include_repos||[]).map{|r| Repository.find(r).name}.join(', ') %p %b = t("activerecord.attributes.build_list.update_type") diff --git a/app/views/git/shared/_navigation.html.haml b/app/views/git/shared/_navigation.html.haml index cb135dea6..e09fcb051 100644 --- a/app/views/git/shared/_navigation.html.haml +++ b/app/views/git/shared/_navigation.html.haml @@ -4,7 +4,7 @@ %li= link_to t("layout.projects.new"), new_project_path %li= link_to t("layout.projects.show"), project_path(@project) %li.active= link_to t("layout.git.repositories.source"), project_repo_path(@project) - %li= link_to t("layout.projects.build"), build_project_path(@project) + %li= link_to t("layout.projects.build"), new_project_build_list_path(@project) %ul#git_submenu.sub-wat-cf.wat-cf %li= link_to t("layout.git.repositories.commits"), commits_path(@project, :treeish => @treeish) diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index 3930d97a2..8d8e03902 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -5,7 +5,7 @@ %li= link_to t("layout.projects.new"), new_project_path %li.active= link_to t("layout.projects.show"), project_path(@project) %li= link_to t("layout.git.repositories.source"), project_repo_path(@project) - %li= link_to t("layout.projects.build"), build_project_path(@project) + %li= link_to t("layout.projects.build"), new_project_build_list_path(@project) .content .inner diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 6f343a6e4..4b414a876 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -412,8 +412,7 @@ ru: save_error: Не удалось сохранить билд лист для версии '%{project_version}', платформы '%{bpl}' и архитектуры '%{arch}' no_project_version_selected: Выберите какую-нибудь версию no_project_version_found: Выбранная версия '%{project_version}' не найдена - no_arch_selected: Выберите хотя бы одну ахритектуру - no_arch_found: Выбранные ахритектуры не найдены + no_arch_or_platform_selected: Выберите хотя бы одну ахритектуру и платформу wrong_platform: Для основного репозитория (main) может быть выбран только его же основная платформа! can_not_published: Опубликовать сборку можно только со статусом "Собран" @@ -590,6 +589,7 @@ ru: is_circle: Циклическая сборка notified_at: Информация получена additional_repos: Дополнительные репозитории + include_repos: Подключаемые репозитории updated_at: Обновлен created_at: Создан pl: Репозиторий для сохранения пакетов diff --git a/config/routes.rb b/config/routes.rb index 5d22a7cfe..dafd4ad78 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -69,7 +69,7 @@ Rosa::Application.routes.draw do resources :projects do resource :repo, :controller => "git/repositories", :only => [:show] - resources :build_lists, :only => [:index, :show] do + resources :build_lists, :only => [:index, :show, :new, :create] do collection do get :recent post :filter @@ -93,8 +93,6 @@ Rosa::Application.routes.draw do # end member do - get :build - post :process_build post :fork end collection do diff --git a/db/migrate/20111220152347_add_include_repos_to_build_lists.rb b/db/migrate/20111220152347_add_include_repos_to_build_lists.rb new file mode 100644 index 000000000..cb0b8d7b0 --- /dev/null +++ b/db/migrate/20111220152347_add_include_repos_to_build_lists.rb @@ -0,0 +1,9 @@ +class AddIncludeReposToBuildLists < ActiveRecord::Migration + def self.up + add_column :build_lists, :include_repos, :text + end + + def self.down + remove_column :build_lists, :include_repos + end +end diff --git a/db/schema.rb b/db/schema.rb index 17c70bd11..1a7fdc5fd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20111130181101) do +ActiveRecord::Schema.define(:version => 20111220152347) do create_table "arches", :force => true do |t| t.string "name", :null => false @@ -69,6 +69,7 @@ ActiveRecord::Schema.define(:version => 20111130181101) do t.string "update_type" t.integer "bpl_id" t.integer "pl_id" + t.text "include_repos" end add_index "build_lists", ["arch_id"], :name => "index_build_lists_on_arch_id" diff --git a/lib/build_server.rb b/lib/build_server.rb index 6ce8f87bb..cc655323b 100644 --- a/lib/build_server.rb +++ b/lib/build_server.rb @@ -72,8 +72,15 @@ class BuildServer self.client.call('add_to_repo', name, repo_name) end - def self.add_build_list project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web - self.client.call('add_build_list', project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web) + def self.add_build_list project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web, include_repos + include_repos_json = {}.tap do |h| + include_repos.each do |r| + repo = Repository.find r + h[repo.name] = repo.platform.public_downloads_url(nil, arch, repo.name) + end + end.to_json + # raise include_repos_json.inspect + self.client.call('add_build_list', project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web, include_repos_json) end def self.delete_build_list idlist diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 78895567c..394922672 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1,42 +1,29 @@ -function check_by_ids(ids) { - for(var i = 0; i < ids.length; i++){ - $('#'+ids[i]).attr('checked', true); - } - return false; -} - -function uncheck_by_ids(ids) { - for(var i = 0; i < ids.length; i++){ - $('#'+ids[i]).attr('checked', false); - } - return false; -} - $(document).ready(function() { - $('.pl_ids_container input[type="hidden"]').remove(); - - $('select#build_pl').change(function() { - var is_pl_main = false; - var granted_bpl_id = ''; - var pl_id = $('select#build_pl').val(); + $('select#build_list_pl_id').change(function() { + var platform_id = $(this).val(); - $('input.build_bpl_ids').each(function(i,el) { - var bpl_id = $(el).attr('bpl_id'); - if (pl_id == bpl_id) { - is_pl_main = true; - //granted_bpl_id = $(el).attr('bpl_id'); - } - }); + $('#include_repos').html($('.preloaded_include_repos .include_repos_' + platform_id).html()); - if (is_pl_main) { - $('input.build_bpl_ids').attr('disabled', 'disabled'); - $('input.build_bpl_ids[bpl_id="'+pl_id+'"]').removeAttr('disabled'); - } else { - $('input.build_bpl_ids').removeAttr('disabled'); - } + // var is_pl_main = false; + // var granted_bpl_id = ''; + // var pl_id = $('select#build_pl').val(); + // + // $('input.build_bpl_ids').each(function(i,el) { + // var bpl_id = $(el).attr('bpl_id'); + // if (pl_id == bpl_id) { + // is_pl_main = true; + // //granted_bpl_id = $(el).attr('bpl_id'); + // } + // }); + // + // if (is_pl_main) { + // $('input.build_bpl_ids').attr('disabled', 'disabled'); + // $('input.build_bpl_ids[bpl_id="'+pl_id+'"]').removeAttr('disabled'); + // } else { + // $('input.build_bpl_ids').removeAttr('disabled'); + // } }); - - $('select#build_pl').trigger('change'); + $('select#build_list_pl_id').trigger('change'); $('input.user_role_chbx').click(function() { var current = $(this);