def export_recipe(conanfile, origin_folder, destination_folder): if isinstance(conanfile.exports, str): conanfile.exports = (conanfile.exports, ) output = conanfile.output package_output = ScopedOutput("%s exports" % output.scope, output) if os.path.exists(os.path.join(origin_folder, DATA_YML)): package_output.info( "File '{}' found. Exporting it...".format(DATA_YML)) tmp = [DATA_YML] if conanfile.exports: tmp.extend(conanfile.exports ) # conanfile.exports could be a tuple (immutable) conanfile.exports = tmp included_exports, excluded_exports = _classify_patterns(conanfile.exports) try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except OSError: pass copier = FileCopier([origin_folder], destination_folder) for pattern in included_exports: copier(pattern, links=True, excludes=excluded_exports) copier.report(package_output)
def execute_export(conanfile, origin_folder, destination_folder, output): def classify(patterns): patterns = patterns or [] included, excluded = [], [] for p in patterns: if p.startswith("!"): excluded.append(p[1:]) else: included.append(p) return included, excluded included_exports, excluded_exports = classify(conanfile.exports) included_sources, excluded_sources = classify(conanfile.exports_sources) try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except: pass copier = FileCopier(origin_folder, destination_folder) for pattern in included_exports: copier(pattern, links=True, excludes=excluded_exports) # create directory for sources, and import them export_sources_dir = os.path.join(destination_folder, EXPORT_SOURCES_DIR) mkdir(export_sources_dir) copier = FileCopier(origin_folder, export_sources_dir) for pattern in included_sources: copier(pattern, links=True, excludes=excluded_sources) package_output = ScopedOutput("%s export" % output.scope, output) copier.report(package_output) shutil.copy2(os.path.join(origin_folder, CONANFILE), destination_folder)
def _execute_export(conanfile_path, conanfile, destination_folder, destination_source_folder, output): origin_folder = os.path.dirname(conanfile_path) def classify_patterns(patterns): patterns = patterns or [] included, excluded = [], [] for p in patterns: if p.startswith("!"): excluded.append(p[1:]) else: included.append(p) return included, excluded included_exports, excluded_exports = classify_patterns(conanfile.exports) included_sources, excluded_sources = classify_patterns(conanfile.exports_sources) try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except OSError: pass copier = FileCopier(origin_folder, destination_folder) for pattern in included_exports: copier(pattern, links=True, excludes=excluded_exports) copier = FileCopier(origin_folder, destination_source_folder) for pattern in included_sources: copier(pattern, links=True, excludes=excluded_sources) package_output = ScopedOutput("%s export" % output.scope, output) copier.report(package_output) shutil.copy2(conanfile_path, os.path.join(destination_folder, CONANFILE))
def execute_export(conanfile, origin_folder, destination_folder, output, filename=None): def classify_patterns(patterns): patterns = patterns or [] included, excluded = [], [] for p in patterns: if p.startswith("!"): excluded.append(p[1:]) else: included.append(p) return included, excluded included_exports, excluded_exports = classify_patterns(conanfile.exports) included_sources, excluded_sources = classify_patterns(conanfile.exports_sources) try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except: pass copier = FileCopier(origin_folder, destination_folder) for pattern in included_exports: copier(pattern, links=True, excludes=excluded_exports) # create directory for sources, and import them export_sources_dir = os.path.join(destination_folder, EXPORT_SOURCES_DIR) mkdir(export_sources_dir) copier = FileCopier(origin_folder, export_sources_dir) for pattern in included_sources: copier(pattern, links=True, excludes=excluded_sources) package_output = ScopedOutput("%s export" % output.scope, output) copier.report(package_output) shutil.copy2(os.path.join(origin_folder, filename or CONANFILE), os.path.join(destination_folder, CONANFILE))
def export_source(conanfile, origin_folder, destination_source_folder): if isinstance(conanfile.exports_sources, str): conanfile.exports_sources = (conanfile.exports_sources, ) included_sources, excluded_sources = _classify_patterns(conanfile.exports_sources) copier = FileCopier([origin_folder], destination_source_folder) for pattern in included_sources: copier(pattern, links=True, excludes=excluded_sources) output = conanfile.output package_output = ScopedOutput("%s exports_sources" % output.scope, output) copier.report(package_output)
def export_pkg(conanfile, src_package_folder, package_folder, output): mkdir(package_folder) output.info("Exporting to cache existing package from user folder") output.info("Package folder %s" % (package_folder)) copier = FileCopier(src_package_folder, package_folder) copier("*", symlinks=True) copier.report(output, warn=True) save(os.path.join(package_folder, CONANINFO), conanfile.info.dumps()) digest = FileTreeManifest.create(package_folder) save(os.path.join(package_folder, CONAN_MANIFEST), str(digest)) output.success("Package '%s' created" % os.path.basename(package_folder))
def _export(file_patterns, origin_folder, destination_folder, output): file_patterns = file_patterns or [] try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except: pass copier = FileCopier(origin_folder, destination_folder) for pattern in file_patterns: copier(pattern) package_output = ScopedOutput("%s export" % output.scope, output) copier.report(package_output) shutil.copy2(os.path.join(origin_folder, CONANFILE), destination_folder)
def export_pkg(conanfile, pkg_id, src_package_folder, package_folder, output, hook_manager, conanfile_path, reference): mkdir(package_folder) conanfile.package_folder = src_package_folder output.info("Exporting to cache existing package from user folder") output.info("Package folder %s" % package_folder) hook_manager.execute("pre_package", conanfile=conanfile, conanfile_path=conanfile_path, reference=reference, package_id=pkg_id) copier = FileCopier(src_package_folder, package_folder) copier("*", symlinks=True) copy_done = copier.report(output) if not copy_done: output.warn("No files copied from package folder!") save(os.path.join(package_folder, CONANINFO), conanfile.info.dumps()) digest = FileTreeManifest.create(package_folder) digest.save(package_folder) output.success("Package '%s' created" % pkg_id) conanfile.package_folder = package_folder hook_manager.execute("post_package", conanfile=conanfile, conanfile_path=conanfile_path, reference=reference, package_id=pkg_id)
def export_recipe(conanfile, origin_folder, destination_folder, output): if isinstance(conanfile.exports, str): conanfile.exports = (conanfile.exports, ) included_exports, excluded_exports = _classify_patterns(conanfile.exports) try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except OSError: pass copier = FileCopier(origin_folder, destination_folder) for pattern in included_exports: copier(pattern, links=True, excludes=excluded_exports) package_output = ScopedOutput("%s exports" % output.scope, output) copier.report(package_output)
def export_source(conanfile, origin_folder, destination_source_folder): if callable(conanfile.exports_sources): raise ConanException( "conanfile 'exports_sources' shouldn't be a method, " "use 'export_sources()' instead") if isinstance(conanfile.exports_sources, str): conanfile.exports_sources = (conanfile.exports_sources, ) included_sources, excluded_sources = _classify_patterns( conanfile.exports_sources) copier = FileCopier([origin_folder], destination_source_folder) for pattern in included_sources: copier(pattern, links=True, excludes=excluded_sources) output = conanfile.output package_output = ScopedOutput("%s exports_sources" % output.scope, output) copier.report(package_output) _run_method(conanfile, "export_sources", origin_folder, destination_source_folder, output)
def _run_method(conanfile, method, origin_folder, destination_folder, output): export_method = getattr(conanfile, method, None) if export_method: if not callable(export_method): raise ConanException("conanfile '%s' must be a method" % method) output.highlight("Calling %s()" % method) copier = FileCopier([origin_folder], destination_folder) conanfile.copy = copier default_options = conanfile.default_options try: # TODO: Poor man attribute control access. Convert to nice decorator conanfile.default_options = None with chdir(origin_folder): with conanfile_exception_formatter(str(conanfile), method): export_method() finally: conanfile.default_options = default_options export_method_output = ScopedOutput( "%s %s() method" % (output.scope, method), output) copier.report(export_method_output)
def _export(conanfile, origin_folder, destination_folder, output): exports = conanfile.exports or [] exports_sources = conanfile.exports_sources or [] try: os.unlink(os.path.join(origin_folder, CONANFILE + 'c')) except: pass copier = FileCopier(origin_folder, destination_folder) for pattern in exports: copier(pattern, links=True) # create directory for sources, and import them export_sources_dir = os.path.join(destination_folder, EXPORT_SOURCES_DIR) mkdir(export_sources_dir) copier = FileCopier(origin_folder, export_sources_dir) for pattern in exports_sources: copier(pattern, links=True) package_output = ScopedOutput("%s export" % output.scope, output) copier.report(package_output) shutil.copy2(os.path.join(origin_folder, CONANFILE), destination_folder)
def export_pkg(conanfile, src_package_folder, package_folder, output): mkdir(package_folder) output.info("Exporting to cache existing package from user folder") output.info("Package folder %s" % package_folder) copier = FileCopier(src_package_folder, package_folder) copier("*", symlinks=True) copy_done = copier.report(output) if not copy_done: output.warn("No files copied from package folder!") save(os.path.join(package_folder, CONANINFO), conanfile.info.dumps()) digest = FileTreeManifest.create(package_folder) digest.save(package_folder) output.success("Package '%s' created" % os.path.basename(package_folder))