Author: kkaempf Date: Fri Jan 4 17:40:18 2008 New Revision: 8208 URL: http://svn.opensuse.org/viewcvs/zypp?rev=8208&view=rev Log: add 'satsolver' as supported output Added: trunk/repotools/yast_to_sat.rb (with props) trunk/repotools/zypptools/output/sat.rb Added: trunk/repotools/yast_to_sat.rb URL: http://svn.opensuse.org/viewcvs/zypp/trunk/repotools/yast_to_sat.rb?rev=8208&view=auto ============================================================================== --- trunk/repotools/yast_to_sat.rb (added) +++ trunk/repotools/yast_to_sat.rb Fri Jan 4 17:40:18 2008 @@ -0,0 +1,80 @@ +#!/usr/bin/ruby +# +# yast_to_sat.rb +# +# loads a 'yast' type repository (../suse/setup/descr) +# into sat-solver +# +# run: ruby yast_to_sat.rb <dir> +# +# +require 'fileutils' +require 'getoptlong' + +require 'zypptools/input/yast' +require 'zypptools/lib/arch' +require 'zypptools/output/sat' + +$: << "../sat-solver/build/bindings/ruby" +require 'satsolver' + +$debug = 0 + +def usage why + STDERR.puts why + STDERR.puts "Usage: yast_to_sat.rb --repo <dir>" + STDERR.puts "<dir> is a yast repository" + exit 1 +end + +options = GetoptLong.new( + [ "--repo", "--repodir", GetoptLong::REQUIRED_ARGUMENT ], + [ "--repotype", GetoptLong::REQUIRED_ARGUMENT ], + [ "--arch", GetoptLong::REQUIRED_ARGUMENT ], + [ "--debug", GetoptLong::NO_ARGUMENT ] +) + +format = nil +repotype = :yast +repopath = nil +arch = nil + +begin +options.each do |opt, arg| + case opt + when "--format": format = arg + when "--repo": repopath = arg + when "--repotype": repotype = arg.to_sym + when "--arch": arch = Arch.new( arg ) + when "--debug": $debug += 1 + else + STDERR.puts "Ignoring unrecognized option #{opt}" + end +end +rescue +end + +$debug = nil if $debug == 0 + +depth = 99999 if depth == 0 + +usage "excessive arguments" unless ARGV.empty? +usage "--repo parameter missing" unless repopath + +begin + arch = Arch.new( "i686" ) unless arch + yast = YaST.new( repopath, arch ) + STDERR.puts "Parsed #{yast.packages.size} packages" if yast.packages + STDERR.puts "Parsed #{yast.patterns.size} patterns" if yast.patterns + STDERR.puts "Parsed #{yast.products.size} products" if yast.products + + pool = SatSolver::Pool.new + Sat.to_sat( yast, pool, 'yast', [] ) + STDERR.puts "Pool has #{pool.size} solvables" + +rescue Exception => bang + STDERR.puts bang + STDERR.puts "Giving up" + raise +end + Added: trunk/repotools/zypptools/output/sat.rb URL: http://svn.opensuse.org/viewcvs/zypp/trunk/repotools/zypptools/output/sat.rb?rev=8208&view=auto ============================================================================== --- trunk/repotools/zypptools/output/sat.rb (added) +++ trunk/repotools/zypptools/output/sat.rb Fri Jan 4 17:40:18 2008 @@ -0,0 +1,144 @@ +# +# sat.rb +# +# Feed repository into sat-solver Repo +# +# + +require 'zypptools/lib/package' +require 'zypptools/lib/pattern' +require 'zypptools/lib/selection' +require 'zypptools/lib/product' +require 'zypptools/lib/dependency' + +def make_evr epoch, version, release + if epoch + evr = epoch.to_s + ":" + else + evr = "" + end + evr += version if version + evr += "-" + release if release + evr +end + +class Sat + def Sat.to_sat(repo, pool, name, sel) + satrepo = pool.create_repo( name ) + + if (sel.empty? || sel.include?("packages")) then + repo.packages.each_value { |p| +# puts p + p.to_sat satrepo + } + end +# if (sel.empty? || sel.include?("patches")) then +# repo.patches.each_value { |p| +# puts p +# p.to_sat satrepo +# } +# end + if (sel.empty? || sel.include?("patterns")) then + repo.patterns.each_value { |p| +# puts p + p.to_sat satrepo + } + end + if (sel.empty? || sel.include?("products")) then + repo.products.each_value { |p| +# puts p + p.to_sat satrepo + } + end + if (sel.empty? || sel.include?("selections")) then + repo.selections.each_value { |p| + p.to_sat satrepo + } + end + end +end + +# +# Dependency +# @name, @refers, @op (string), @version, @release, @pre +# +class Dependency + def to_dep dep + return if @name[0,7] == "rpmlib(" + case @op + when nil: op = nil + when "=", "==": op = SatSolver::REL_EQ + when "<": op = SatSolver::REL_LT + when ">": op = SatSolver::REL_GT + when "<=", "=<": op = SatSolver::REL_LE + when ">=", "=>": op = SatSolver::REL_GE + else + STDERR.puts "Unkown dep operation '#{@op}'" + end + name = @name + name = @refers.id2name + ":" + name if @refers + evr = make_evr @epoch, @version, @release + pool = dep.solvable.repo.pool + if op + rel = pool.create_relation( name, op, evr ) + else + rel = pool.create_relation( name ) + end + if @pre + dep.add rel, 1 + else + dep.add rel + end + end +end + +class Resolvable + def to_deps dep_ary, dep_solv + dep_ary.each { |d| d.to_dep( dep_solv ) } if dep_ary + end + + def to_sat repo, name + solvable = repo.create_solvable( name, make_evr( @epoch, @version, @release ), @arch ) + + to_deps prerequires, solvable.requires + to_deps requires, solvable.requires + to_deps provides, solvable.provides + to_deps conflicts, solvable.conflicts + to_deps obsoletes, solvable.obsoletes + to_deps suggests, solvable.suggests + to_deps enhances, solvable.enhances + to_deps supplements, solvable.supplements + to_deps recommends, solvable.recommends + end +end + +class Package + def to_sat repo + super repo, @name + end +end + +class Patch + def to_sat repo + super repo, "patch:" + @name + end +end + +class Pattern + def to_sat repo + super repo, "pattern:" + @name + end +end + +class Selection + def to_sat repo + super repo, "selection:" + @name + end +end + + +class Product + def to_sat repo + super repo, "product:" + @name + end +end -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org