]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/DB/Load.pm
use get_*_id in load_debinfo; handle -0 correctly there too
[debbugs.git] / Debbugs / DB / Load.pm
index a85a4ec28eaaa97a3876c1c9258aebbe8d070a27..86662f3011c8f9678ea6fccafc8af07bd5c70ba3 100644 (file)
@@ -183,7 +183,9 @@ sub load_bug {
                                          $param{packages},
                                         );
                 $b->set_related_packages('srcpackages',
-                                         [grep {defined $_ and
+                                         [map {s/src://;
+                                                $_}
+                                           grep {defined $_ and
                                                   $_ =~ /^src:/}
                                           make_list($data->{package})],
                                          $param{packages},
@@ -196,7 +198,9 @@ sub load_bug {
                                          $param{packages},
                                         );
                 $b->set_related_packages('affects_srcpackages',
-                                         [grep {defined $_ and
+                                         [map {s/src://;
+                                                $_}
+                                           grep {defined $_ and
                                                   $_ =~ /^src:/}
                                           make_list($data->{affects})],
                                          $param{packages},
@@ -441,17 +445,53 @@ Commands to handle src and package version loading from debinfo files
 =cut
 
 sub load_debinfo {
-    my ($schema,$binname, $binver, $binarch, $srcname, $srcver) = @_;
-    my $sp = $schema->resultset('SrcPkg')->find_or_create({pkg => $srcname});
-    my $sv = $schema->resultset('SrcVer')->find_or_create({src_pkg=>$sp->id(),
-                                                           ver => $srcver});
-    my $arch = $schema->resultset('Arch')->find_or_create({arch => $binarch});
-    my $bp = $schema->resultset('BinPkg')->find_or_create({pkg => $binname});
-    $schema->resultset('BinVer')->find_or_create({bin_pkg_id => $bp->id(),
-                                                  src_ver_id => $sv->id(),
-                                                  arch_id    => $arch->id(),
-                                                  ver        => $binver,
-                                                 });
+    my ($s,$binname, $binver, $binarch, $srcname, $srcver,$ct_date,$cache) = @_;
+    $cache //= {};
+    my $sp;
+    if (not defined $cache->{sp}{$srcname}) {
+        $cache->{sp}{$srcname} =
+            $s->resultset('SrcPkg')->find_or_create({pkg => $srcname});
+    }
+    $sp = $cache->{sp}{$srcname};
+    # update the creation date if the data we have is earlier
+    if (defined $ct_date and
+        (not defined $sp->creation or
+         $ct_date < $sp->creation)) {
+        $sp->creation($ct_date);
+        $sp->last_modified(DateTime->now);
+        $sp->update;
+    }
+    my $sv;
+    if (not defined $cache->{sv}{$srcname}{$srcver}) {
+        $cache->{sv}{$srcname}{$srcver} =
+            $s->resultset('SrcVer')->
+            find_or_create({src_pkg =>$sp->id(),
+                            ver => $srcver});
+    }
+    $sv = $cache->{sv}{$srcname}{$srcver};
+    if (defined $ct_date and
+        (not defined $sv->upload_date() or $ct_date < $sv->upload_date())) {
+        $sv->upload_date($ct_date);
+        $sv->update;
+    }
+    my $arch;
+    if (not defined $cache->{arch}{$binarch}) {
+        $cache->{arch}{$binarch} =
+            $s->resultset('Arch')->
+            find_or_create({arch => $binarch},
+                          {result_class => 'DBIx::Class::ResultClass::HashRefInflator'},
+                          )->{id};
+    }
+    $arch = $cache->{arch}{$binarch};
+    my $bp;
+    if (not defined $cache->{bp}{$binname}) {
+        $cache->{bp}{$binname} =
+            $s->resultset('BinPkg')->
+            get_bin_pkg_id($binname);
+    }
+    $bp = $cache->{bp}{$binname};
+    $s->resultset('BinVer')->
+        get_bin_ver_id($bp,$binver,$arch,$sv->id());
 }