pkg-download: handle interrupted wget downloads
authorArnout Vandecappelle <arnout@mind.be>
Sat, 30 Jun 2012 11:43:03 +0000 (11:43 +0000)
committerPeter Korsgaard <jacmet@sunsite.dk>
Sat, 30 Jun 2012 22:26:37 +0000 (00:26 +0200)
When a wget download is interrupted, the downloaded file is still created.
It will therefore not be re-downloaded in the next build, and the
extraction will fail.

To avoid this, download to a temporary file first and rename when the
download is successful.

The existing mechanism doesn't work for interrupted downloads because the
whole sub-shell is interrupted, so the rm-part never gets executed.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
package/pkg-download.mk

index 7d1e5437584ee59de17fd83f272e15fd835bee37..79837060b338cf42248550f5fffc414fc7b05e5d 100644 (file)
@@ -158,11 +158,14 @@ endef
 # Download a file using wget. Only download the file if it doesn't
 # already exist in the download directory. If the download fails,
 # remove the file (because wget -O creates a 0-byte file even if the
-# download fails).
+# download fails).  To handle an interrupted download as well, download
+# to a temporary file first.  The temporary file will be overwritten
+# the next time the download is tried.
 define DOWNLOAD_WGET
        test -e $(DL_DIR)/$(2) || \
-       $(WGET) -O $(DL_DIR)/$(2) '$(call qstrip,$(1))' || \
-       (rm -f $(DL_DIR)/$(2) ; exit 1)
+       ($(WGET) -O $(DL_DIR)/$(2).tmp '$(call qstrip,$(1))' && \
+        mv $(DL_DIR)/$(2).tmp $(DL_DIR)/$(2)) || \
+       (rm -f $(DL_DIR)/$(2).tmp ; exit 1)
 endef
 
 define SOURCE_CHECK_WGET