#!/usr/bin/ruby1.8 # # dpkg.rb - ruby script dpkg compatible interfaces # Copyright (c) 2001 Fumitoshi UKAI # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # require 'debian' require 'getoptlong' include Debian require 'rubygems' rescue nil require 'rgl/adjacency' require 'rgl/implicit' opts = GetoptLong.new( ["--list", "-l", GetoptLong::NO_ARGUMENT], ["--status", "-s", GetoptLong::NO_ARGUMENT], ["--get-selections", GetoptLong::NO_ARGUMENT], ["--print-avail", GetoptLong::NO_ARGUMENT], ["--listfiles", "-L", GetoptLong::NO_ARGUMENT], ["--search", "-S", GetoptLong::NO_ARGUMENT], ["--help", "-h", GetoptLong::NO_ARGUMENT]) opts.ordering = GetoptLong::REQUIRE_ORDER def usage puts "Usage:" puts " #{$0} --list [ ...]" puts " #{$0} --status [ ...]" puts " #{$0} --get-selections [ ...]" puts " #{$0} --print-avail [ ...]" puts " #{$0} --listfiles [ ...]" puts " #{$0} --search [ ...]" puts " #{$0} --help" end class Debian::Deb def each_dependend Dpkg.status(["kmail"]) end end def dependency_graph(pattern) RGL::ImplicitGraph.new { |g| g.vertex_iterator do Dpkg.selections(pattern).each_package do |deb| b.call(deb.package) end end g.adjacent_iterator do |p, b| b.call((x+1)%n) end g.directed = true } end func = Proc.new {|args| $stderr.puts "#{$0}: need an action option"} begin opts.each {|opt, arg| case opt when "--list" then func = Proc.new {|args| Dpkg.status(args).each_package {|deb| puts [Deb::SELECTION_ID[deb.selection] + Deb::STATUS_ID[deb.status] + Deb::EFLAG_ID[deb.ok], deb.package, deb.version, deb.description].join(" ") } } when "--status" then func = Proc.new {|args| Dpkg.status(args).each_package {|deb| puts deb.info_s } } when "--get-selections" then func = Proc.new {|args| Dpkg.selections(args).each_package {|deb| puts [deb.package, deb.selection].join("\t") } } when "--print-avail" then func = Proc.new {|args| Dpkg.avail(args).each_package {|deb| puts deb.info_s } } when "--listfiles" then func = Proc.new {|args| Dpkg.listfiles(args).each {|dlist| puts dlist puts } } when "--search" then func = Proc.new {|args| Dpkg.search(args).each {|m| puts "#{m[0]}: #{m[1]}" } } when "--help" then usage; exit 0 else raise GetoptLong::InvalidOption end } rescue GetoptLong::InvalidOption usage; exit 1 end func.call(ARGV)