From 004a52d27aa139dfd3f096a21f119cf59fd9307e Mon Sep 17 00:00:00 2001 From: Frank Osterfeld <frank.osterfeld.qnx@kdab.com> Date: Fri, 14 Sep 2012 14:37:40 +0200 Subject: [PATCH] Do not leave incompletely downloaded files behind Instead, save to a temporary file first which is deleted if the download is aborted. Change-Id: I762da0741050b59ff83476196b560778fdbad3b3 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com> --- release-tools/bld_ifw_tools_impl.py | 3 +-- release-tools/bldinstallercommon.py | 19 +++++++++++++++++++ release-tools/create_installer.py | 9 +++------ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/release-tools/bld_ifw_tools_impl.py b/release-tools/bld_ifw_tools_impl.py index e1c401b..b02c121 100644 --- a/release-tools/bld_ifw_tools_impl.py +++ b/release-tools/bld_ifw_tools_impl.py @@ -165,8 +165,7 @@ def prepare_qt_sources(): if not bldinstallercommon.is_content_url_valid(QT_SRC_PACKAGE_URL): print '*** Qt src package url is invalid! Abort!' sys.exit(-1) - urllib.urlcleanup() - urllib.urlretrieve(QT_SRC_PACKAGE_URL, QT_SRC_PACKAGE_URL_SAVE_AS) + bldinstallercommon.retrieve_url(QT_SRC_PACKAGE_URL, QT_SRC_PACKAGE_URL_SAVE_AS) else: print 'Found old local package, using that: ' + QT_SRC_PACKAGE_URL_SAVE_AS print 'Done' diff --git a/release-tools/bldinstallercommon.py b/release-tools/bldinstallercommon.py index 39227db..9ca0e64 100644 --- a/release-tools/bldinstallercommon.py +++ b/release-tools/bldinstallercommon.py @@ -51,6 +51,7 @@ from subprocess import PIPE, STDOUT import sys import stat import tarfile +import urllib import urllib2 import zipfile import string @@ -120,6 +121,24 @@ def dlProgress(count, blockSize, totalSize): print '\n' +############################### +# function +############################### +def retrieve_url(url, savefile): + try: + savefile_tmp = savefile + '.tmp' + urllib.urlcleanup() + urllib.urlretrieve(url, savefile_tmp, reporthook=dlProgress) + os.rename(savefile_tmp, savefile) + except: + exc = sys.exc_info()[0] + print exc + try: + os.remove(savefile_tmp) + except: #swallow, do not shadow actual error + pass + raise exc + ############################### # function ############################### diff --git a/release-tools/create_installer.py b/release-tools/create_installer.py index 94ff62d..8a9debf 100644 --- a/release-tools/create_installer.py +++ b/release-tools/create_installer.py @@ -663,8 +663,7 @@ def handle_archive(sdk_component, archive): print ' Downloading: ' + archive.archive_uri print ' into: ' + package_save_as_temp # start download - urllib.urlcleanup() - urllib.urlretrieve(archive.archive_uri, package_save_as_temp, reporthook=bldinstallercommon.dlProgress) + bldinstallercommon.retrieve_url(archive.archive_uri, package_save_as_temp) print ' Downloading completed' else: print ' Copying: ' + archive.archive_uri @@ -882,8 +881,7 @@ def install_ifw_tools(): print '*** Package URL is invalid: [' + package_url + ']' print '*** Abort!' sys.exit(-1) - urllib.urlcleanup() - urllib.urlretrieve(package_url, package_save_as_temp, reporthook=bldinstallercommon.dlProgress) + bldinstallercommon.retrieve_url(package_url, package_save_as_temp) if not (os.path.isfile(package_save_as_temp)): print '*** Downloading failed! Aborting!' sys.exit(-1) @@ -1040,8 +1038,7 @@ def create_mac_disk_image(): print '*** Package URL is invalid: [' + nib_archive_name + ']' print '*** Abort!' sys.exit(-1) - urllib.urlcleanup() - urllib.urlretrieve(nib_archive_name, package_save_as_temp, reporthook=bldinstallercommon.dlProgress) + bldinstallercommon.retrieve_url(nib_archive_name, package_save_as_temp) # extract contents bldinstallercommon.extract_file(package_save_as_temp, package_save_as_folder) -- GitLab