in container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py [0:0]
def _install_from_cache_or_download(self, plugin, target):
cached_plugin_path = self._get_cached_plugin_path(plugin)
if os.path.exists(cached_plugin_path):
LOG.info("Installing %s plugin from cache.", plugin["name"])
else:
LOG.info("%s not found in cache. Downloading it.", plugin["name"])
download_target = self._get_cached_plugin_path(plugin)
self._create_plugin_cache_dir(os.path.dirname(target))
lock_path = "%s.lock" % download_target
while os.path.exists(lock_path):
LOG.info(
"Download lock found (%s). Waiting %d seconds for it to be released.",
lock_path,
MAX_LOCK_LIFETIME,
)
lock_timestamp = os.path.getmtime(lock_path)
if time.time() > lock_timestamp + MAX_LOCK_LIFETIME:
LOG.info("Stale download lock found (%s).", lock_path)
self._remove_download_lock(lock_path)
self._create_download_lock(lock_path)
try:
self._download_plugin(plugin, download_target)
finally:
self._remove_download_lock(lock_path)
os.symlink(cached_plugin_path, target)
self._cleanup_cache(os.path.dirname(target))