]> git.donarmstrong.com Git - debbugs.git/blob - bin/debbugs-loadsql-versions
include function in instalsql for bin ver/src pkg linking
[debbugs.git] / bin / debbugs-loadsql-versions
1 #! /usr/bin/perl
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>.
6
7
8 use warnings;
9 use strict;
10
11 use Getopt::Long qw(:config no_ignore_case);
12 use Pod::Usage;
13
14 =head1 NAME
15
16 debbugs-loadsql-versions -- load debbugs sql versions database
17
18 =head1 SYNOPSIS
19
20 debbugs-loadsql-versions [options]
21
22  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
28
29 =head1 OPTIONS
30
31 =over
32
33 =item B<--quick, -q>
34
35 Only load changed bugs
36
37 =item B<--service,-s>
38
39 Postgreql service to use; defaults to debbugs
40
41 =item B<--sysconfdir,-c>
42
43 System configuration directory to use; if not set, defaults to the
44 postgresql default. [Operates by setting PGSYSCONFDIR]
45
46 =item B<--debug, -d>
47
48 Debug verbosity.
49
50 =item B<--help, -h>
51
52 Display brief useage information.
53
54 =item B<--man, -m>
55
56 Display this manual.
57
58 =back
59
60
61 =cut
62
63
64 use vars qw($DEBUG);
65
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);
69 use Debbugs::Log;
70 use Debbugs::DB;
71 use DateTime;
72 use File::stat;
73
74
75 my %options = (debug           => 0,
76                help            => 0,
77                man             => 0,
78                verbose         => 0,
79                quiet           => 0,
80                quick           => 0,
81                service         => 'debbugs',
82               );
83
84
85 GetOptions(\%options,
86            'quick|q',
87            'service|s',
88            'sysconfdir|c',
89            'spool_dir|spool-dir=s',
90            'debug|d+','help|h|?','man|m');
91
92 pod2usage() if $options{help};
93 pod2usage({verbose=>2}) if $options{man};
94
95 $DEBUG = $options{debug};
96
97 my @USAGE_ERRORS;
98 $options{verbose} = $options{verbose} - $options{quiet};
99
100 pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
101
102 if (exists $options{sysconfdir}) {
103     if (not defined $options{sysconfdir} or not length $options{sysconfdir}) {
104         delete $ENV{PGSYSCONFDIR};
105     } else {
106         $ENV{PGSYSCONFDIR} = $options{sysconfdir};
107     }
108 }
109
110 my $verbose = $options{debug};
111
112 # connect to the database; figure out how to handle errors properly
113 # here.
114 my $s = Debbugs::DB->connect('dbi:Pg:service='.$options{service}) or
115     die "Unable to connect to database: ";
116
117 my @files = @ARGV;
118 for my $file (@files) {
119     my $fh = IO::File->new($file,'r') or
120         die "Unable to open $file for reading: $!";
121     my @versions;
122     my %src_pkgs;
123     while (<$fh>) {
124         chomp;
125         next unless length $_;
126         if (/(\w[-+0-9a-z.]+) \(([^\(\) \t]+)\)/) {
127             push @versions, [$1,$2];
128         }
129     }
130     close($fh);
131     my $ancestor_sv;
132     for my $i (reverse 0..($#versions)) {
133         my $sp;
134         if (not defined $src_pkgs{$versions[$i][0]}) {
135             $src_pkgs{$versions[$i][0]} =
136                 $s->resultset('SrcPkg')->find({pkg => $versions[$i][0]});
137         }
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],
144                                                });
145         if (defined $ancestor_sv and defined $sv and not defined $sv->based_on()) {
146             $sv->update({based_on => $ancestor_sv->id()})
147         }
148         $ancestor_sv = $sv;
149     }
150 }
151
152
153 __END__