[email protected] wrote: > From: Jan Provaznik <[email protected]> > > This patch removes saving group in XML for packages - this info is not used by > builder and is no longer needed in UI with new selection model. Removing group > also fixes error in adding software - when a group was selected and a > package from the group was selected too, package was added twice into XML. > --- > src/app/controllers/templates_controller.rb | 14 +--- > src/app/models/template.rb | 2 - > src/app/util/image_descriptor_xml.rb | 108 > +++-------------------- > src/app/views/templates/_selected_packages.haml | 12 --- > 4 files changed, 13 insertions(+), 123 deletions(-) > delete mode 100644 src/app/views/templates/_selected_packages.haml > > diff --git a/src/app/controllers/templates_controller.rb > b/src/app/controllers/templates_controller.rb > index 97a8cec..0e69647 100644 > --- a/src/app/controllers/templates_controller.rb > +++ b/src/app/controllers/templates_controller.rb > @@ -45,16 +45,6 @@ class TemplatesController < ApplicationController > @groups = @repository_manager.all_groups(params[:repository]) > end > > - #def select_package > - # update_group_or_package(:add_package, params[:package], params[:group]) > - # render :action => 'new' > - #end > - > - #def remove_package > - # update_group_or_package(:remove_package, params[:package], > params[:group]) > - # render :action => 'new' > - #end > - > def create > if params[:cancel] > redirect_to :action => 'index' > @@ -73,7 +63,7 @@ class TemplatesController < ApplicationController > # again > params.keys.each do |param| > if param =~ /^remove_package_(.*)$/ > - update_group_or_package(:remove_package, $1, nil) > + update_group_or_package(:remove_package, $1) > render :action => 'new' > return > end > @@ -103,7 +93,7 @@ class TemplatesController < ApplicationController > @groups = @repository_manager.all_groups(params[:repository]) > if params[:add_selected] > params[:groups].to_a.each { |group| @tpl.xml.add_group(group) } > - params[:packages].to_a.each { |pkg| @tpl.xml.add_package(pkg, nil) } > + params[:packages].to_a.each { |pkg| @tpl.xml.add_package(pkg) } > @tpl.save_xml! > end > if params[:ajax] > diff --git a/src/app/models/template.rb b/src/app/models/template.rb > index dec7b4b..e592fff 100644 > --- a/src/app/models/template.rb > +++ b/src/app/models/template.rb > @@ -24,8 +24,6 @@ class Template < ActiveRecord::Base > doc.description = opts[:summary] if opts[:summary] > doc.platform_version = opts[:platform_version] if opts[:platform_version] > doc.architecture = opts[:architecture] if opts[:architecture] > - doc.services = (opts[:services] || []) if opts[:services] or > opts[:set_services] > - doc.packages = (opts[:packages] || []) if opts[:packages] or > opts[:set_packages] > save_xml! > end > > diff --git a/src/app/util/image_descriptor_xml.rb > b/src/app/util/image_descriptor_xml.rb > index 00f8bb2..e8fe552 100644 > --- a/src/app/util/image_descriptor_xml.rb > +++ b/src/app/util/image_descriptor_xml.rb > @@ -24,14 +24,6 @@ class ImageDescriptorXML > > UNKNOWN_GROUP = 'Individual packages' > > - # FIXME: temporary way to only add jboss until other > - # services are supported > - SERVICE_PACKAGE_GROUPS = { > - # FIXME: jboss service is disabled because we don't have public repo > - # which contains groups for jboss > - #'jboss' => 'JBoss Core Packages' > - } > - > def initialize(xmlstr = "") > @doc = Nokogiri::XML(xmlstr) > # create at least root node if it doesn't exist > @@ -98,9 +90,6 @@ class ImageDescriptorXML > snode = Nokogiri::XML::Node.new('service', @doc) > service_node << snode > snode.content = s[0] > - if group = SERVICE_PACKAGE_GROUPS[s[0]] > - add_group(group) > - end > end > @services = nil > end > @@ -119,67 +108,18 @@ class ImageDescriptorXML > return @doc.to_xml > end > > - def packages_by_group > - groups = {} > - @root.xpath('/image/groups/group').each do |g| > - groups[g.text] = [] > - end > - @root.xpath('/image/packages/package').each do |s| > - name = s.at_xpath('.//group').text > - group = (groups[name] || groups[UNKNOWN_GROUP] ||= []) > - group << {:name => s.at_xpath('.//name').text} > - end > - return groups > - end > - > - def all_packages_by_group > - groups = {} > - all_groups = repository_manager.all_groups > - packages_by_group.each do |group, pkgs| > - if group_all = all_groups[group] > - groups[group] ||= [] > - group_all[:packages].keys.sort.each do |pkg| > - groups[group] << {:name => pkg, :checked => pkgs.find {|p| > p[:name] == pkg} ? true : false} > - end > - else > - groups[UNKNOWN_GROUP] ||= [] > - groups[UNKNOWN_GROUP] += pkgs.map {|pkg| {:name => pkg[:name], > :checked => true}} > - end > - end > - > - unknown_group = groups.delete(UNKNOWN_GROUP) > - sorted = groups.keys.sort.map do |group| > - {:name => group, :pkgs => groups[group]} > - end > - if unknown_group > - sorted << {:name => UNKNOWN_GROUP, :pkgs => unknown_group} > - end > - > - return sorted > - end > - > def packages > packages = [] > @root.xpath('/image/packages/package').each do |s| > - packages << {:name => s.at_xpath('.//name').text, :group => > s.at_xpath('.//group').text} > + packages << {:name => s.at_xpath('.//name').text} > end > return packages > end > > - def packages=(packages) > + def add_package(pkg) > pkgs_node = get_or_create_node('packages') > - pkgs_node.xpath('.//package').remove > - packages.uniq.each do |pkg| > - group, name = pkg.split(/#/, 2) > - add_package_node(pkgs_node, name, group) > - end > - end > - > - def add_package(pkg, group) > - group ||= UNKNOWN_GROUP > - pkgs_node = get_or_create_node('packages') > - unless older = packages.find {|p| p[:name] == pkg and p[:group] == group} > - add_package_node(pkgs_node, pkg, group) > + unless older = packages.find {|p| p[:name] == pkg} > + add_package_node(pkgs_node, pkg) > end > end > > @@ -187,40 +127,17 @@ class ImageDescriptorXML > unless group = repository_manager.all_groups[gname] > raise "group #{gname} not found in repositories" > end > - groups = packages_by_group > - unless groups[gname] > - groups_node = get_or_create_node('groups') > - add_group_node(groups_node, gname) > - end > group[:packages].each do |p, info| > next if info[:type] == 'optional' > - add_package(p, group[:name]) > + add_package(p) > end > end > > - def remove_group(group) > - groups = packages_by_group > - groups.delete(group) > - pkgs_node = get_or_create_node('packages') > - pkgs_node.xpath('.//package').remove > - groups_node = get_or_create_node('groups') > - groups_node.xpath('.//group').remove > - groups.each do |group, pkgs| > - pkgs.each { |pkg| add_package_node(pkgs_node, pkg[:name], group) } > - add_group_node(groups_node, group) > - end > - end > - > - # FIXME: rewrite cleanly w/o recreating all nodes > - def remove_package(package, grp = nil) > - groups = packages_by_group > - pkgs_node = get_or_create_node('packages') > - pkgs_node.xpath('.//package').remove > - groups_node = get_or_create_node('groups') > - groups_node.xpath('.//group').remove > - groups.each do |group, pkgs| > - pkgs.select { |pkg| pkg[:name] != package }.each { |pkg| > add_package_node(pkgs_node, pkg[:name], group) } > - add_group_node(groups_node, group) > + def remove_package(package) > + @root.xpath('/image/packages/package').each do |s| > + if name = s.at_xpath('.//name') and name.text.to_s == package > + s.remove > + end > end > end > > @@ -254,14 +171,11 @@ class ImageDescriptorXML > return node ? node.text : nil > end > > - def add_package_node(parent, name, group) > + def add_package_node(parent, name) > pnode = get_or_create_node('package', parent) > n = Nokogiri::XML::Node.new('name', @doc) > n.content = name > pnode << n > - n = Nokogiri::XML::Node.new('group', @doc) > - n.content = group > - pnode << n > end > > def repository_manager > diff --git a/src/app/views/templates/_selected_packages.haml > b/src/app/views/templates/_selected_packages.haml > deleted file mode 100644 > index b0f8efe..0000000 > --- a/src/app/views/templates/_selected_packages.haml > +++ /dev/null > @@ -1,12 +0,0 @@ > -%ul{:id => "selected_packages", :class => "selection_list"} > - - @image_descriptor.xml.all_packages_by_group.each do |group| > - %li{:class => 'group'} > - %span{:class => "groupname"} > - = group[:name] > - %a{:class => 'remove_group action_link', :href => url_for(:action => > 'remove_group', :id => @image_descriptor, :group => group[:name])} > - Remove > - %ul{:class => 'groupkgs'} > - - group[:pkgs].each do |pkg| > - %li{:class => 'pkgname'} > - %input{:type => 'checkbox', :name => 'xml[packages][]', :value > => group[:name] + '#' + pkg[:name], :checked => pkg[:checked]} > - = pkg[:name] > Ack and pushed
Scott _______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
