def _upload_recipe(self, ref, conanfile, retry, retry_wait, policy, remote, remotes): prep = self._preparator.prepare_recipe(ref, conanfile, remote, remotes, policy) if policy == UPLOAD_POLICY_SKIP: return ref files_to_upload, deleted, cache_files, conanfile_path, t1, current_remote_name, layout = prep if files_to_upload or deleted: self._remote_manager.upload_recipe(ref, files_to_upload, deleted, remote, retry, retry_wait) msg = "\rUploaded conan recipe '%s' to '%s': %s" % ( str(ref), remote.name, remote.url) self._output.info(left_justify_message(msg)) else: self._output.info("Recipe is up to date, upload skipped") duration = time.time() - t1 log_recipe_upload(ref, duration, cache_files, remote.name) self._hook_manager.execute("post_upload_recipe", conanfile_path=conanfile_path, reference=ref, remote=remote) # The recipe wasn't in the registry or it has changed the revision field only if not current_remote_name: with layout.update_metadata() as metadata: metadata.recipe.remote = remote.name return ref
def upload_package_index(index_pref): index, pref = index_pref try: up_msg = "\rUploading package %d/%d: %s to '%s'" % (index + 1, total, str(pref.id), p_remote.name) self._output.info(left_justify_message(up_msg)) self._upload_package(pref, retry, retry_wait, integrity_check, policy, p_remote) upload_recorder.add_package(pref, p_remote.name, p_remote.url) except BaseException as pkg_exc: trace = traceback.format_exc() return pkg_exc, pref, trace
def _upload_ref(self, conanfile, ref, prefs, retry, retry_wait, integrity_check, policy, recipe_remote, upload_recorder, remotes): """ Uploads the recipes and binaries identified by ref """ assert (ref.revision is not None), "Cannot upload a recipe without RREV" conanfile_path = self._cache.package_layout(ref).conanfile() # FIXME: I think it makes no sense to specify a remote to "pre_upload" # FIXME: because the recipe can have one and the package a different one self._hook_manager.execute("pre_upload", conanfile_path=conanfile_path, reference=ref, remote=recipe_remote) msg = "\rUploading %s to remote '%s'" % (str(ref), recipe_remote.name) self._output.info(left_justify_message(msg)) self._upload_recipe(ref, conanfile, retry, retry_wait, policy, recipe_remote, remotes) upload_recorder.add_recipe(ref, recipe_remote.name, recipe_remote.url) # Now the binaries if prefs: total = len(prefs) p_remote = recipe_remote def upload_package_index(index_pref): index, pref = index_pref try: up_msg = "\rUploading package %d/%d: %s to '%s'" % (index + 1, total, str(pref.id), p_remote.name) self._output.info(left_justify_message(up_msg)) self._upload_package(pref, retry, retry_wait, integrity_check, policy, p_remote) upload_recorder.add_package(pref, p_remote.name, p_remote.url) except BaseException as pkg_exc: trace = traceback.format_exc() return pkg_exc, pref, trace def upload_package_callback(ret): package_exceptions = [r for r in ret if r is not None] self._exceptions_list.extend(package_exceptions) if not package_exceptions: # FIXME: I think it makes no sense to specify a remote to "post_upload" # FIXME: because the recipe can have one and the package a different one self._hook_manager.execute("post_upload", conanfile_path=conanfile_path, reference=ref, remote=recipe_remote) # This doesn't wait for the packages to end, so the function returns # and the "pool entry" for the recipe is released self._upload_thread_pool.map_async(upload_package_index, [(index, pref) for index, pref in enumerate(prefs)], callback=upload_package_callback) else: # FIXME: I think it makes no sense to specify a remote to "post_upload" # FIXME: because the recipe can have one and the package a different one self._hook_manager.execute("post_upload", conanfile_path=conanfile_path, reference=ref, remote=recipe_remote)
def upload_package_index(index_pref): try: index, pref = index_pref up_msg = "\rUploading package %d/%d: %s to '%s'" % ( index + 1, total, str(pref.id), p_remote.name) self._output.info(left_justify_message(up_msg)) self._upload_package(pref, retry, retry_wait, integrity_check, policy, p_remote) upload_recorder.add_package(pref, p_remote.name, p_remote.url) return conanfile_path, ref, recipe_remote, None except ConanException as exc: return None, None, None, exc
def _upload_recipe_end_msg(self, ref, remote): msg = "\rUploaded conan recipe '%s' to '%s'" % (str(ref), remote.name) url = remote.url.replace("https://api.bintray.com/conan", "https://bintray.com") msg += ": %s" % url self._output.info(left_justify_message(msg))
def _upload_recipe(self, ref, conanfile, retry, retry_wait, policy, remote, remotes): layout = self._cache.package_layout(ref) current_remote_name = layout.load_metadata().recipe.remote if remote.name != current_remote_name: retrieve_exports_sources(self._remote_manager, self._cache, conanfile, ref, remotes) conanfile_path = layout.conanfile() self._hook_manager.execute("pre_upload_recipe", conanfile_path=conanfile_path, reference=ref, remote=remote) t1 = time.time() cache_files = self._compress_recipe_files(layout, ref) with layout.update_metadata() as metadata: metadata.recipe.checksums = calc_files_checksum(cache_files) local_manifest = FileTreeManifest.loads( load(cache_files["conanmanifest.txt"])) remote_manifest = None if policy != UPLOAD_POLICY_FORCE: # Check SCM data for auto fields if hasattr(conanfile, "scm") and (conanfile.scm.get("url") == "auto" or conanfile.scm.get("revision") == "auto" or conanfile.scm.get("type") is None or conanfile.scm.get("url") is None or conanfile.scm.get("revision") is None): raise ConanException( "The recipe contains invalid data in the 'scm' attribute" " (some 'auto' values or missing fields 'type', 'url' or" " 'revision'). Use '--force' to ignore this error or export" " again the recipe ('conan export' or 'conan create') to" " fix these issues.") remote_manifest = self._check_recipe_date(ref, remote, local_manifest) if policy == UPLOAD_POLICY_SKIP: return ref files_to_upload, deleted = self._recipe_files_to_upload( ref, policy, cache_files, remote, remote_manifest, local_manifest) if files_to_upload or deleted: self._remote_manager.upload_recipe(ref, files_to_upload, deleted, remote, retry, retry_wait) msg = "\rUploaded conan recipe '%s' to '%s': %s" % ( str(ref), remote.name, remote.url) self._output.info(left_justify_message(msg)) else: self._output.info("Recipe is up to date, upload skipped") duration = time.time() - t1 log_recipe_upload(ref, duration, cache_files, remote.name) self._hook_manager.execute("post_upload_recipe", conanfile_path=conanfile_path, reference=ref, remote=remote) # The recipe wasn't in the registry or it has changed the revision field only if not current_remote_name: with layout.update_metadata() as metadata: metadata.recipe.remote = remote.name return ref