def add_package(self, path, deltas, repo_uri): package = pisi.package.Package(path, 'r') md = package.get_metadata() md.package.packageSize = long(os.path.getsize(path)) md.package.packageHash = util.sha1_file(path) if ctx.config.options and ctx.config.options.absolute_urls: md.package.packageURI = os.path.realpath(path) else: # create relative path by default # TODO: in the future well do all of this with purl/pfile/&helpers # really? heheh -- future exa md.package.packageURI = util.removepathprefix(repo_uri, path) # check package semantics errs = md.errors() if md.errors(): ctx.ui.error(_('Package %s: metadata corrupt, skipping...') % md.package.name) ctx.ui.error(unicode(Error(*errs))) else: # No need to carry these with index (#3965) md.package.files = None md.package.additionalFiles = None if md.package.name in deltas: name, version, release, distro_id, arch = \ util.split_package_filename(path) for delta_path in deltas[md.package.name]: src_release, dst_release, delta_distro_id, delta_arch = \ util.split_delta_package_filename(delta_path)[1:] # Add only delta to latest build of the package if dst_release != md.package.release or \ (delta_distro_id, delta_arch) != (distro_id, arch): continue delta = metadata.Delta() delta.packageURI = util.removepathprefix(repo_uri, delta_path) delta.packageSize = long(os.path.getsize(delta_path)) delta.packageHash = util.sha1_file(delta_path) delta.releaseFrom = src_release md.package.deltaPackages.append(delta) self.packages.append(md.package)
def add_package(params): try: path, deltas, repo_uri = params ctx.ui.info("%-80.80s\r" % (_("Adding package to index: %s") % os.path.basename(path)), noln=True) package = pisi.package.Package(path, "r") md = package.get_metadata() md.package.packageSize = long(os.path.getsize(path)) md.package.packageHash = util.sha1_file(path) if ctx.config.options and ctx.config.options.absolute_urls: md.package.packageURI = os.path.realpath(path) else: md.package.packageURI = util.removepathprefix(repo_uri, path) # check package semantics errs = md.errors() if md.errors(): ctx.ui.info("") ctx.ui.error(_("Package %s: metadata corrupt, skipping...") % md.package.name) ctx.ui.error(unicode(Error(*errs))) else: # No need to carry these with index (#3965) md.package.files = None md.package.additionalFiles = None if md.package.name in deltas: name, version, release, distro_id, arch = util.split_package_filename(path) for delta_path in deltas[md.package.name]: src_release, dst_release, delta_distro_id, delta_arch = util.split_delta_package_filename( delta_path )[1:] # Add only delta to latest build of the package if dst_release != md.package.release or (delta_distro_id, delta_arch) != (distro_id, arch): continue delta = metadata.Delta() delta.packageURI = util.removepathprefix(repo_uri, delta_path) delta.packageSize = long(os.path.getsize(delta_path)) delta.packageHash = util.sha1_file(delta_path) delta.releaseFrom = src_release md.package.deltaPackages.append(delta) return md.package except KeyboardInterrupt: # Handle KeyboardInterrupt exception to prevent ugly backtrace of all # worker processes and propagate the exception to main process. # # Probably it's better to use just 'raise' here, but multiprocessing # module has some bugs about that: (python#8296, python#9205 and # python#9207 ) # # For now, worker processes do not propagate exceptions other than # Exception (like KeyboardInterrupt), so we have to manually propagate # KeyboardInterrupt exception as an Exception. raise Exception
def add_package(params): try: path, deltas, repo_uri = params ctx.ui.info( "%-80.80s\r" % (_('Adding package to index: %s') % os.path.basename(path)), noln=True) package = pisi.package.Package(path, 'r') md = package.get_metadata() md.package.packageSize = long(os.path.getsize(path)) md.package.packageHash = util.sha1_file(path) if ctx.config.options and ctx.config.options.absolute_urls: md.package.packageURI = os.path.realpath(path) else: md.package.packageURI = util.removepathprefix(repo_uri, path) # check package semantics errs = md.errors() if md.errors(): ctx.ui.info("") ctx.ui.error( _('Package %s: metadata corrupt, skipping...') % md.package.name) ctx.ui.error(unicode(Error(*errs))) else: # No need to carry these with index (#3965) md.package.files = None md.package.additionalFiles = None if md.package.name in deltas: name, version, release, distro_id, arch = \ util.split_package_filename(path) for delta_path in deltas[md.package.name]: src_release, dst_release, delta_distro_id, delta_arch = \ util.split_delta_package_filename(delta_path)[1:] # Add only delta to latest build of the package if dst_release != md.package.release or \ (delta_distro_id, delta_arch) != (distro_id, arch): continue delta = metadata.Delta() delta.packageURI = util.removepathprefix( repo_uri, delta_path) delta.packageSize = long(os.path.getsize(delta_path)) delta.packageHash = util.sha1_file(delta_path) delta.releaseFrom = src_release md.package.deltaPackages.append(delta) return md.package except KeyboardInterrupt: # Handle KeyboardInterrupt exception to prevent ugly backtrace of all # worker processes and propagate the exception to main process. # # Probably it's better to use just 'raise' here, but multiprocessing # module has some bugs about that: (python#8296, python#9205 and # python#9207 ) # # For now, worker processes do not propagate exceptions other than # Exception (like KeyboardInterrupt), so we have to manually propagate # KeyboardInterrupt exception as an Exception. raise Exception
def create_delta_packages(old_packages, new_package): if new_package in old_packages: ctx.ui.warning(_("New package '%s' exists in the list of old " "packages. Skipping it...") % new_package) while new_package in old_packages: old_packages.remove(new_package) new_pkg = pisi.package.Package(new_package) new_pkg_info = new_pkg.metadata.package new_pkg_files = new_pkg.get_files() # Unpack new package to temp new_pkg_name = os.path.splitext(os.path.basename(new_package))[0] new_pkg_path = util.join_path(ctx.config.tmp_dir(), new_pkg_name) new_pkg.extract_pisi_files(new_pkg_path) new_pkg.extract_dir("comar", new_pkg_path) install_dir = util.join_path(new_pkg_path, "install") util.clean_dir(install_dir) os.mkdir(install_dir) new_pkg.extract_install(install_dir) name, new_version, new_release, new_distro_id, new_arch = \ util.split_package_filename(new_pkg_name) cwd = os.getcwd() out_dir = ctx.get_option("output_dir") target_format = ctx.get_option("package_format") delta_packages = [] for old_package in old_packages: old_pkg = pisi.package.Package(old_package) old_pkg_info = old_pkg.metadata.package if old_pkg_info.name != new_pkg_info.name: ctx.ui.warning(_("The file '%s' belongs to a different package " "other than '%s'. Skipping it...") % (old_package, new_pkg_info.name)) continue if old_pkg_info.release == new_pkg_info.release: ctx.ui.warning(_("Package '%s' has the same release number with " "the new package. Skipping it...") % old_package) continue delta_name = "-".join((old_pkg_info.name, old_pkg_info.release, new_pkg_info.release, new_distro_id, new_arch)) + ctx.const.delta_package_suffix ctx.ui.info(_("Creating %s") % delta_name) if out_dir: delta_name = util.join_path(out_dir, delta_name) old_pkg_files = old_pkg.get_files() delta_pkg = pisi.package.Package(delta_name, "w", format=target_format) os.chdir(new_pkg_path) # add comar files to package for pcomar in new_pkg_info.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) delta_pkg.add_to_package(fname) # add xmls and files delta_pkg.add_metadata_xml(ctx.const.metadata_xml) delta_pkg.add_files_xml(ctx.const.files_xml) files_delta = find_delta(old_pkg_files, new_pkg_files) # only metadata information may change in a package, # so no install archive added to delta package if files_delta: # Sort the files in-place according to their path for an ordered # tarfile layout which dramatically improves the compression # performance of lzma. This improvement is stolen from build.py # (commit r23485). files_delta.sort(key=lambda x: x.path) os.chdir(install_dir) for f in files_delta: delta_pkg.add_to_install(f.path) os.chdir(cwd) delta_pkg.close() delta_packages.append(delta_name) # Remove temp dir util.clean_dir(new_pkg_path) # Return delta package names return delta_packages
def create_delta_packages_from_obj(old_packages, new_package_obj, specdir): new_pkg_info = new_package_obj.metadata.package new_pkg_files = new_package_obj.files new_pkg_path = new_package_obj.tmp_dir new_pkg_name = os.path.basename(new_package_obj.filepath) name, new_version, new_release, new_distro_id, new_arch = \ util.split_package_filename(new_pkg_name) cwd = os.getcwd() out_dir = ctx.get_option("output_dir") target_format = ctx.get_option("package_format") delta_packages = [] for old_package in old_packages: old_pkg = pisi.package.Package(old_package) old_pkg_info = old_pkg.metadata.package delta_name = "-".join((old_pkg_info.name, old_pkg_info.release, new_pkg_info.release, new_distro_id, new_arch)) + ctx.const.delta_package_suffix ctx.ui.info(_("Creating %s") % delta_name) if out_dir: delta_name = util.join_path(out_dir, delta_name) old_pkg_files = old_pkg.get_files() delta_pkg = pisi.package.Package(delta_name, "w", format=target_format) # add comar files to package os.chdir(specdir) for pcomar in new_pkg_info.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) delta_pkg.add_to_package(fname) # add xmls and files os.chdir(new_pkg_path) delta_pkg.add_metadata_xml(ctx.const.metadata_xml) delta_pkg.add_files_xml(ctx.const.files_xml) files_delta = find_delta(old_pkg_files, new_pkg_files) # only metadata information may change in a package, # so no install archive added to delta package if files_delta: # Sort the files in-place according to their path for an ordered # tarfile layout which dramatically improves the compression # performance of lzma. This improvement is stolen from build.py # (commit r23485). files_delta.sort(key=lambda x: x.path) for finfo in files_delta: orgname = util.join_path("install", finfo.path) if new_pkg_info.debug_package: orgname = util.join_path("debug", finfo.path) delta_pkg.add_to_install(orgname, finfo.path) os.chdir(cwd) delta_pkg.close() delta_packages.append(delta_name) # Return delta package names return delta_packages
def create_delta_packages_from_obj(old_packages, new_package_obj, specdir): new_pkg_info = new_package_obj.metadata.package new_pkg_files = new_package_obj.files new_pkg_path = new_package_obj.tmp_dir new_pkg_name = os.path.basename(new_package_obj.filepath) name, new_version, new_release, new_distro_id, new_arch = \ util.split_package_filename(new_pkg_name) cwd = os.getcwd() out_dir = ctx.get_option("output_dir") target_format = ctx.get_option("package_format") delta_packages = [] for old_package in old_packages: old_pkg = pisi.package.Package(old_package) old_pkg_info = old_pkg.metadata.package if old_pkg_info.name != new_pkg_info.name: ctx.ui.warning(_("The file '%s' belongs to a different package " "other than '%s'. Skipping it...") % (old_package, new_pkg_info.name)) continue if old_pkg_info.release == new_pkg_info.release: ctx.ui.warning(_("Package '%s' has the same release number with " "the new package. Skipping it...") % old_package) continue delta_name = "-".join((old_pkg_info.name, old_pkg_info.release, new_pkg_info.release, new_distro_id, new_arch)) + ctx.const.delta_package_suffix ctx.ui.info(_("Creating %s...") % delta_name) if out_dir: delta_name = util.join_path(out_dir, delta_name) old_pkg_files = old_pkg.get_files() files_delta = find_delta(old_pkg_files, new_pkg_files) if len(files_delta) == len(new_pkg_files.list): ctx.ui.warning(_("All files in the package '%s' are different " "from the files in the new package. Skipping " "it...") % old_package) continue delta_pkg = pisi.package.Package(delta_name, "w", format=target_format) # add comar files to package os.chdir(specdir) for pcomar in new_pkg_info.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) delta_pkg.add_to_package(fname) # add xmls and files os.chdir(new_pkg_path) delta_pkg.add_metadata_xml(ctx.const.metadata_xml) delta_pkg.add_files_xml(ctx.const.files_xml) # only metadata information may change in a package, # so no install archive added to delta package if files_delta: # Sort the files in-place according to their path for an ordered # tarfile layout which dramatically improves the compression # performance of lzma. This improvement is stolen from build.py # (commit r23485). files_delta.sort(key=lambda x: x.path) for finfo in files_delta: orgname = util.join_path("install", finfo.path) if new_pkg_info.debug_package: orgname = util.join_path("debug", finfo.path) delta_pkg.add_to_install(orgname, finfo.path) os.chdir(cwd) delta_pkg.close() delta_packages.append(delta_name) # Return delta package names return delta_packages