diff options
Diffstat (limited to 'createarchdeps')
-rwxr-xr-x | createarchdeps | 72 |
1 files changed, 29 insertions, 43 deletions
diff --git a/createarchdeps b/createarchdeps index a97f762..aab8346 100755 --- a/createarchdeps +++ b/createarchdeps @@ -2,14 +2,34 @@ # Archlinux support, based on the GSoC work of Nikolay Rysev <mad.f3ka@gmail.com> +################################################################ +# +# Copyright (c) 1995-2014 SUSE Linux Products GmbH +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or 3 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program (see the file COPYING); if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +################################################################ + BEGIN { unshift @INC, ($::ENV{"BUILD_DIR"} || "/usr/lib/build"); } use strict; -use Archive::Tar; -use Build::Arch; -use Digest::MD5; +use Build ':arch'; +use Build::Archrepo; +use Digest::MD5 (); use File::Path; use Getopt::Long; @@ -17,56 +37,22 @@ Getopt::Long::Configure("no_ignore_case"); my $cachedir = "/var/cache/build"; -sub getrepodb { - my ($url, $reponame, $dir) = @_; - File::Path::mkpath($dir); - system($INC[0]."/download", $dir, "$url$reponame.db"); -} - sub getreponame { my ($url) = @_; return $1 if "/$url/" =~ /.*\/([^\/]+)\/os\//; return undef; } -sub printpkginfo { - my ($d, $repourl) = @_; - my $id = $d->{'name'} . "." . $d->{'arch'} . "-" . $d->{'buildtime'} . "/0/0"; - my $pkgurl = $repourl . $d->{'filename'}; - my $selfprovides = $d->{'name'}; - $selfprovides .= "=$d->{'version'}" if defined $d->{'version'}; - push @{$d->{'provides'}}, $selfprovides unless @{$d->{'provides'} || []} && $d->{'provides'}->[-1] eq $selfprovides; - print "F:$id: $pkgurl\n"; - print "P:$id: " . join(' ', @{$d->{'provides'}}) . "\n" if $d->{'provides'}; - print "R:$id: " . join(' ', @{$d->{'requires'}}) . "\n" if $d->{'requires'}; - print "I:$id: $d->{name}-$d->{'version'} $d->{'buildtime'}\n"; -} - GetOptions("cachedir=s" => \$cachedir) or exit(1); - for my $url (@ARGV) { - die("Not an Archlinux repo") unless $url =~ /^(ht|f)tp:\/\/([^\/]*)\/?/; + die("$url: not an remote Archlinux repo") unless $url =~ /^(:?ftps?|https?):\/\/([^\/]*)\/?/; my $reponame = getreponame($url); - my $repoid = Digest::MD5::md5_hex("arch\@$url"); + die("could not determine reponame from url $url\n") unless defined $reponame; + my $repoid = Digest::MD5::md5_hex($url); my $dir = "$cachedir/$repoid"; $url .= '/' unless $url =~ /\/$/; - getrepodb($url, $reponame, $dir); - - my $repodb = Archive::Tar->iter("$dir/$reponame.db", 1); - my $e; - my $lastfn = ''; - my $d; - while ($e = $repodb->()) { - next unless $e->type() == Archive::Tar::Constant::FILE; - my $fn = $e->name(); - next unless $fn =~ s/\/(?:depends|desc|files)$//s; - if ($lastfn ne $fn) { - printpkginfo($d, $url) if $d->{'name'}; - $d = {}; - $lastfn = $fn; - } - Build::Arch::parserepodata($d, $e->get_content()); - } - printpkginfo($d, $url) if $d->{'name'}; + File::Path::mkpath($dir); + system("$INC[0]/download", $dir, "$url$reponame.db"); + Build::Archrepo::parse("$dir/$reponame.db", sub { Build::writedeps(\*STDOUT, $_[0], $url) }, 'addselfprovides' => 1); } |