initial import
[ruby-cruxutils.git] / lib / cruxutils / packagedb.rb
1 module CruxUtils
2
3 class PackageDb
4         class PackageDbError < CruxUtilsError; end
5         class PackageNotFoundError < PackageDbError; end
6
7         FILE = "/var/lib/pkg/db"
8
9         def PackageDb.open
10                 db = PackageDb.new
11
12                 yield db
13         ensure
14                 db.close
15         end
16
17         def initialize
18                 @lines = File.read(FILE).split("\n").map { |l| l.strip }
19         end
20
21         def close
22         end
23
24         def [](name)
25                 name = name.to_str.strip
26                 found = -1
27
28                 found = @lines.find { |l| l == name }
29                 raise(PackageNotFoundError) if found.nil?
30
31                 i = @lines.index(found)
32
33                 version, release = @lines[i + 1].match(/^(.*)-(\d+)$/).captures
34                 files = []
35
36                 (i + 2).upto(@lines.length) do |i|
37                         break if @lines[i].strip.empty?
38
39                         files << @lines[i]
40                 end
41
42                 Package.new(name, version, release, files.sort)
43         end
44 end
45
46 end