X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=scripts%2Ffeeds;h=304ef6cbafd141ff98d6a8afe5de5b371a4cb2a7;hp=22d4f8e8f4f5e8001c8cebdb8046f8359e9d25c0;hb=HEAD;hpb=2b1d92f134e9b6c5744a3cc2d0e22273a7a5fe03 diff --git a/scripts/feeds b/scripts/feeds index 22d4f8e8f4..b5b943c70b 100755 --- a/scripts/feeds +++ b/scripts/feeds @@ -14,7 +14,7 @@ chdir $ENV{TOPDIR}; $ENV{GIT_CONFIG_PARAMETERS}="'core.autocrlf=false'"; $ENV{GREP_OPTIONS}=""; -my $mk=`which gmake 2>/dev/null`; # select the right 'make' program +my $mk=`command -v gmake 2>/dev/null`; # select the right 'make' program chomp($mk); # trim trailing newline $mk or $mk = "make"; # default to 'make' @@ -162,21 +162,21 @@ my %update_method = ( 'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)", 'post_update' => "git submodule update --init --recursive", 'controldir' => ".git", - 'revision' => "git rev-parse --short HEAD | tr -d '\n'"}, + 'revision' => "git rev-parse HEAD | tr -d '\n'"}, 'src-git-full' => { 'init' => "git clone '%s' '%s'", 'init_branch' => "git clone --branch '%s' '%s' '%s'", 'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -", - 'update' => "git pull --ff", - 'update_force' => "git pull --ff || (git reset --hard HEAD; git pull --ff; exit 1)", + 'update' => "git pull --ff-only", + 'update_force' => "git pull --ff-only || (git reset --hard HEAD; git pull --ff-only; exit 1)", 'post_update' => "git submodule update --init --recursive", 'controldir' => ".git", - 'revision' => "git rev-parse --short HEAD | tr -d '\n'"}, + 'revision' => "git rev-parse HEAD | tr -d '\n'"}, 'src-gitsvn' => { 'init' => "git svn clone -r HEAD '%s' '%s'", 'update' => "git svn rebase", 'controldir' => ".git", - 'revision' => "git rev-parse --short HEAD | tr -d '\n'"}, + 'revision' => "git rev-parse HEAD | tr -d '\n'"}, 'src-bzr' => { 'init' => "bzr checkout --lightweight '%s' '%s'", 'update' => "bzr update", @@ -434,14 +434,16 @@ sub do_install_target($) { $path =~ s/\/Makefile$//; my $name = $path; $name =~ s/.*\///; - my $dest = "./target/linux/$name"; + my $dest = "./target/linux/feeds/$name"; + + -d "./target/linux/feeds" or mkdir "./target/linux/feeds"; -e $dest and do { warn "Path $dest already exists"; return 1; }; - system("ln -sf ../../$path ./target/linux/"); + system("ln -sf ../../../$path ./target/linux/feeds/"); } else { warn "Target is not valid\n"; return 1; @@ -498,16 +500,34 @@ sub is_core_src($) { sub install_target { my $feed = shift; my $name = shift; + my $force = shift; + + $feed = lookup_target($feed, $name); + my $feed_name = $feed->[1]; - $installed_targets{$name} and return 0; + -e "target/linux/feeds/$name" and return 0; + + # enable force flag if feed src line was declared with --force + if (exists($feed->[3]{force})) { + $force = 1; + } - $feed = $feed_cache{$feed->[1]}->[2]; + $feed = $feed_cache{$feed_name}->[2]; $feed or return 0; my $target = $feed->{$name}; $target or return 0; - warn "Installing target '$name'\n"; + if (-e "target/linux/$name") { + if ($force) { + warn "Overriding target '$name' with version from '$feed_name'\n"; + } else { + warn "WARNING: Not overriding core target '$name'; use -f to force\n"; + return 0; + } + } else { + warn "Installing target '$name'\n"; + } return do_install_target($target); } @@ -517,26 +537,31 @@ sub install_src { my $force = shift; my $ret = 0; - $feed = lookup_src($feed, $name); - unless ($feed) { + my $select_feed = lookup_src($feed, $name); + unless ($select_feed) { $installed{$name} and return 0; $feed_src->{$name} or warn "WARNING: No feed for source package '$name' found\n"; return 0; } # switch to the metadata for the selected feed - get_feed($feed->[1]); + get_feed($select_feed->[1]); my $src = $feed_src->{$name} or return 1; # enable force flag if feed src line was declared with --force - if (exists($feed->[3]{force})) { + if (exists($select_feed->[3]{force})) { $force = 1; } # If it's a core package and we don't want to override, just return my $override = 0; if (is_core_src($name)) { - return 0 unless $force; + if (!$force) { + if ($name ne "toolchain" && $name ne "linux") { + warn "WARNING: Not overriding core package '$name'; use -f to force\n"; + } + return 0; + } $override = 1; } @@ -554,12 +579,12 @@ sub install_src { } if ($override) { - warn "Overriding core package '$name' with version from $feed->[1]\n"; + warn "Overriding core package '$name' with version from $select_feed->[1]\n"; } else { - warn "Installing package '$name' from $feed->[1]\n"; + warn "Installing package '$name' from $select_feed->[1]\n"; } - do_install_src($feed, $src) == 0 or do { + do_install_src($select_feed, $src) == 0 or do { warn "failed.\n"; return 1; }; @@ -594,15 +619,15 @@ sub install_package { my $name = shift; my $force = shift; - $feed = lookup_package($feed, $name); - unless ($feed) { + my $select_feed = lookup_package($feed, $name); + unless ($select_feed) { $installed_pkg{$name} and return 0; $feed_vpackage->{$name} or warn "WARNING: No feed for package '$name' found\n"; return 0; } # switch to the metadata for the selected feed - get_feed($feed->[1]); + get_feed($select_feed->[1]); my $pkg = $feed_vpackage->{$name} or return 1; return install_src($feed, $pkg->[0]{src}{name}, $force); } @@ -612,14 +637,12 @@ sub install_target_or_package { my $name = shift; my $force = shift; - my $this_feed_target = lookup_target($feed, $name); - $this_feed_target and do { - return install_target($this_feed_target, $name); + lookup_target($feed, $name) and do { + return install_target($feed, $name, $force); }; - my $this_feed_src = lookup_src($feed, $name); - $this_feed_src and do { - return install_src($this_feed_src, $name, $force); + lookup_src($feed, $name) and do { + return install_src($feed, $name, $force); }; return install_package($feed, $name, $force); @@ -731,7 +754,7 @@ sub uninstall { } get_installed(); while ($name = shift @ARGV) { - my $target = "target/linux/$name"; + my $target = "target/linux/feeds/$name"; -l "$target" and do { uninstall_target($target); $uninstall = 1; @@ -753,12 +776,11 @@ sub uninstall { return 0; } -sub update_feed($$$$$) +sub update_feed($$$$) { my $type=shift; my $name=shift; my $src=shift; - my $perform_update=shift; my $force_update=shift; my $force_relocate=update_location( $name, "@$src" ); my $rv=0; @@ -770,28 +792,22 @@ sub update_feed($$$$$) warn "Unknown type '$type' in feed $name\n"; return 1; }; - $perform_update and do { - my $failed = 1; - foreach my $feedsrc (@$src) { - warn "Updating feed '$name' from '$feedsrc' ...\n"; - if (update_feed_via($type, $name, $feedsrc, $force_relocate, $force_update) != 0) { - if ($force_update) { - $rv=1; - $failed=0; - warn "failed, ignore.\n"; - next; - } - last; + + my $failed = 1; + foreach my $feedsrc (@$src) { + warn "Updating feed '$name' from '$feedsrc' ...\n"; + if (update_feed_via($type, $name, $feedsrc, $force_relocate, $force_update) != 0) { + if ($force_update) { + $rv=1; + $failed=0; + warn "failed, ignore.\n"; + next; } - $failed = 0; + last; } - $failed and do { - warn "failed.\n"; - return 1; - }; - }; - warn "Create index file './feeds/$name.index' \n"; - update_index($name) == 0 or do { + $failed = 0; + } + $failed and do { warn "failed.\n"; return 1; }; @@ -800,45 +816,39 @@ sub update_feed($$$$$) sub update { my %opts; - my $feed_name; - my $perform_update=1; + my %argv_feeds; my $failed=0; $ENV{SCAN_COOKIE} = $$; $ENV{OPENWRT_VERBOSE} = 's'; getopts('ahif', \%opts); + %argv_feeds = map { $_ => 1 } @ARGV; if ($opts{h}) { usage(); return 0; } - if ($opts{i}) { - # don't update from (remote) repository - # only re-create index information - $perform_update=0; - } - -d "feeds" or do { mkdir "feeds" or die "Unable to create the feeds directory"; }; - if ( ($#ARGV == -1) or $opts{a}) { - foreach my $feed (@feeds) { - my ($type, $name, $src) = @$feed; - update_feed($type, $name, $src, $perform_update, $opts{f}) == 0 or $failed=1; - } - } else { - while ($feed_name = shift @ARGV) { - foreach my $feed (@feeds) { - my ($type, $name, $src) = @$feed; - if($feed_name ne $name) { - next; - } - update_feed($type, $name, $src, $perform_update, $opts{f}) == 0 or $failed=1; - } + my @index_feeds; + foreach my $feed (@feeds) { + my ($type, $name, $src) = @$feed; + next unless $#ARGV == -1 or $opts{a} or $argv_feeds{$name}; + if (not $opts{i}) { + update_feed($type, $name, $src, $opts{f}) == 0 or $failed=1; } + push @index_feeds, $name; + } + foreach my $name (@index_feeds) { + warn "Create index file './feeds/$name.index' \n"; + update_index($name) == 0 or do { + warn "failed.\n"; + $failed=1; + }; } refresh_config(); @@ -855,7 +865,7 @@ sub feed_config() { printf "\t\tdepends on PER_FEED_REPO\n"; printf "\t\tdefault y\n" if $installed; printf "\t\thelp\n"; - printf "\t\t Enable the \\\"%s\\\" feed in opkg distfeeds.conf.\n", $feed->[1]; + printf "\t\t Enable the \\\"%s\\\" feed in opkg distfeeds.conf and apk repositories.\n", $feed->[1]; printf "\t\t Say M to add the feed commented out.\n"; printf "\n"; } @@ -874,7 +884,7 @@ Commands: -s : List of feed names and their URL. -r : List packages of specified feed. -d : Use specified delimiter to distinguish rows (default: spaces) - -f : List feeds in feeds.conf compatible format (when using -s). + -f : List feeds in opkg feeds.conf compatible format (when using -s). install [options] : Install a package Options: @@ -911,7 +921,7 @@ my %commands = ( 'uninstall' => \&uninstall, 'feed_config' => \&feed_config, 'clean' => sub { - system("rm -rf ./feeds ./package/feeds"); + system("rm -rf ./feeds ./package/feeds ./target/linux/feeds"); } );