2 # debbugs-loadsql-versions is part of debbugs, and is released
3 # under the terms of the GPL version 2, or any later version, at your
4 # option. See the file README and COPYING for more information.
5 # Copyright 2012 by Don Armstrong <don@donarmstrong.com>.
11 use Getopt::Long qw(:config no_ignore_case);
16 debbugs-loadsql-versions -- load debbugs sql versions database
20 debbugs-loadsql-versions [options]
23 --service, -s service name
24 --sysconfdir, -c postgresql service config dir
25 --debug, -d debugging level (Default 0)
26 --help, -h display this help
27 --man, -m display manual
35 Only load changed bugs
39 Postgreql service to use; defaults to debbugs
41 =item B<--sysconfdir,-c>
43 System configuration directory to use; if not set, defaults to the
44 postgresql default. [Operates by setting PGSYSCONFDIR]
52 Display brief useage information.
66 use Debbugs::Common qw(checkpid lockpid get_hashname getparsedaddrs getbugcomponent make_list);
67 use Debbugs::Config qw(:config);
68 use Debbugs::Status qw(read_bug split_status_fields);
75 my %options = (debug => 0,
89 'spool_dir|spool-dir=s',
90 'debug|d+','help|h|?','man|m');
92 pod2usage() if $options{help};
93 pod2usage({verbose=>2}) if $options{man};
95 $DEBUG = $options{debug};
98 $options{verbose} = $options{verbose} - $options{quiet};
100 pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
102 if (exists $options{sysconfdir}) {
103 if (not defined $options{sysconfdir} or not length $options{sysconfdir}) {
104 delete $ENV{PGSYSCONFDIR};
106 $ENV{PGSYSCONFDIR} = $options{sysconfdir};
110 my $verbose = $options{debug};
112 # connect to the database; figure out how to handle errors properly
114 my $s = Debbugs::DB->connect('dbi:Pg:service='.$options{service}) or
115 die "Unable to connect to database: ";
118 for my $file (@files) {
119 my $fh = IO::File->new($file,'r') or
120 die "Unable to open $file for reading: $!";
125 next unless length $_;
126 if (/(\w[-+0-9a-z.]+) \(([^\(\) \t]+)\)/) {
127 push @versions, [$1,$2];
132 for my $i (reverse 0..($#versions)) {
134 if (not defined $src_pkgs{$versions[$i][0]}) {
135 $src_pkgs{$versions[$i][0]} =
136 $s->resultset('SrcPkg')->find({pkg => $versions[$i][0]});
138 $sp = $src_pkgs{$versions[$i][0]};
139 # There's probably something wrong if the source package
140 # doesn't exist, but we'll skip it for now
141 next unless defined $sp;
142 my $sv = $s->resultset('SrcVer')->find({src_pkg_id=>$sp->id(),
143 ver => $versions[$i][1],
145 if (defined $ancestor_sv and defined $sv and not defined $sv->based_on()) {
146 $sv->update({based_on => $ancestor_sv->id()})