]> git.deb.at Git - deb/packages.git/blob - lib/Packages/DB.pm
Enable zh-tw
[deb/packages.git] / lib / Packages / DB.pm
1 package Packages::DB;
2
3 use strict;
4 use warnings;
5
6 use Exporter;
7 use DB_File;
8 use Packages::CGI;
9 use Packages::Config qw( $TOPDIR $DBDIR );
10
11 our @ISA = qw( Exporter );
12 our ( %packages, %sources, %src2bin, %did2pkg, %descriptions,
13       %postf, %spostf, %debtags, %desctrans,
14       $obj, $s_obj, $p_obj, $sp_obj );
15 our @EXPORT = qw( %packages %sources %src2bin %did2pkg %descriptions
16                   %postf %spostf %debtags %desctrans
17                   $obj $s_obj $p_obj $sp_obj );
18 our $db_read_time ||= 0;
19
20 sub init {
21     my $dbmodtime = (stat("$DBDIR/packages_small.db"))[9] || 0;
22     if ($dbmodtime > $db_read_time) {
23         undef $obj;
24         untie %packages;
25         $obj = tie %packages, 'DB_File', "$DBDIR/packages_small.db",
26         O_RDONLY, 0666, $DB_BTREE
27             or die "couldn't tie DB $DBDIR/packages_small.db: $!";
28         undef $s_obj;
29         untie %sources;
30         $s_obj = tie %sources, 'DB_File', "$DBDIR/sources_small.db",
31         O_RDONLY, 0666, $DB_BTREE
32             or die "couldn't tie DB $DBDIR/sources_small.db: $!";
33         untie %src2bin;
34         tie %src2bin, 'DB_File', "$DBDIR/sources_packages.db",
35         O_RDONLY, 0666, $DB_BTREE
36             or die "couldn't open $DBDIR/sources_packages.db: $!";
37         untie %descriptions;
38         tie %descriptions, 'DB_File', "$DBDIR/descriptions.db",
39         O_RDONLY, 0666, $DB_BTREE
40             or die "couldn't tie DB $DBDIR/descriptions.db: $!";
41         untie %desctrans;
42         tie %desctrans, 'DB_File', "$DBDIR/descriptions_translated.db",
43         O_RDONLY, 0666, $DB_BTREE
44             or die "couldn't tie DB $DBDIR/descriptions_translated.db: $!";
45         untie %did2pkg;
46         tie %did2pkg, 'DB_File', "$DBDIR/descriptions_packages.db",
47         O_RDONLY, 0666, $DB_BTREE
48             or die "couldn't tie DB $DBDIR/descriptions_packages.db: $!";
49         untie %debtags;
50         tie %debtags, 'DB_File', "$TOPDIR/files/debtags/vocabulary.db",
51         O_RDONLY, 0666, $DB_BTREE
52             or die "couldn't tie DB $TOPDIR/files/debtags/vocabulary.db: $!";
53         undef $p_obj;
54         untie %postf;
55         $p_obj = tie %postf, 'DB_File', "$DBDIR/package_postfixes.db",
56         O_RDONLY, 0666, $DB_BTREE
57             or die "couldn't tie postfix db $DBDIR/package_postfixes.db: $!";
58         undef $sp_obj;
59         untie %spostf;
60         $sp_obj = tie %spostf, 'DB_File', "$DBDIR/source_postfixes.db",
61         O_RDONLY, 0666, $DB_BTREE
62             or die "couldn't tie postfix db $DBDIR/source_postfixes.db: $!";
63
64         debug( "tied databases ($dbmodtime > $db_read_time)" ) if DEBUG;
65         $db_read_time = $dbmodtime;
66     }
67 }
68
69 1;
70