summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorMichael Schroeder <mls@suse.de>2014-03-24 13:17:27 +0100
committerMichael Schroeder <mls@suse.de>2014-03-24 13:17:27 +0100
commitd6c025e414eba5edaa997dbc5ef57aecfc01d478 (patch)
treea46e0b34a3c392e7068a153a408e112cac2e4bb3 /Build
parent6948bbcdaa0f46f31ca83c40303e62d48b6f2c98 (diff)
switch zypp:// stype repos from .repo file name to real repo names
That should be more in line with the users expectations...
Diffstat (limited to 'Build')
-rw-r--r--Build/Zypp.pm37
1 files changed, 28 insertions, 9 deletions
diff --git a/Build/Zypp.pm b/Build/Zypp.pm
index 354adca..bd0ced0 100644
--- a/Build/Zypp.pm
+++ b/Build/Zypp.pm
@@ -4,30 +4,49 @@ use strict;
our $root = '';
-sub parsecfg($)
-{
- my $file = shift;
- my $repocfg = "$root/etc/zypp/repos.d/$file.repo";
+sub parsecfg {
+ my ($repocfg, $reponame) = @_;
+
local *REPO;
- open(REPO, '<', $repocfg) or return undef;
+ open(REPO, '<', "$root/etc/zypp/repos.d/$repocfg.repo") or return undef;
my $name;
my $repo = {};
while (<REPO>) {
chomp;
if (/^\[(.+)\]/) {
- $name = $1;
- } else {
- my ($key, $value) = split(/=/,$_,2);
+ $name = $1 if !defined($reponame) || $reponame eq $1;
+ } elsif (defined($name)) {
+ my ($key, $value) = split(/=/, $_, 2);
$repo->{$key} = $value if defined $key;
}
}
close(REPO);
- return undef unless $name;
+ return undef unless defined $name;
$repo->{'description'} = $repo->{'name'} if exists $repo->{'name'};
$repo->{'name'} = $name;
return $repo;
}
+sub parserepo($) {
+ my ($reponame) = @_;
+ # first try matching .repo file
+ if (-e "$root/etc/zypp/repos.d/$reponame.repo") {
+ my $repo = parsecfg($reponame, $reponame);
+ return $repo if $repo;
+ }
+ # then try all repo files
+ my @r;
+ if (opendir(D, "$root/etc/zypp/repos.d")) {
+ @r = grep {!/^\./ && /.repo$/} readdir(D);
+ closedir D;
+ }
+ for my $r (sort @r) {
+ my $repo = parsecfg($r, $reponame);
+ return $repo if $repo;
+ }
+ die("could not find repo '$reponame'\n");
+}
+
1;
# vim: sw=2