[OpenWrt-Devel] [PATCH] Make "scripts/feeds update" to break after failing to update a feed (bug #17842)

Hannu Nyman hannu.nyman at iki.fi
Thu Oct 9 14:46:14 EDT 2014

"scripts/feeds update -a" can fail rather silently for feeds using git, as 
the script does not pause when updating a feed fails. Instead it prints the 
error message and calmly continues to the next feed. It is very easy to 
overlook update errors with the feeds updated first, as their text scrolls 
rapidly away from the screen.

This behaviour has not been a big problem with svn feeds, as svn update stops 
with a conflict message and interactively forces the user to resolve or 
postpone the conflict. In any case the svn error is noticed by the user.

Majority of the feeds use now git, so this silent failure can affect users 
doing private builds in an increasing amount.

Below is an example of update failing and script continuing:

perus at v1404:/Openwrt/barrier$ ./scripts/feeds update -a
Updating feed 'packages' from 
'https://github.com/openwrt/packages.git;for-14.07' ...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 17 (delta 10), reused 8 (delta 1)
Unpacking objects: 100% (17/17), done.
 From https://github.com/openwrt/packages
    62031da..dc26009  for-14.07  -> origin/for-14.07
Updating 62031da..dc26009
error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.
Updating feed 'luci' from 'http://git.openwrt.org/project/luci.git;luci-0.12' ...
Already up-to-date.
Create index file './feeds/luci.index'
Updating feed 'routing' from 
'https://github.com/openwrt-routing/packages.git;for-14.07' ...

The script prints "failed.", but does not break the updating process. The 
"update_feed" function returns an error code 1, but that value is not checked 
in the "update" function, which continues to the next feed.
Return 1 as error:
Call to update_feed without any error monitoring:

The included patch makes the feeds script to stop updating after failing to 
update a feed.

The script continues to the refresh_config step despite a possible failure in 
updating, so the stopping action just prevents the other feeds from updating 
and makes the error more clearly visible.

Signed-off-by: Hannu Nyman <hannu.nyman at iki.fi>

-------------- next part --------------
Index: scripts/feeds
--- scripts/feeds	(revision 42853)
+++ scripts/feeds	(working copy)
@@ -585,7 +585,8 @@
 	if ( ($#ARGV == -1) or $opts{a}) {
 		foreach my $feed (@feeds) {
 			my ($type, $name, $src) = @$feed;
-			update_feed($type, $name, $src, $perform_update);
+			next unless update_feed($type, $name, $src, $perform_update) == 1;
+			last;
 	} else {
 		while ($feed_name = shift @ARGV) {
-------------- next part --------------
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org

More information about the openwrt-devel mailing list