From: Don Armstrong Date: Wed, 11 Apr 2018 20:12:12 +0000 (-0700) Subject: avoid creating unknown packages when loading bugs X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=74cae6dd8a7626a027185cf8e68093d132eb61cf;p=debbugs.git avoid creating unknown packages when loading bugs - 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 --- diff --git a/Debbugs/DB/Load.pm b/Debbugs/DB/Load.pm index 4018791..03ab770 100644 --- a/Debbugs/DB/Load.pm +++ b/Debbugs/DB/Load.pm @@ -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); diff --git a/Debbugs/DB/Result/Bug.pm b/Debbugs/DB/Result/Bug.pm index 75eec8c..b2a2804 100644 --- a/Debbugs/DB/Result/Bug.pm +++ b/Debbugs/DB/Result/Bug.pm @@ -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; diff --git a/Debbugs/DB/ResultSet/BinPkg.pm b/Debbugs/DB/ResultSet/BinPkg.pm index b89cb40..e938cda 100644 --- a/Debbugs/DB/ResultSet/BinPkg.pm +++ b/Debbugs/DB/ResultSet/BinPkg.pm @@ -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 { diff --git a/Debbugs/DB/ResultSet/SrcPkg.pm b/Debbugs/DB/ResultSet/SrcPkg.pm index c9db9a4..36fab13 100644 --- a/Debbugs/DB/ResultSet/SrcPkg.pm +++ b/Debbugs/DB/ResultSet/SrcPkg.pm @@ -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 { diff --git a/bin/debbugs-loadsql b/bin/debbugs-loadsql index 6401fa8..a1b75de 100755 --- a/bin/debbugs-loadsql +++ b/bin/debbugs-loadsql @@ -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