From 524191798a42a03dacfdf17f7a36e04d8a860bb8 Mon Sep 17 00:00:00 2001
From: Don Armstrong <don@donarmstrong.com>
Date: Sun, 26 Feb 2017 12:33:28 -0800
Subject: [PATCH] use get_maintainers while loading maintainers

---
 bin/debbugs-loadsql | 66 +++++++++++++++++++++------------------------
 1 file changed, 30 insertions(+), 36 deletions(-)

diff --git a/bin/debbugs-loadsql b/bin/debbugs-loadsql
index 957d190f..3ebb87fc 100755
--- a/bin/debbugs-loadsql
+++ b/bin/debbugs-loadsql
@@ -387,42 +387,36 @@ sub add_maintainers {
 
     my $s = db_connect($options);
     my $maintainers = getsourcemaintainers();
-    $p->target(scalar keys %{$maintainers}) if $p;
-    for my $pkg (keys %{$maintainers}) {
-        my $maint = $maintainers->{$pkg};
-        # see if a maintainer already exists; if so, we don't do
-        # anything here
-        my $maint_r = $s->resultset('Maintainer')->
-            find({name => $maint});
-        if (not defined $maint_r) {
-            # get e-mail address of maintainer
-            my $addr = getparsedaddrs($maint);
-            my $e_mail = $addr->address();
-            my $full_name = $addr->phrase();
-            $full_name =~ s/^\"|\"$//g;
-            $full_name =~ s/^\s+|\s+$//g;
-            # find correspondent
-            my $correspondent = $s->resultset('Correspondent')->
-                find_or_create({addr => $e_mail});
-            if (length $full_name) {
-                my $c_full_name = $correspondent->find_or_create_related('correspondent_full_names',
-                                                                        {full_name => $full_name}) if length $full_name;
-                $c_full_name->update({last_seen => 'NOW()'});
-            }
-            $maint_r =
-                $s->resultset('Maintainer')->
-                find_or_create({name => $maint,
-                                correspondent => $correspondent,
-                               });
-        }
-        # add the maintainer to the source package for packages with
-        # no maintainer
-        $s->txn_do(sub {
-                      $s->resultset('SrcPkg')->search({pkg => $pkg})->
-                          search_related_rs('src_vers',{ maintainer => undef})->
-                          update_all({maintainer => $maint_r->id()});
-                  });
-        $p->update() if $p;
+    $p->target(2) if $p;
+    ## get all of the maintainers, and add the missing ones
+    my $maints = $s->resultset('Maintainer')->
+	get_maintainers(values %{$maintainers});
+    $p->update();
+    my @svs = $s->resultset('SrcVer')->
+	search({maintainer => undef
+	       },
+	      {join => 'src_pkg',
+	       group_by => 'me.src_pkg, src_pkg.pkg',
+	       result_class => 'DBIx::Class::ResultClass::HashRefInflator',
+	       columns => [qw(me.src_pkg src_pkg.pkg)],
+	      }
+	      )->all();
+    $p->target(2+@svs) if $p;
+    $p->update() if $p;
+    for my $sv (@svs) {
+	if (exists $maintainers->{$sv->{src_pkg}{pkg}}) {
+	    my $pkg = $sv->{src_pkg}{pkg};
+	    my $maint = $maints->
+	       {$maintainers->{$pkg}};
+	    $s->txn_do(sub {$s->resultset('SrcVer')->
+				search({maintainer => undef,
+					'src_pkg.pkg' => $pkg
+				       },
+				      {join => 'src_pkg'}
+				      )->update({maintainer => $maint})
+				  });
+	}
+	$p->update() if $p;
     }
     $p->remove() if $p;
 }
-- 
2.39.5