scripts/feeds: get rid of redundant feed cache copy
[openwrt/svn-archive/archive.git] / scripts / feeds
index aa33af9f487b474db4a80de3c3b5f3feae89a547..a1795e1639a199f2999d2933a714e1fe914712e9 100755 (executable)
@@ -347,7 +347,7 @@ sub list {
        return 0;
 }
 
-sub install_generic() {
+sub do_install_package($$) {
        my $feed = shift;
        my $pkg = shift;
        my $path = $pkg->{makefile};
@@ -366,27 +366,14 @@ sub install_generic() {
        return 0;
 }
 
-my %install_method = (
-       'src-svn' => \&install_generic,
-       'src-cpy' => \&install_generic,
-       'src-link' => \&install_generic,
-       'src-git' => \&install_generic,
-       'src-gitsvn' => \&install_generic,
-       'src-bzr' => \&install_generic,
-       'src-hg' => \&install_generic,
-       'src-darcs' => \&install_generic,
-);
-
-my %feed;
-
 sub lookup_package($$) {
        my $feed = shift;
        my $package = shift;
 
        foreach my $feed ($feed, @feeds) {
                next unless $feed->[1];
-               next unless $feed{$feed->[1]};
-               $feed{$feed->[1]}->{$package} and return $feed;
+               next unless $feed_cache{$feed->[1]};
+               $feed_cache{$feed->[1]}->[0]->{$package} and return $feed;
        }
        return;
 }
@@ -415,9 +402,9 @@ sub install_package {
        };
 
        # switch to the metadata for the selected feed
-       get_feed($feed->[1]);
+       my $cur = get_feed($feed->[1]);
 
-       my $pkg = $feed{$feed->[1]}->{$name} or return 1;
+       my $pkg = $cur->{$name} or return 1;
        $pkg->{name} or do {
                $installed{$name} and return 0;
                # TODO: check if this is an alias package, maybe it's known by another name
@@ -449,12 +436,7 @@ sub install_package {
                and warn "Overriding package '$src'\n"
                or warn "Installing package '$src'\n";
 
-       $install_method{$type} or do {
-               warn "Unknown installation method: '$type'\n";
-               return 1;
-       };
-
-       &{$install_method{$type}}($feed, $pkg) == 0 or do {
+       do_install_package($feed, $pkg) == 0 or do {
                warn "failed.\n";
                return 1;
        };
@@ -504,8 +486,8 @@ sub install {
        get_installed();
 
        foreach my $f (@feeds) {
-               # index all feeds
-               $feed{$f->[1]} = get_feed($f->[1]);
+               # fetch all feeds
+               get_feed($f->[1]);
 
                # look up the preferred feed
                $opts{p} and $f->[1] eq $opts{p} and $feed = $f;