forked from andk/pause
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tsee-2007-namespace-dele.pl
269 lines (243 loc) · 6.64 KB
/
tsee-2007-namespace-dele.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
=pod
steffen took the herculean task on to talk to the owners of >700
namespaces whose modules he could not find.
From the responses he collected 116 confirmed deletes and from other
investigations he collected 48.
We throw them all together in this script.
=cut
use strict;
use warnings;
my @confirmed = split /\n/, <<EOL;
Acme::l33t YANICK
AI::NeuralNet JBRYAN
Algorithm::Munkre ANAGHAKK
Alien::Dojo DOMQ
Apache::CallHandler GKNOPS
Apache::Servlet IKLUFT
Archive::Parity FGLOCK
Array::Reform TBONE
Async::Process DDUMONT
Authen::OTP ZEFRAM
Bleach DCONWAY
Bundle::Net::SXIP::Homesite KGRENNAN
Business::Payroll::AU::PAYG PJF
CGI::DBTables FRIEDO
CGI::FormManager ANDREWF
CGI::MxWidget RAM
Chatbot::RiveScript KIRSLE
Class::Holon GSLONDON
Class::PublicInternal MIKO
ClearCase BRADAPP
CMS::Mediawiki RETOH
ControlX10::CM10 BBIRTH
Crypt::Camellia JCDUQUE
Data::FormValidator::Upload MARKSTOS
Data::Stash HRANICKY
Db::dmObject JGARRISON
DCE::RPC PHENSON
Devel::Coverage RJRAY
Devel::DebugAPI JHA
Device::PLC COSIMO
Email::Send::SMTP::Auth MTHURN
FileSys::Tree COG
Games::Go::GoPair REID
Geo:Gpx ANDYA
Getopt::Long::File MOINEFOU
Google::Spreadsheet LPETERS
Graphics::Turtle NEERI
Hardware::Simulator GSLONDON
HTML::BarChart TAG
HTTPD::Access LDS
HTTP::Test RAM
IO::Filter RWMJ
Lexical::Typeglob JJORE
Lingua::EN::Cardinal HIGHTOWE
Lingua::EN::Ordinal HIGHTOWE
Lingua::FeatureSet KAHN
Log::Check LPETERS
Math::Interpolate MATKIN
Math::Nocarry BDFOY
Math::Sparse::Matrix TPEDERSE
Math::Sparse::Vector TPEDERSE
Module::MakeDist RSAVAGE
Net::DNS::Zone OLAF
Net::Mac::Vendor BDFOY
Net::MsgLink RAM
Neural LUKKA
NexTrieve::Collection ELIZABETH
NexTrieve::Collection::Index ELIZABETH
NexTrieve::Daemon ELIZABETH
NexTrieve::DBI ELIZABETH
NexTrieve::Docseq ELIZABETH
NexTrieve::Document ELIZABETH
NexTrieve ELIZABETH
NexTrieve::Hitlist ELIZABETH
NexTrieve::Hitlist::Hit ELIZABETH
NexTrieve::HTML ELIZABETH
NexTrieve::Index ELIZABETH
NexTrieve::Mbox ELIZABETH
NexTrieve::Message ELIZABETH
NexTrieve::MIME ELIZABETH
NexTrieve::Overview ELIZABETH
NexTrieve::PDF ELIZABETH
NexTrieve::Query ELIZABETH
NexTrieve::Querylog ELIZABETH
NexTrieve::Replay ELIZABETH
NexTrieve::Resource ELIZABETH
NexTrieve::RFC822 ELIZABETH
NexTrieve::Search ELIZABETH
NexTrieve::Targz ELIZABETH
NexTrieve::UTF8 ELIZABETH
Nexus RDO
P4::Client SMEE
Parse::Debian::Release HARDCODE
Parse::Debian::Sources HARDCODE
Parse::Debian::SourcesList HARDCODE
POE::Session::GladeXML MARTIJN
Poetry::Vogon AMS
RPM::Headers RJRAY
RTF::Generator RRWO
Search::Kinosearch CREAMYG
Smirch JNAGRA
Snippets BACHMANN
Sparky JLHOLT
Spool::Queue RAM
Sybase::Async WORENKD
Text::Bib ERYQ
Text::Invert NNEUL
Text::Template::Queue SILI
Tie::Mem PMQS
Tie::WarnGlobal STEPHEN
Time::JulianDateTime AQUACADE
Time::Space::Adaptive DPRICE
Unicode::Normal MHOSKEN
Unix::UserAdmin JZAWODNY
VCS::RCE RJRAY
VCS::RCS RJRAY
VDBM RAM
Widget::FixedWidthFont::Input CORLISS
Win32::COM JDB
Win32::GUID ANDY
WWW::Search::Excite MTHURN
WWW::Search::HotBot MTHURN
WWW::Search::Lycos MTHURN
WWW::Search::Magellan MTHURN
X11::Fvwm RJRAY
XML::Validator::RelaxNG PCIMPRICH
EOL
my @handchecked = grep { $_ &&! /^-/ &&! /\./} split /\n/, <<EOL;
- Typoes and the like:
WWW:Blogger ERMEYERS (misspelt, but package on backpan)
Persistence::Object VIPUL (Uploaded Object::Persistence)
Tern::Size::Heuristic YUMPY (typo)
- No implementation on CPAN. Also, this is the author's only registered
module and the author never uploaded any files.
Asterisk::IVR::Dido QUINN
XML::Pastor AULUSOY
YATT HKOBA
- No implementation on CPAN:
ADT ABERGMAN
ADT::Queue::Priority ABERGMAN
Apache::AuthenGSS DOUGM
Apache::AuthzDCE DOUGM
Apache::Byterun DOUGM
Apache::DCELogin DOUGM
Apache::DynaRPC DOUGM
Apache::ProxyCache DOUGM
Apache::RoleAuthz DOUGM
Apache::WatchDog DOUGM
AsciiDB::Parse MICB
BarCode::UPC JONO
Carp::CheckArgs GARROW
Convert::Base VIPUL
Crypt::ElGamal VIPUL
Exporter::Import GARROW
FrameMaker::Control PEASE
FrameMaker::FDK PEASE
FrameMaker::MIF PEASE
FrameMaker PEASE
Getopt::Help IANPX
Image::Colorimetry JONO
IO::STREAMS PETDANCE
Mail::VersionTracker FHOXH
Math::Fourier AQUMSIEH
Math::Integral AQUMSIEH
Math::LinearProg JONO
Net::IMIP SRL
Net::ITIP SRL
POE::Component::IRC::Onjoin FHOXH
POE::Component::IRC::SearchEngine FHOXH
Proxy MICB
Proxy::Tk MICB
Psion::Db IANPX
Reefknot::Client SRL
Reefknot::Server SRL
SOOP GARROW
Sys::Sysconf PETDANCE
Term::Size::Heuristic YUMPY
Text::Stem IANPX
WWW::WordPress SENGER
Xmms::Plugin DOUGM
EOL
die sprintf "assertion failure: \@confirmed not == 116: %d", scalar @confirmed, unless @confirmed == 116;
die sprintf "assertion failure: \@handchecked not == 48: %d", scalar @handchecked, unless @handchecked == 48;
my @dele;
for my $e (@confirmed,@handchecked) {
$e =~ s/\s*\(.*//;
my(@m) = split /\s/, $e;
die "assertion failure: 'e' not consisting of m/e" if @m != 2;
push @dele, $m[0];
}
die sprintf "assertion failure: \@dele not == 116+48: %d", scalar @dele, unless @dele == 116+48;
$|=1;
if (-f "$ENV{HOME}/dproj/PAUSE/00-before-SVN/modulelist/moddump.current") {
for my $dele (@dele) {
print ".";
my @result = `grep "'$dele'" ~/dproj/PAUSE/00-before-SVN/modulelist/moddump.current`;
for my $table (qw(mods perms primeur)) {
my @subresult = grep /INSERT INTO .$table. /, @result;
my $max = 1;
if ($dele =~ /^(Apache::DCELogin|WWW::Search::.*)$/) {
$max = 2;
}
if (@subresult > $max) {
local $" = "\n";
warn @subresult < 20 ? "@subresult" : sprintf "%s and %d more", $subresult[0], @subresult-1;
die "not exactly one record for '$dele'";
}
}
}
}
print "\n";
use lib "/home/k/PAUSE/lib", "/home/k/dproj/PAUSE/SVN/lib";
use PAUSE;
use DBI;
my $db = DBI->connect(
$PAUSE::Config->{MOD_DATA_SOURCE_NAME},
$PAUSE::Config->{MOD_DATA_SOURCE_USER},
$PAUSE::Config->{MOD_DATA_SOURCE_PW},
{RaiseError => 0}
);
my $sth1 = $db->prepare("SELECT * FROM mods WHERE modid=?");
my $sth2 = $db->prepare("SELECT * FROM perms WHERE package=?");
my $sth3 = $db->prepare("SELECT * FROM primeur WHERE package=?");
for my $dele (@dele) {
$sth3->execute($dele);
$sth2->execute($dele);
$sth1->execute($dele);
die "assertion failure: $dele not in mods" unless $sth1->rows == 1;
}
my $sth4 = $db->prepare("DELETE FROM mods WHERE modid=?");
my $sth5 = $db->prepare("DELETE FROM perms WHERE package=?");
my $sth6 = $db->prepare("DELETE FROM primeur WHERE package=?");
for my $dele (@dele) {
my $cnt = $sth6->execute($dele);
print "p$cnt";
$cnt = $sth5->execute($dele);
print ".p$cnt";
$cnt = $sth4->execute($dele);
print ".m$cnt|";
die "die assertion failure: $dele/$cnt" unless $cnt==1;
print "'$dele' done\n";
sleep 2;
}