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]
--
1.7.2.3
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel