summaryrefslogtreecommitdiff
path: root/createarchdeps
diff options
context:
space:
mode:
Diffstat (limited to 'createarchdeps')
-rwxr-xr-xcreatearchdeps72
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);
}