Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Jun 2000 15:28:02 -0500
From:      "Jonathan Fosburgh" <fosburgh@flash.net>
To:        "Thomas Schuerger" <schuerge@wjpserver.CS.Uni-SB.DE>
Cc:        <freebsd-current@FreeBSD.ORG>
Subject:   Re: Check for ports updates
Message-ID:  <02e001bfcff5$b920b990$ca406f8f@mdacc.tmc.edu>
References:  <200006062025.WAA12391@wjpserver.cs.uni-sb.de>

next in thread | previous in thread | raw e-mail | index | archive | help

----- Original Message -----
From: "Thomas Schuerger" <schuerge@wjpserver.CS.Uni-SB.DE>
To: "Will Andrews" <andrews@technologist.com>
Cc: <freebsd-current@FreeBSD.ORG>
Sent: Tuesday, June 06, 2000 3:25 PM
Subject: Re: Check for ports updates


> > > Is there already a tool that checks the installed ports for available
> > > updates in /usr/ports?
> > >
> > > I've written such a tool, which seems to work fine already. Anyone
> > > interested?
> >
> > pkg_version(1)
>
> Ah, haven't seen that before. The output of pkg_version is very
> canonical, but not very readable for humans. And it's slower than my
> version... ;-)
>
> Here is my version called "ports_updates":
>
>
> ---------
>
> #!/usr/bin/perl
>
>
############################################################################
####
> # $Id: ports_updates,v 1.1 2000/06/01 20:24:06 schuerge Exp $
> #
> # 20000601 schuerge first checkin
> #
> # TODO: Make version check more sophisticated. Currently the version
strings are
> #       compared lexicographically, which may sometimes not be what is
expected.
>
############################################################################
####
> #
> # ports_updates - fast check for available updates of installed ports
> #
> # (C) 2000 by Thomas Schürger   Mail: thomas@schuerger.com
> #
> # invocation:
> #              ports_updates
> #
> # description:
> #              Checks for each installed port if a newer version is
available
> #              in /usr/ports. Ports are output in a sorted manner.
> #
> #              Uses efficient merge-sort like algorithm for detecting
updated
> #              port versions. The file /usr/ports/INDEX is inspected for
> #              detecting updates, which is not updated daily in the ports
> #              collection. Therefore the results are just almost exact.
> #
>
############################################################################
####
>
> $installedports = `\\ls -1 /var/db/pkg | sort -t "-" +0 -1`;
> @installedports = split(/\n/, $installedports);
>
> $c = 0;
> foreach $i ( @installedports )
>   {
>     next if($i =~ /^\./);   # super-user ls also lists dot-files
>     $i =~ /(.*)-([^\-].*)/;
>     $installedname[$c] = $1;
>     $installedversion[$c] = $2;
>     $c++;
>   }
>
> $ports = ` cut -f "1-2" -d "|" /usr/ports/INDEX | sort -t "-" +0 -1`;
> @ports = split(/\n/, $ports);
>
> $c = 0;
> foreach $i ( @ports )
>   {
>     $i =~ /^(.*)-([^\-\|].*)\|(.*)/;
>     $name[$c] = $1;
>     $version[$c] = $2;
>     $location[$c] = $3;
>     # $location[$c] =~ s/^\/usr\/ports\///;
>     $c++;
>   }
>
> @a = stat("/usr/ports/INDEX");
> $time = localtime($a[9]);
> $age = -M "/usr/ports/INDEX";
>
> if($age >= 30)
>   {
>     printf("Ports available: %4d (last port index update:
%s)\n",($#ports+1),$time);
>   }
> else
>   {
>     printf("Ports available: %4d (last port index update %d day%s
ago)\n",($#ports+1),$age,$age == 1 ? "" : "s");
>   }
>
> printf("Ports installed: %4d\n",($#installedname+1));
>
> $c = 0;   # counter for @ports
> $d = 0;   # counter for @installedports
>
> while($c <= $#name && $d <= $#installedname)
>   {
>     $a = $name[$c] cmp $installedname[$d];
>
>     # printf("%4d %-30s %-10s  %4d %-30s %-10s
$a\n",$c,$name[$c],$version[$c],$d,$installedname[$d],$installedversion[$d])
;
>
>     if($a == 0)
>       {
>         $ver = $version[$c];
>         $instver = $installedversion[$d];
>
>         if($ver gt $instver)  # newer version available?
>           {
>             if(!$header)  # has the table header not been printed yet?
>               {
>                 print "\nThe following installed ports should be
updated:\n\n";
>                 print "Port name            /usr/ports   Installed   Port
location\n";
>                 print
"--------------------------------------------------------------------------\
n";
>                 $header = 1;
>               }
>
>             printf("%-20s %-12s %-10s
%s\n",$name[$c],$ver,$instver,$location[$c]);
>           }
>       }
>
>     $c++ if($a <= 0);
>
>     if($a > 0)
>       {
>         push(@obsolete,$installedname[$d]."-".$installedversion[$d]);
>       }
>
>     $d++ if($a >= 0);
>   }
>
> if(!$header)
>   {
>     print "\nCongratulations, all installed ports are up-to-date!\n";
>   }
>
> if($#obsolete >= 0)
>   {
>     print "\nThe following ports are installed but are no longer available
in /usr/ports\n";
>     print "(or now have a different name) and should be considered for
deletion:\n\n";
>
>     foreach $i (@obsolete)
>       {
>         print "$i\n",
>       }
>   }
>
> ------
>
>
> Ciao,
> Thomas Schürger.   http://www.menden.org
>
>
Maybe you can submit this as a port :)



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?02e001bfcff5$b920b990$ca406f8f>