diff options
author | Michael Schroeder <mls@suse.de> | 2014-03-24 13:17:27 +0100 |
---|---|---|
committer | Michael Schroeder <mls@suse.de> | 2014-03-24 13:17:27 +0100 |
commit | d6c025e414eba5edaa997dbc5ef57aecfc01d478 (patch) | |
tree | a46e0b34a3c392e7068a153a408e112cac2e4bb3 /Build | |
parent | 6948bbcdaa0f46f31ca83c40303e62d48b6f2c98 (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.pm | 37 |
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 |