On Mon, Nov 18, 2019 at 01:23:49PM +0100, Charlene Wendling wrote:
> Hi,
> 
> As i'm working on portgen(1) and remembered Pamela's manpage diff, i've
> found out that sqlports-compact is mentioned, and its presence still
> checked. I'm proposing to remove those bits.
> 
> It has been successfully tried in a chroot without sqlports installed,
> and the runtime is as expected on installed.
> 
> Comments/feedback are welcome,
 
I think we can clean this up even more since we know exactly what we're
working with now.  What do you think of this adjustment?


Index: infrastructure/lib/OpenBSD/PortGen/Utils.pm
===================================================================
RCS file: /cvs/ports/infrastructure/lib/OpenBSD/PortGen/Utils.pm,v
retrieving revision 1.3
diff -u -p -r1.3 Utils.pm
--- infrastructure/lib/OpenBSD/PortGen/Utils.pm 11 May 2019 15:09:06 -0000      
1.3
+++ infrastructure/lib/OpenBSD/PortGen/Utils.pm 19 Nov 2019 03:28:44 -0000
@@ -19,7 +19,10 @@ package OpenBSD::PortGen::Utils;
 use 5.012;
 use warnings;
 
-use DBI;
+# Optionally require DBI.
+# We'll get a better error message later if we need it.
+{ local $@; eval { local $SIG{__DIE__};
+    require DBI } };
 
 use parent qw( Exporter );
 
@@ -55,33 +58,17 @@ sub module_in_ports
 
        return unless $module and $prefix;
 
-       my $dbpath = '/usr/local/share';
-       my $dbfile;
+       my $dbfile = '/usr/local/share/sqlports';
+       die "install databases/sqlports\n" unless -e $dbfile;
 
-       if ( -e "$dbpath/sqlports-compact" ) {
-               $dbfile = 'sqlports-compact';
-       } elsif ( -e "$dbpath/sqlports" ) {
-               $dbfile = 'sqlports';
-       } else {
-               die "install databases/sqlports-compact or databases/sqlports";
-       }
-
-       my $dbh = DBI->connect( "dbi:SQLite:dbname=$dbpath/$dbfile", "", "" )
-           or die "failed to connect to database: $DBI::errstr";
-
-       my $stmt;
-       $stmt =
-           $dbfile =~ /compact/
-           ? "SELECT FULLPKGPATH FROM Paths WHERE ID IN ( SELECT FULLPKGPATH 
FROM Ports WHERE DISTNAME LIKE '$module%' )"
-           : "SELECT FULLPKGPATH FROM Ports WHERE DISTNAME LIKE '$module%'";
-
-       my $pr = $dbh->prepare($stmt);
-       $pr->execute();
-
-       my @results;
-       while ( my @pkgpaths = $pr->fetchrow_array ) {
-               push @results, $pkgpaths[0];
-       }
+       my $dbh = DBI->connect( "dbi:SQLite:dbname=$dbfile", "", "", {
+           RaiseError => 1,
+       } ) or die "failed to connect to database: $DBI::errstr";
+
+       my @results = @{ $dbh->selectcol_arrayref(
+           "SELECT FULLPKGPATH FROM Ports WHERE DISTNAME LIKE ?",
+           {}, "$module%"
+       ) };
 
        $dbh->disconnect();

Reply via email to