Factor to help testing + add 'finally' to ALWAYS remove tmpdir

parent 02c94a10
...@@ -90,9 +90,9 @@ class Software(object): ...@@ -90,9 +90,9 @@ class Software(object):
Installs from buildout otherwise. Installs from buildout otherwise.
""" """
self.logger.info("Installing software release %s..." % self.url) self.logger.info("Installing software release %s..." % self.url)
tarname = self.software_url_hash
cache_dir = tempfile.mkdtemp() cache_dir = tempfile.mkdtemp()
tarpath = os.path.join(cache_dir, tarname) try:
tarpath = os.path.join(cache_dir, self.software_url_hash)
# Check if we can download from cache # Check if we can download from cache
if (not os.path.exists(self.software_path)) \ if (not os.path.exists(self.software_path)) \
and download_network_cached( and download_network_cached(
...@@ -111,36 +111,19 @@ class Software(object): ...@@ -111,36 +111,19 @@ class Software(object):
tar.close() tar.close()
else: else:
self._install_from_buildout() self._install_from_buildout()
# Upload to binary cache if possible # Upload to binary cache if possible
blacklisted = False blacklisted = False
for url in self.upload_to_binary_cache_url_blacklist: for url in self.upload_to_binary_cache_url_blacklist:
if self.url.startswith(url): if self.url.startswith(url):
blacklisted = True blacklisted = True
self.logger.debug("Can't download from binary cache: " self.logger.debug("Can't upload from binary cache: "
"Software Release URL is blacklisted.") "Software Release URL is blacklisted.")
if (self.software_root and self.url and self.software_url_hash \ if (self.software_root and self.url and self.software_url_hash \
and self.upload_binary_cache_url \ and self.upload_binary_cache_url \
and self.upload_binary_dir_url \ and self.upload_binary_dir_url \
and not blacklisted): and not blacklisted):
self.logger.info("Creating archive of software release...") self.uploadSoftwareRelease(tarpath)
tar = tarfile.open(tarpath, "w:gz")
try:
tar.add(self.software_path, arcname=self.software_url_hash)
finally: finally:
tar.close()
self.logger.info("Trying to upload archive of software release...")
upload_network_cached(
self.software_root,
self.url, self.software_url_hash,
self.upload_binary_cache_url,
self.upload_binary_dir_url,
tarpath, self.logger,
self.signature_private_key_file,
self.shacache_cert_file,
self.shacache_key_file,
self.shadir_cert_file,
self.shadir_key_file)
shutil.rmtree(cache_dir) shutil.rmtree(cache_dir)
def _install_from_buildout(self): def _install_from_buildout(self):
...@@ -192,6 +175,29 @@ class Software(object): ...@@ -192,6 +175,29 @@ class Software(object):
finally: finally:
shutil.rmtree(extends_cache) shutil.rmtree(extends_cache)
def uploadSoftwareRelease(self, tarpath):
"""
Try to tar and upload an installed Software Release.
"""
self.logger.info("Creating archive of software release...")
tar = tarfile.open(tarpath, "w:gz")
try:
tar.add(self.software_path, arcname=self.software_url_hash)
finally:
tar.close()
self.logger.info("Trying to upload archive of software release...")
upload_network_cached(
self.software_root,
self.url, self.software_url_hash,
self.upload_binary_cache_url,
self.upload_binary_dir_url,
tarpath, self.logger,
self.signature_private_key_file,
self.shacache_cert_file,
self.shacache_key_file,
self.shadir_cert_file,
self.shadir_key_file)
def destroy(self): def destroy(self):
"""Removes software release.""" """Removes software release."""
def retry(func, path, exc): def retry(func, path, exc):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment