]> git.donarmstrong.com Git - debbugs.git/commitdiff
avoid creating unknown packages when loading bugs
authorDon Armstrong <don@donarmstrong.com>
Wed, 11 Apr 2018 20:12:12 +0000 (13:12 -0700)
committerDon Armstrong <don@donarmstrong.com>
Wed, 11 Apr 2018 20:56:21 +0000 (13:56 -0700)
 - This behavior can potentially be overriden, but is the default for now;
   packages should be created when loading maintainers and/or packages from the
   archive

Debbugs/DB/Load.pm
Debbugs/DB/Result/Bug.pm
Debbugs/DB/ResultSet/BinPkg.pm
Debbugs/DB/ResultSet/SrcPkg.pm
bin/debbugs-loadsql

index 40187911555d16d1485474aa168296c75bd982c8..03ab770636eb8ec3a1d554ad78815f1f17794d8f 100644 (file)
@@ -177,36 +177,45 @@ sub load_bug {
     my $b = $s->resultset('Bug')->update_or_create($bug) or
         die "Unable to update or create bug $bug->{id}";
     $s->txn_do(sub {
-                $b->set_related_packages('binpackages',
-                                         [grep {defined $_ and
-                                                  length $_ and $_ !~ /^src:/}
-                                          make_list($data->{package})],
-                                         $param{packages},
-                                        );
-                $b->set_related_packages('srcpackages',
-                                         [map {s/src://;
-                                                $_}
-                                           grep {defined $_ and
-                                                  $_ =~ /^src:/}
-                                          make_list($data->{package})],
-                                         $param{packages},
-                                        );
-                $b->set_related_packages('affects_binpackages',
-                                         [grep {defined $_ and
-                                                  length $_ and $_ !~ /^src:/}
-                                          make_list($data->{affects})
-                                         ],
-                                         $param{packages},
-                                        );
-                $b->set_related_packages('affects_srcpackages',
-                                         [map {s/src://;
-                                                $_}
-                                           grep {defined $_ and
-                                                  $_ =~ /^src:/}
-                                          make_list($data->{affects})],
-                                         $param{packages},
-                                        );
-                for my $ff (qw(found fixed)) {
+                   my @unknown_packages;
+                   my @unknown_affects_packages;
+                   push @unknown_packages,
+                       $b->set_related_packages('binpackages',
+                                                [grep {defined $_ and
+                                                           length $_ and $_ !~ /^src:/}
+                                                 make_list($data->{package})],
+                                                $param{packages},
+                                               );
+                   push @unknown_packages,
+                       $b->set_related_packages('srcpackages',
+                                                [map {s/src://;
+                                                      $_}
+                                                 grep {defined $_ and
+                                                           $_ =~ /^src:/}
+                                                 make_list($data->{package})],
+                                                $param{packages},
+                                               );
+                   push @unknown_affects_packages,
+                       $b->set_related_packages('affects_binpackages',
+                                                [grep {defined $_ and
+                                                           length $_ and $_ !~ /^src:/}
+                                                 make_list($data->{affects})
+                                                ],
+                                                $param{packages},
+                                               );
+                   push @unknown_affects_packages,
+                       $b->set_related_packages('affects_srcpackages',
+                                                [map {s/src://;
+                                                      $_}
+                                                 grep {defined $_ and
+                                                           $_ =~ /^src:/}
+                                                 make_list($data->{affects})],
+                                                $param{packages},
+                                               );
+                   $b->unknown_packages(join(', ',@unknown_packages));
+                   $b->unknown_affects(join(', ',@unknown_affects_packages));
+                   $b->update();
+                   for my $ff (qw(found fixed)) {
                       my @elements = $s->resultset('BugVer')->search({bug => $data->{bug_num},
                                                                       found  => $ff eq 'found'?1:0,
                                                                      });
@@ -506,7 +515,7 @@ sub load_debinfo {
     if (not defined $cache->{bp}{$binname}) {
         $cache->{bp}{$binname} =
             $s->resultset('BinPkg')->
-            get_bin_pkg_id($binname);
+            get_or_create_bin_pkg_id($binname);
     }
     $bp = $cache->{bp}{$binname};
     $s->resultset('BinVer')->
@@ -616,7 +625,7 @@ sub load_packages {
            sub {
                for my $svm (@_) {
                    my $s_id = $schema->resultset('SrcPkg')->
-                       get_src_pkg_id($svm->[0]);
+                       get_or_create_src_pkg_id($svm->[0]);
                    my $sv_id = $schema->resultset('SrcVer')->
                        get_src_ver_id($s_id,$svm->[1],$maints->{$svm->[2]});
                    $schema->resultset('SrcAssociation')->
@@ -683,11 +692,11 @@ sub load_packages {
        sub {
            for my $bvm (@_) {
                my $s_id = $schema->resultset('SrcPkg')->
-                   get_src_pkg_id($bvm->{source});
+                   get_or_create_src_pkg_id($bvm->{source});
                my $sv_id = $schema->resultset('SrcVer')->
                    get_src_ver_id($s_id,$bvm->{src_ver},$maints->{$bvm->{maint}});
                my $b_id = $schema->resultset('BinPkg')->
-                   get_bin_pkg_id($bvm->{bin});
+                   get_or_create_bin_pkg_id($bvm->{bin});
                my $bv_id = $schema->resultset('BinVer')->
                    get_bin_ver_id($b_id,$bvm->{bin_ver},
                                   $archs->{$bvm->{arch}},$sv_id);
index 75eec8cda9c03b1cb3bf5cf3ec5970426205815d..b2a28048c4ea2223c8254fff7df70f5d42119fbd 100644 (file)
@@ -556,21 +556,47 @@ sub sqlt_deploy_hook {
     }
 }
 
+=head1 Utility Functions
+
+=cut
+
+=head2 set_related_packages
+
+ $b->set_related_packages($relationship,
+                         \@packages,
+                         $package_cache ,
+                        );
+
+Set bug-related packages.
+
+=cut
+
 sub set_related_packages {
     my ($self,$relationship,$pkgs,$pkg_cache) = @_;
 
+    my @unset_packages;
     my @pkg_ids;
     if ($relationship =~ /binpackages/) {
         for my $pkg (@{$pkgs}) {
-            push @pkg_ids,
+           my $pkg_id =
               $self->result_source->schema->resultset('BinPkg')->
               get_bin_pkg_id($pkg);
+           if (not defined $pkg_id) {
+               push @unset_packages,$pkg;
+           } else {
+              push @pkg_ids, $pkg_id;
+           }
         }
     } elsif ($relationship =~ /srcpackages/) {
         for my $pkg (@{$pkgs}) {
-            push @pkg_ids,
+           my $pkg_id =
               $self->result_source->schema->resultset('SrcPkg')->
               get_src_pkg_id($pkg);
+           if (defined $pkg_id) {
+               push @unset_packages,$pkg;
+           } else {
+               push @pkg_ids,$pkg_id;
+           }
         }
     } else {
         croak "Unsupported relationship $relationship";
@@ -587,6 +613,7 @@ sub set_related_packages {
     } else {
         croak "Unsupported relationship $relationship";
     }
+    return @unset_packages
 }
 # You can replace this text with custom code or comments, and it will be preserved on regeneration
 1;
index b89cb40fdcd4ee3490a9dead5b5a926bd62c0a4a..e938cdaf294ce1bd0fb3d009f30ed10cffa79083 100644 (file)
@@ -42,6 +42,18 @@ sub bin_pkg_and_ver_in_suite {
 
 
 sub get_bin_pkg_id {
+    my ($self,$pkg) = @_;
+    return $self->result_source->schema->storage->
+       dbh_do(sub {
+                  my ($s,$dbh,$bin_pkg) = @_;
+                  return select_one($dbh,<<'SQL',$bin_pkg);
+SELECT id FROM bin_pkg where pkg = ?;
+SQL
+              },
+              $pkg
+             );
+}
+sub get_or_create_bin_pkg_id {
     my ($self,$pkg) = @_;
     return $self->result_source->schema->storage->
        dbh_do(sub {
index c9db9a42fef7a0d95050cbd2bdf29c012e43afd3..36fab13e50574e8827088a4d5e56b62a6cb19363 100644 (file)
@@ -58,6 +58,19 @@ sub src_pkg_and_ver_in_suite {
 
 
 sub get_src_pkg_id {
+    my ($self,$source) = @_;
+    return $self->result_source->schema->storage->
+       dbh_do(sub {
+                  my ($s,$dbh,$src_pkg) = @_;
+                  return select_one($dbh,<<'SQL',$src_pkg);
+SELECT id FROM src_pkg where pkg = ?;
+SQL
+              },
+              $source
+             );
+}
+
+sub get_or_create_src_pkg_id {
     my ($self,$source) = @_;
     return $self->result_source->schema->storage->
        dbh_do(sub {
index 6401fa8caa94f13e67e7cec8f865e7ba0dca4d12..a1b75de2a0202c47cf19801462e1703f2e090c0e 100755 (executable)
@@ -361,7 +361,7 @@ sub add_versions {
             if (not defined $src_pkgs{$versions[$i][0]}) {
                 $src_pkgs{$versions[$i][0]} =
                     $s->resultset('SrcPkg')->
-                   get_src_pkg_id($versions[$i][0]);
+                   get_or_create_src_pkg_id($versions[$i][0]);
             }
             $sp = $src_pkgs{$versions[$i][0]};
             # There's probably something wrong if the source package