Author: aschnell Date: Fri Jul 20 17:04:43 2007 New Revision: 6131 URL: http://svn.opensuse.org/viewcvs/zypp?rev=6131&view=rev Log: - correct yum generator Added: trunk/repotools/output/yum.rb Modified: trunk/repotools/output/rpmmd.rb Modified: trunk/repotools/output/rpmmd.rb URL: http://svn.opensuse.org/viewcvs/zypp/trunk/repotools/output/rpmmd.rb?rev=6131&r1=6130&r2=6131&view=diff ============================================================================== --- trunk/repotools/output/rpmmd.rb (original) +++ trunk/repotools/output/rpmmd.rb Fri Jul 20 17:04:43 2007 @@ -2,6 +2,9 @@ # http://en.opensuse.org/Standards/Rpm_Metadata # dmacvicar@suse.de +# Unfortunately this creates invalid xml: The closing metadata tag is +# placed before the packages. + require 'rubygems' require 'builder' require 'pathname' @@ -10,11 +13,11 @@ class RpmMdOutput # - # + # # def initialize( path, compress = false ) @path = path - + if ( File.exists?(@path+'/repodata') ) if not ( File.directory?(@path+'/repodata') ) raise "#{@path+'/repodata'} is not a directory" @@ -30,17 +33,17 @@ @primary_file = File.open(@path +'/repodata/primary.xml', 'w') else @primary_file = File.open(@path+'/repodata/primary.xml.gz', 'w') - + end raise "Can't open repodata dir" if @primary_file.nil? end - + # primary builder @primary_builder = Builder::XmlMarkup.new(:target => $stdout, :indent => 2) x = Builder::XmlMarkup.new(:target => $stdout, :indent => 2) x.instruct! :xml, :version=>"1.0", :encoding => "UTF-8" x.metadata :xmlns=>"http://linux.duke.edu/metadata/common", 'xmlns:rpm'.to_sym=>"http://linux.duke.edu/metadata/rpm", 'xmlns:suse'.to_sym=>"http://novell.com/package/metadata/suse/common" - + end =begin @@ -94,7 +97,7 @@ #@primary_file.flush end end - + def finish @primary_file.close end Added: trunk/repotools/output/yum.rb URL: http://svn.opensuse.org/viewcvs/zypp/trunk/repotools/output/yum.rb?rev=6131&view=auto ============================================================================== --- trunk/repotools/output/yum.rb (added) +++ trunk/repotools/output/yum.rb Fri Jul 20 17:04:43 2007 @@ -0,0 +1,78 @@ + +# Output YUM Metadata +# Uses REXML, so might use lots of memory. +# aschnell@suse.de + +require 'rexml/document' +include REXML + + +class YumOutput + + + def write_repomd(path) + + doc = Document.new + doc << XMLDecl.new("1.0", "UTF-8") + + r = doc.add_element 'repomd', {"xmlns"=>"http://linux.duke.edu/metadata/repo"} + + d = r.add_element 'data', {"type"=>"primary"} + d.add_element 'location', {"href"=>"repodata/primary.xml"} + + file = File.new(path + "/repodata/repomd.xml", "w") + doc.write(file, 0) + file.close + + end + + + def write_primary(path, resolvables) + + pkgs = resolvables # FIXME: filter packages + + doc = Document.new + doc << XMLDecl.new("1.0", "UTF-8") + + m = doc.add_element 'metadata', {"xmlns"=>"http://linux.duke.edu/metadata/common", + "xmlns:rpm"=>"http://linux.duke.edu/metadata/rpm", + "xmlns:suse"=>"http://novell.com/package/metadata/suse/common", + "packages"=>pkgs.size} + + pkgs.each do |pkg| + + p = m.add_element 'package', {"type"=>"rpm"} + (p.add_element 'name').text = pkg.name + (p.add_element 'arch').text = pkg.arch + (p.add_element 'version', {"epoch"=>pkg.epoch, "ver"=>pkg.version, "rel"=>pkg.release}) + (p.add_element 'checksum', {"type"=>"sha"}).text = pkg.sha1sum + (p.add_element 'summary').text = pkg.summary + (p.add_element 'description').text = pkg.description + (p.add_element 'packager').text = pkg.packager + (p.add_element 'url').text = pkg.url + + f = p.add_element 'format' + (f.add_element 'rpm:license').text = pkg.license + (f.add_element 'rpm:vendor').text = pkg.vendor + (f.add_element 'rpm:group').text = pkg.group + (f.add_element 'rpm:buildhost').text = pkg.buildhost + (f.add_element 'rpm:sourcerpm').text = pkg.sourcerpm + + end + + file = File.new(path + "/repodata/primary.xml", "w") + doc.write(file, 0) + file.close + + end + + + def write(path, resolvables) + FileUtils.makedirs(path + '/repodata') + write_primary(path, resolvables) + write_repomd(path) + end + + +end + -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org