/[qa]/trunk/pts/perl/common.pl
ViewVC logotype

Contents of /trunk/pts/perl/common.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 475 - (show annotations) (download)
Sun Jan 5 16:47:13 2003 UTC (10 years, 4 months ago) by hertzog
File MIME type: text/plain
File size: 5128 byte(s)
- Add the "ddtp" keyword.
1 # Configuration and some common code
2
3 use vars qw($pts_dir $spool_dir $conf_template $db_filename $db_tags_filename
4 $sendmail $sources $pts_email @available_tags @default_tags
5 %db_content $db %db_tags_content $db_tags
6 %bin2src %src $open_count);
7
8 # Configuration variables
9 $pts_dir = "/org/packages.qa.debian.org";
10 $spool_dir = "$pts_dir/spool";
11 $conf_template = "$pts_dir/etc/conf_tpl.txt";
12 $db_filename = "$pts_dir/db/subscription.db";
13 $db_tags_filename = "$pts_dir/db/tags.db";
14 $sendmail = '/usr/sbin/sendmail -f owner@packages.qa.debian.org';
15 $sources = "/org/bugs.debian.org/etc/indices/sources";
16 $pts_email = 'pts@qa.debian.org';
17 @available_tags = qw(default bts bts-control cvs summary ddtp
18 upload-source upload-binary katie-other);
19 @default_tags = qw(default bts bts-control summary upload-source katie-other);
20
21 # Global variables
22 %db_content = ();
23 $db = undef;
24 %db_tags_content = ();
25 $db_tags = undef;
26 %bin2src = ();
27 %src = ();
28 $open_count = 0;
29
30 # Common code
31 sub open_db_write {
32 $DB_BTREE->{'flags'} = R_DUP;
33 if ($open_count <= 0) {
34 $db = tie %db_content, "DB_File", $db_filename, O_RDWR|O_CREAT,
35 0660, $DB_BTREE
36 or die "Can't open database $db_filename : $!\n";
37 $db_tags = tie %db_tags_content, "DB_File", $db_tags_filename,
38 O_RDWR|O_CREAT, 0660, $DB_HASH
39 or die "Can't open database $db_tags_filename : $!\n";
40 }
41 $open_count++;
42 }
43 sub open_db_read {
44 $DB_BTREE->{'flags'} = R_DUP;
45 if ($open_count <= 0) {
46 if (-f $db_filename and -f $db_tags_filename) {
47 $db = tie %db_content, "DB_File", $db_filename, O_RDONLY,
48 0660, $DB_BTREE
49 or die "Can't open database $db_filename : $!\n";
50 $db_tags = tie %db_tags_content, "DB_File", $db_tags_filename,
51 O_RDONLY, 0660, $DB_HASH
52 or die "Can't open database $db_tags_filename : $!\n";
53 } else {
54 open_db_write();
55 }
56 }
57 $open_count++;
58 }
59 sub close_db {
60 $open_count--;
61 if ($open_count <= 0) {
62 undef $db;
63 untie %db_content;
64 }
65 }
66 sub subscribe {
67 my ($address, $package) = @_;
68 open_db_write();
69 my @emails = $db->get_dup($package);
70 my $found = 0;
71 foreach (@emails) {
72 $found = 1 if ($_ eq $address);
73 }
74 $db_content{$package} = $address if (! $found);
75 close_db();
76 return ! $found;
77 }
78 sub unsubscribe {
79 my ($address, $package) = @_;
80 my $ok = 1;
81 open_db_write();
82 if ($db->find_dup($package, $address) == 0) {
83 $db->del_dup($package, $address);
84 } else {
85 $ok = 0;
86 }
87 close_db();
88 return $ok;
89 }
90 sub which {
91 my ($address) = @_;
92 my @l;
93 my %seen;
94 open_db_read();
95 foreach my $p (keys %db_content) {
96 next if (exists $seen{$p});
97 $seen{$p} = 1;
98 if ($db->find_dup($p, $address) == 0) {
99 push @l, $p;
100 }
101 }
102 close_db();
103 return @l;
104 }
105 sub list {
106 my ($package) = @_;
107 open_db_read();
108 my @l = $db->get_dup($package);
109 close_db();
110 return @l;
111 }
112 sub load_sources {
113 return if (scalar(keys %bin2src));
114 open(SOURCES, "< $sources") || warn "Can't open $sources: $!\n";
115 while(defined($_=<SOURCES>)) {
116 my ($bin, $comp, $src) = (split(/\s+/));
117 $bin2src{lc($bin)} = lc($src);
118 $src{lc($src)} = 1;
119 }
120 close(SOURCES);
121 }
122 sub map_package {
123 my ($pkg) = @_;
124 my ($package, @msg);
125 load_sources();
126 if (exists $src{$pkg}) {
127 $package = $pkg;
128 } elsif (exists $bin2src{$pkg}) {
129 $package = $bin2src{$pkg};
130 push @msg, "$pkg is not a source package. However $package is \n";
131 push @msg, "the source package for the $pkg binary package.\n";
132 push @msg, "\n";
133 } else {
134 $package = $pkg;
135 push @msg, "$pkg is neither a source package nor a binary package. \n";
136 push @msg, "It may be a 'virtual package' or a mistake...\n";
137 push @msg, "\n";
138 }
139 return ($package, @msg);
140 }
141 sub available_tags {
142 return @available_tags;
143 }
144 sub is_valid_tag {
145 my ($tag) = @_;
146 $tag = lc($tag);
147 foreach (available_tags()) {
148 return 1 if ($tag eq $_);
149 }
150 return 0;
151 }
152 sub clean_tags {
153 my %h;
154 foreach (@_) { $h{lc($_)} = 1 }
155 return grep { defined($h{$_}) && $h{$_} } available_tags();
156 }
157 sub get_default_tags {
158 my ($email) = @_;
159 $email = lc($email);
160 open_db_read();
161 my @res;
162 if (exists $db_tags_content{$email}) {
163 @res = split(/,/, $db_tags_content{$email});
164 } else {
165 @res = @default_tags;
166 }
167 close_db();
168 return @res;
169 }
170 sub set_default_tags {
171 my ($email, @tags) = @_;
172 open_db_write();
173 $db_tags_content{lc($email)} = join(",", clean_tags(@tags));
174 close_db();
175 }
176 sub get_tags {
177 my ($email, $package) = @_;
178 $email = lc($email);
179 $package = lc($package);
180 open_db_read();
181 my @res;
182 if (exists $db_tags_content{"$email#$package"}) {
183 @res = split(/,/, $db_tags_content{"$email#$package"});
184 } elsif (exists $db_tags_content{$email}) {
185 @res = split(/,/, $db_tags_content{$email});
186 } else {
187 @res = @default_tags;
188 }
189 close_db();
190 return @res;
191 }
192 sub set_tags {
193 my ($email, $package, @tags) = @_;
194 open_db_write();
195 $db_tags_content{lc("$email#$package")} = join(",", clean_tags(@tags));
196 close_db();
197 }
198
199 1;

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.5