def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" for package in self.spec.packages: # store additional files c = os.getcwd() os.chdir(self.pspecDir) install_dir = self.bctx.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join(install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: os.chmod(dest, int(afile.permission) | 0777) os.chdir(c) name = util.package_name(package.name, self.spec.source.version, self.spec.source.release) ctx.ui.action(_("** Building package %s") % package.name); ctx.ui.action(_("Generating %s...") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_(" done.")) ctx.ui.action(_("Generating %s...") % ctx.const.metadata_xml) self.gen_metadata_xml(package) ctx.ui.info(_(" done.")) ctx.ui.action(_("Creating PISI package %s") % name) pkg = Package(name, 'w') # add comar files to package os.chdir(self.pspecDir) for pcomar in package.providesComar: fname = os.path.join(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.bctx.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) for finfo in files.list: pkg.add_to_package("install/" + finfo.path) pkg.close() os.chdir(c) self.set_state("buildpackages") util.xterm_title_reset()
def configure_pending(): # start with pending packages # configure them in reverse topological order of dependency A = ctx.installdb.list_pending() order = generate_pending_order(A) try: import pisi.comariface as comariface for x in order: if ctx.installdb.is_installed(x): pkginfo = A[x] pkgname = util.package_name(x, pkginfo.version, pkginfo.release, False, False) pkg_path = util.join_path(ctx.config.lib_dir(), 'package', pkgname) m = MetaData() metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) # FIXME: we need a full package info here! pkginfo.name = x ctx.ui.notify(pisi.ui.configuring, package = pkginfo, files = None) pisi.comariface.post_install( pkginfo.name, m.package.providesComar, util.join_path(pkg_path, ctx.const.comar_dir), util.join_path(pkg_path, ctx.const.metadata_xml), util.join_path(pkg_path, ctx.const.files_xml), ) ctx.ui.notify(pisi.ui.configured, package = pkginfo, files = None) ctx.installdb.clear_pending(x) except ImportError: raise Error(_("comar package is not fully installed"))
def configure_pending(): # start with pending packages # configure them in reverse topological order of dependency A = ctx.installdb.list_pending() G_f = pgraph.PGraph(ctx.packagedb, pisi.itembyrepodb.installed) # construct G_f for x in A.keys(): G_f.add_package(x) B = A while len(B) > 0: Bp = set() for x in B.keys(): pkg = ctx.packagedb.get_package(x, pisi.itembyrepodb.installed) for dep in pkg.runtimeDependencies(): if dep.package in G_f.vertices(): G_f.add_dep(x, dep) B = Bp if ctx.get_option('debug'): G_f.write_graphviz(sys.stdout) order = G_f.topological_sort() order.reverse() # Bug 4211 if ctx.componentdb.has_component('system.base'): order = reorder_base_packages(order) try: import pisi.comariface as comariface for x in order: if ctx.installdb.is_installed(x): pkginfo = A[x] pkgname = util.package_name(x, pkginfo.version, pkginfo.release, False, False) pkg_path = util.join_path(ctx.config.lib_dir(), 'package', pkgname) m = MetaData() metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) # FIXME: we need a full package info here! pkginfo.name = x ctx.ui.notify(pisi.ui.configuring, package = pkginfo, files = None) pisi.comariface.post_install( pkginfo.name, m.package.providesComar, util.join_path(pkg_path, ctx.const.comar_dir), util.join_path(pkg_path, ctx.const.metadata_xml), util.join_path(pkg_path, ctx.const.files_xml), ) ctx.ui.notify(pisi.ui.configured, package = pkginfo, files = None) ctx.installdb.clear_pending(x) except ImportError: raise Error(_("comar package is not fully installed"))
def configure_pending(): # start with pending packages # configure them in reverse topological order of dependency A = ctx.installdb.list_pending() G_f = pgraph.PGraph(ctx.packagedb) # construct G_f for x in A.keys(): G_f.add_package(x) B = A while len(B) > 0: Bp = set() for x in B.keys(): pkg = ctx.packagedb.get_package(x) for dep in pkg.runtimeDependencies(): if dep.package in G_f.vertices(): G_f.add_dep(x, dep) B = Bp if ctx.get_option('debug'): G_f.write_graphviz(sys.stdout) order = G_f.topological_sort() order.reverse() try: import pisi.comariface as comariface for x in order: if ctx.installdb.is_installed(x): pkginfo = A[x] pkgname = util.package_name(x, pkginfo.version, pkginfo.release, False, False) pkg_path = util.join_path(ctx.config.lib_dir(), 'package', pkgname) m = MetaData() metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) for pcomar in m.package.providesComar: scriptPath = util.join_path(pkg_path, ctx.const.comar_dir, pcomar.script) comariface.register(pcomar, x, scriptPath) # FIXME: we need a full package info here! # Eray, please fix this # your wish is a command, darling -- eray pkginfo.name = x ctx.ui.notify(pisi.ui.configuring, package = pkginfo, files = None) comariface.run_postinstall(x) ctx.ui.notify(pisi.ui.configured, package = pkginfo, files = None) ctx.installdb.clear_pending(x) except ImportError: raise Error(_("COMAR: comard not fully installed"))
def configure_pending(): # start with pending packages # configure them in reverse topological order of dependency A = ctx.installdb.list_pending() G_f = pgraph.PGraph(ctx.packagedb, pisi.itembyrepodb.installed) # construct G_f for x in A.keys(): G_f.add_package(x) B = A while len(B) > 0: Bp = set() for x in B.keys(): pkg = ctx.packagedb.get_package(x, pisi.itembyrepodb.installed) for dep in pkg.runtimeDependencies(): if dep.package in G_f.vertices(): G_f.add_dep(x, dep) B = Bp if ctx.get_option('debug'): G_f.write_graphviz(sys.stdout) order = G_f.topological_sort() order.reverse() try: import pisi.comariface as comariface for x in order: if ctx.installdb.is_installed(x): pkginfo = A[x] pkgname = util.package_name(x, pkginfo.version, pkginfo.release, False, False) pkg_path = util.join_path(ctx.config.lib_dir(), 'package', pkgname) m = MetaData() metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) # FIXME: we need a full package info here! pkginfo.name = x ctx.ui.notify(pisi.ui.configuring, package=pkginfo, files=None) pisi.comariface.post_install( pkginfo.name, m.package.providesComar, util.join_path(pkg_path, ctx.const.comar_dir), util.join_path(pkg_path, ctx.const.metadata_xml), util.join_path(pkg_path, ctx.const.files_xml), ) ctx.ui.notify(pisi.ui.configured, package=pkginfo, files=None) ctx.installdb.clear_pending(x) except ImportError: raise Error(_("comar package is not fully installed"))
def calculate_download_sizes(order): total_size = cached_size = 0 for pkg in [ctx.packagedb.get_package(name) for name in order]: # get the cached package's path fn = util.package_name(pkg.name, pkg.version, pkg.release, pkg.build, True) path = util.join_path(ctx.config.packages_dir(), fn) # check the file and sha1sum to be sure it _is_ the cached package if os.path.exists(path) and util.sha1_file(path) == pkg.packageHash: cached_size += pkg.packageSize total_size += pkg.packageSize ctx.ui.notify(ui.cached, total=total_size, cached=cached_size) return total_size, cached_size
def configure_pending(): # start with pending packages # configure them in reverse topological order of dependency A = ctx.installdb.list_pending() G_f = pgraph.PGraph(packagedb) # construct G_f for x in A.keys(): G_f.add_package(x) B = A while len(B) > 0: Bp = set() for x in B.keys(): pkg = packagedb.get_package(x) for dep in pkg.runtimeDependencies: if dep.package in G_f.vertices(): G_f.add_dep(x, dep) B = Bp if ctx.get_option('debug'): G_f.write_graphviz(sys.stdout) order = G_f.topological_sort() order.reverse() try: import pisi.comariface as comariface for x in order: pkginfo = A[x] pkgname = util.package_name(x, pkginfo.version, pkginfo.release, pkginfo.build, False) pkg_path = util.join_path(ctx.config.lib_dir(), pkgname) m = MetaData() metadata_path = util.join_path(pkg_path, ctx.const.metadata_xml) m.read(metadata_path) for pcomar in m.package.providesComar: scriptPath = util.join_path(pkg_path, ctx.const.comar_dir, pcomar.script) comariface.register(pcomar, x, scriptPath) comariface.run_postinstall(x) ctx.installdb.clear_pending(x) except ImportError: raise Error(_("COMAR: comard not fully installed"))
def setUp(self): self.pkgName = util.package_name("testing", "5.1", "2")
def setUp(self): testcase.TestCase.setUp(self) self.pkgName = util.package_name("testing", "5.1", "2", 3)
def create_delta_package(old_package, new_package): if old_package == new_package: ctx.ui.error(_("Cannot create delta for same package!")) return oldpkg = pisi.package.Package(old_package, "r") newpkg = pisi.package.Package(new_package, "r") newmd = newpkg.get_metadata() oldmd = oldpkg.get_metadata() oldfiles = oldpkg.get_files() newfiles = newpkg.get_files() files_delta = find_delta(oldfiles, newfiles) ctx.ui.info(_("Creating delta PiSi package between %s %s") % (old_package, new_package)) # Unpack new package to temp newpkg_name = util.package_name(newmd.package.name, newmd.package.version, newmd.package.release, newmd.package.build, False) newpkg_path = util.join_path(ctx.config.tmp_dir(), newpkg_name) newpkg.extract_to(newpkg_path, True) tar = archive.ArchiveTar(util.join_path(newpkg_path, ctx.const.install_tar_lzma), "tarlzma", False, False) tar.unpack_dir(newpkg_path) # Create delta package deltaname = "%s-%s-%s%s" % (oldmd.package.name, oldmd.package.build, newmd.package.build, ctx.const.delta_package_suffix) outdir = ctx.get_option("output_dir") if outdir: deltaname = util.join_path(outdir, deltaname) deltapkg = pisi.package.Package(deltaname, "w") c = os.getcwd() os.chdir(newpkg_path) # add comar files to package for pcomar in newmd.package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) deltapkg.add_to_package(fname) # add xmls and files deltapkg.add_to_package(ctx.const.metadata_xml) deltapkg.add_to_package(ctx.const.files_xml) # only metadata information may change in a package, so no install.tar.lzma 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) ctx.build_leftover = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) tar = archive.ArchiveTar(util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma), "tarlzma") for f in files_delta: tar.add_to_archive(f.path) tar.close() os.chdir(ctx.config.tmp_dir()) deltapkg.add_to_package(ctx.const.install_tar_lzma) deltapkg.close() tmp_file = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) if os.path.exists(tmp_file): os.unlink(tmp_file) ctx.build_leftover = None os.chdir(c) ctx.ui.info(_("Done.")) # return delta package name return deltaname
def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" self.fetch_component() # bug 856 # Strip install directory before building .pisi packages. self.strip_install_dir() if ctx.get_option('create_static'): obj = self.generate_static_package_object() if obj: self.spec.packages.append(obj) if not ctx.get_option('no_debug'): obj = self.generate_debug_package_object() if obj: self.spec.packages.append(obj) package_names = [] old_package_names = [] for package in self.spec.packages: old_package_name = None # store additional files c = os.getcwd() os.chdir(self.specdir) install_dir = self.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join(install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: # mode is octal! os.chmod(dest, int(afile.permission, 8)) os.chdir(c) ctx.ui.action(_("** Building package %s") % package.name); ctx.ui.info(_("Generating %s,") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_("Generating %s,") % ctx.const.metadata_xml) build_number, old_build_number = self.gen_metadata_xml(package) name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, self.metadata.package.build) outdir = ctx.get_option('output_dir') if outdir: name = pisi.util.join_path(outdir, name) ctx.ui.info(_("Creating PISI package %s.") % name) # somebody explain to me why this is done here -- exa if old_build_number: old_package_name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, old_build_number) pkg = Package(name, 'w') package_names.append(name) old_package_names.append(old_package_name) # add comar files to package os.chdir(self.specdir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) if ctx.get_option('package_format') == "1.1": tar = archive.ArchiveTar("install.tar.lzma", "tarlzma") for finfo in files.list: orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) tar.add_to_archive(orgname, arcname.lstrip("install")) tar.close() pkg.add_to_package("install.tar.lzma") pkg.close() os.unlink("install.tar") os.unlink("install.tar.lzma") else: for finfo in files.list: orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) pkg.add_to_package(orgname, arcname) pkg.close() os.chdir(c) self.set_state("buildpackages") ctx.ui.info(_("Done.")) #show the files those are not collected from the install dir if ctx.get_option('show_abandoned_files') or ctx.get_option('debug'): abandoned_files = self.get_abandoned_files() if abandoned_files: ctx.ui.warning(_('Abandoned files under the install dir (%s):') % (install_dir)) for f in abandoned_files: ctx.ui.info(' - %s' % (f)) else: ctx.ui.warning(_('All of the files under the install dir (%s) has been collected by package(s)') % (install_dir)) if ctx.config.values.general.autoclean is True: ctx.ui.info(_("Cleaning Build Directory...")) util.clean_dir(self.pkg_dir()) else: ctx.ui.info(_("Keeping Build Directory")) return package_names, old_package_names
def create_delta_package(old_package, new_package): if old_package == new_package: ctx.ui.error(_("Cannot create delta for same package!")) return oldpkg = pisi.package.Package(old_package, "r") newpkg = pisi.package.Package(new_package, "r") newmd = newpkg.get_metadata() oldmd = oldpkg.get_metadata() oldfiles = oldpkg.get_files() newfiles = newpkg.get_files() files_delta = find_delta(oldfiles, newfiles) ctx.ui.info( _("Creating delta PiSi package between %s %s") % (old_package, new_package)) # Unpack new package to temp newpkg_name = util.package_name(newmd.package.name, newmd.package.version, newmd.package.release, newmd.package.build, False) newpkg_path = util.join_path(ctx.config.tmp_dir(), newpkg_name) newpkg.extract_to(newpkg_path, True) tar = archive.ArchiveTar( util.join_path(newpkg_path, ctx.const.install_tar_lzma), "tarlzma", False, False) tar.unpack_dir(newpkg_path) # Create delta package deltaname = "%s-%s-%s%s" % (oldmd.package.name, oldmd.package.build, newmd.package.build, ctx.const.delta_package_suffix) outdir = ctx.get_option("output_dir") if outdir: deltaname = util.join_path(outdir, deltaname) deltapkg = pisi.package.Package(deltaname, "w") c = os.getcwd() os.chdir(newpkg_path) # add comar files to package for pcomar in newmd.package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) deltapkg.add_to_package(fname) # add xmls and files deltapkg.add_to_package(ctx.const.metadata_xml) deltapkg.add_to_package(ctx.const.files_xml) # only metadata information may change in a package, so no install.tar.lzma added to delta package if files_delta: ctx.build_leftover = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) tar = archive.ArchiveTar( util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma), "tarlzma") for f in files_delta: tar.add_to_archive(f.path) tar.close() os.chdir(ctx.config.tmp_dir()) deltapkg.add_to_package(ctx.const.install_tar_lzma) deltapkg.close() tmp_file = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) if os.path.exists(tmp_file): os.unlink(tmp_file) ctx.build_leftover = None os.chdir(c) ctx.ui.info(_("Done.")) # return delta package name return deltaname
def setUp(self): unittest.TestCase.setUp(self) self.pkgName = util.package_name('test','7.1','2',3)
def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" self.fetch_component() # bug 856 # Strip install directory before building .pisi packages. self.strip_install_dir() if ctx.get_option('create_static'): obj = self.generate_static_package_object() if obj: self.spec.packages.append(obj) if ctx.config.values.build.generatedebug: obj = self.generate_debug_package_object() if obj: self.spec.packages.append(obj) new_packages = [] old_package_names = [] for package in self.spec.packages: old_package_name = None # store additional files c = os.getcwd() os.chdir(self.specdir) install_dir = self.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join( install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: # mode is octal! os.chmod(dest, int(afile.permission, 8)) os.chdir(c) ctx.ui.action(_("** Building package %s") % package.name) ctx.ui.info(_("Generating %s,") % ctx.const.files_xml) self.gen_files_xml(package) # build number if ctx.config.options.ignore_build_no or not ctx.config.values.build.buildno: build_no = old_build_no = None ctx.ui.warning( _('Build number is not available. For repo builds you must enable buildno in pisi.conf.' )) else: build_no, old_build_no = self.calc_build_no(package.name) ctx.ui.info(_("Generating %s,") % ctx.const.metadata_xml) self.gen_metadata_xml(package, build_no) # Calculate new and oldpackage names for buildfarm name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, self.metadata.package.build) if old_build_no: old_package_name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, old_build_no) old_package_names.append(old_package_name) outdir = ctx.get_option('output_dir') if outdir: name = pisi.util.join_path(outdir, name) new_packages.append(name) ctx.ui.info(_("Creating PISI package %s.") % name) pkg = Package(name, 'w') # add comar files to package os.chdir(self.specdir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) if ctx.get_option('package_format') == "1.0": for finfo in files.list: orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) pkg.add_to_package(orgname, arcname) pkg.close() else: # default package format is 1.1, so make it fallback. ctx.build_leftover = join(self.pkg_dir(), ctx.const.install_tar_lzma) tar = archive.ArchiveTar(ctx.const.install_tar_lzma, "tarlzma") for finfo in files.list: #print finfo.path orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) tar.add_to_archive(orgname, arcname.lstrip("install")) tar.close() pkg.add_to_package(ctx.const.install_tar_lzma) pkg.close() os.unlink(ctx.const.install_tar_lzma) ctx.build_leftover = None os.chdir(c) self.set_state("buildpackages") ctx.ui.info(_("Done.")) #show the files those are not collected from the install dir if ctx.get_option('show_abandoned_files') or ctx.get_option('debug'): abandoned_files = self.get_abandoned_files() if abandoned_files: ctx.ui.warning( _('Abandoned files under the install dir (%s):') % (install_dir)) for f in abandoned_files: ctx.ui.info(' - %s' % (f)) else: ctx.ui.warning( _('All of the files under the install dir (%s) has been collected by package(s)' ) % (install_dir)) if ctx.config.values.general.autoclean is True: ctx.ui.info(_("Cleaning Build Directory...")) util.clean_dir(self.pkg_dir()) else: ctx.ui.info(_("Keeping Build Directory")) # reset environment variables after build. this one is for # buildfarm actually. buildfarm re-inits pisi for each build # and left environment variables go directly into initial dict # making actionsapi.variables.exportFlags() useless... os.environ = {} os.environ = deepcopy(ctx.config.environ) return new_packages, old_package_names
def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" # Strip install directory before building .pisi packages. self.strip_install_dir() for package in self.spec.packages: # store additional files c = os.getcwd() os.chdir(self.pspecDir) install_dir = self.bctx.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: destdir = util.join_path(install_dir, os.path.dirname(afile.target)) for src in glob.glob(util.join_path(ctx.const.files_dir, afile.filename)): destfile = os.path.basename(afile.target) if not destfile: destfile = os.path.basename(src) ctx.ui.debug(_("Copying additional file: '%s' to '%s' as '%s'") % (src, destdir, destfile)) util.copy_file(src, util.join_path(destdir, destfile)) if afile.permission: # mode is octal! os.chmod(util.join_path(destdir, destfile), int(afile.permission, 8)) os.chdir(c) ctx.ui.action(_("** Building package %s") % package.name) ctx.ui.info(_("Generating %s,") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_("Generating %s,") % ctx.const.metadata_xml) self.gen_metadata_xml(package) ctx.ui.info(_("Creating PISI package %s.") % package.name) name = util.package_name( package.name, self.spec.source.version, self.spec.source.release, self.metadata.package.build ) pkg = Package(name, "w") # add comar files to package os.chdir(self.pspecDir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.bctx.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) for finfo in files.list: pkg.add_to_package("install/" + finfo.path) pkg.close() os.chdir(c) self.set_state("buildpackages") util.xterm_title_reset() ctx.ui.info(_("Done.")) if ctx.config.values.general.autoclean is True: ctx.ui.info(_("Cleaning Build Directory...")) util.clean_dir(self.bctx.pkg_dir()) else: ctx.ui.info(_("Keeping Build Directory"))
def create_delta_package(old_package, new_package): if old_package == new_package: ctx.ui.error(_("Cannot create delta for same package!")) return oldpkg = Package(old_package, "r") newpkg = Package(new_package, "r") newmd = newpkg.get_metadata() oldmd = oldpkg.get_metadata() oldfiles = oldpkg.get_files() newfiles = newpkg.get_files() files_delta = find_delta(oldfiles, newfiles) ctx.ui.info(_("Creating delta PiSi package between %s %s") % (old_package, new_package)) # Unpack new package to temp newpkg_name = util.package_name(newmd.package.name, newmd.package.version, newmd.package.release, newmd.package.build, False) newpkg_path = util.join_path(ctx.config.tmp_dir(), newpkg_name) newpkg.extract_to(newpkg_path, True) tar = archive.ArchiveTar(util.join_path(newpkg_path, ctx.const.install_tar_lzma), "tarlzma", False, False) tar.unpack_dir(newpkg_path) # Create delta package deltaname = "%s-%s-%s%s" % (oldmd.package.name, oldmd.package.build, newmd.package.build, ctx.const.delta_package_suffix) outdir = ctx.get_option("output_dir") if outdir: deltaname = util.join_path(outdir, deltaname) deltapkg = Package(deltaname, "w") c = os.getcwd() os.chdir(newpkg_path) # add comar files to package for pcomar in newmd.package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) deltapkg.add_to_package(fname) # add xmls and files deltapkg.add_to_package(ctx.const.metadata_xml) deltapkg.add_to_package(ctx.const.files_xml) # only metadata information may change in a package, so no install.tar.lzma added to delta package if files_delta: ctx.build_leftover = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) tar = archive.ArchiveTar(util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma), "tarlzma") for file in files_delta: tar.add_to_archive(file.path) tar.close() os.chdir(ctx.config.tmp_dir()) deltapkg.add_to_package(ctx.const.install_tar_lzma) deltapkg.close() tmp_file = util.join_path(ctx.config.tmp_dir(), ctx.const.install_tar_lzma) if os.path.exists(tmp_file): os.unlink(tmp_file) ctx.build_leftover = None os.chdir(c) ctx.ui.info(_("Done."))
def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" self.fetch_component() # bug 856 # Strip install directory before building .pisi packages. self.strip_install_dir() if ctx.get_option('create_static'): obj = self.generate_static_package_object() if obj: self.spec.packages.append(obj) if ctx.config.values.build.generatedebug: obj = self.generate_debug_package_object() if obj: self.spec.packages.append(obj) self.new_packages = [] self.old_packages = [] for package in self.spec.packages: old_package_name = None # store additional files c = os.getcwd() os.chdir(self.specdir) install_dir = self.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join(install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: # mode is octal! os.chmod(dest, int(afile.permission, 8)) os.chdir(c) ctx.ui.action(_("** Building package %s") % package.name); ctx.ui.info(_("Generating %s,") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_("Generating %s,") % ctx.const.metadata_xml) self.gen_metadata_xml(package) # build number if ctx.config.options.ignore_build_no or not ctx.config.values.build.buildno: build_no = old_build_no = None ctx.ui.warning(_('Build number is not available. For repo builds you must enable buildno in pisi.conf.')) else: build_no, old_build_no = self.calc_build_no(package.name) self.metadata.package.build = build_no self.metadata.write(util.join_path(self.pkg_dir(), ctx.const.metadata_xml)) # Calculate new and oldpackage names for buildfarm name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, self.metadata.package.build) outdir = ctx.get_option('output_dir') if outdir: name = pisi.util.join_path(outdir, name) self.new_packages.append(name) ctx.ui.info(_("Creating PISI package %s.") % name) pkg = Package(name, 'w') # add comar files to package os.chdir(self.specdir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) if ctx.get_option('package_format') == "1.0": for finfo in files.list: orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) pkg.add_to_package(orgname, arcname) pkg.close() else: # default package format is 1.1, so make it fallback. ctx.build_leftover = join(self.pkg_dir(), ctx.const.install_tar_lzma) tar = archive.ArchiveTar(ctx.const.install_tar_lzma, "tarlzma") for finfo in files.list: orgname = arcname = join("install", finfo.path) if package.debug_package: orgname = join("debug", finfo.path) tar.add_to_archive(orgname, arcname.lstrip("install")) tar.close() pkg.add_to_package(ctx.const.install_tar_lzma) pkg.close() os.unlink(ctx.const.install_tar_lzma) ctx.build_leftover = None os.chdir(c) self.set_state("buildpackages") ctx.ui.info(_("Done.")) #show the files those are not collected from the install dir if ctx.get_option('show_abandoned_files') or ctx.get_option('debug'): abandoned_files = self.get_abandoned_files() if abandoned_files: ctx.ui.warning(_('Abandoned files under the install dir (%s):') % (install_dir)) for f in abandoned_files: ctx.ui.info(' - %s' % (f)) else: ctx.ui.warning(_('All of the files under the install dir (%s) has been collected by package(s)') % (install_dir)) if ctx.config.values.general.autoclean is True: ctx.ui.info(_("Cleaning Build Directory...")) util.clean_dir(self.pkg_dir()) else: ctx.ui.info(_("Keeping Build Directory")) # reset environment variables after build. this one is for # buildfarm actually. buildfarm re-inits pisi for each build # and left environment variables go directly into initial dict # making actionsapi.variables.exportFlags() useless... os.environ = {} os.environ = deepcopy(ctx.config.environ) return self.new_packages, self.old_packages
def build_packages(self): """Build each package defined in PSPEC file. After this process there will be .pisi files hanging around, AS INTENDED ;)""" self.fetch_component() # bug 856 # Strip install directory before building .pisi packages. self.strip_install_dir() package_names = [] for package in self.spec.packages: # store additional files c = os.getcwd() os.chdir(self.specdir) install_dir = self.pkg_dir() + ctx.const.install_dir_suffix for afile in package.additionalFiles: src = os.path.join(ctx.const.files_dir, afile.filename) dest = os.path.join(install_dir + os.path.dirname(afile.target), os.path.basename(afile.target)) util.copy_file(src, dest) if afile.permission: # mode is octal! os.chmod(dest, int(afile.permission, 8)) os.chdir(c) ctx.ui.action(_("** Building package %s") % package.name); ctx.ui.info(_("Generating %s,") % ctx.const.files_xml) self.gen_files_xml(package) ctx.ui.info(_("Generating %s,") % ctx.const.metadata_xml) self.gen_metadata_xml(package) ctx.ui.info(_("Creating PISI package %s.") % package.name) name = util.package_name(package.name, self.spec.source.version, self.spec.source.release, self.metadata.package.build) pkg = Package(name, 'w') package_names.append(name) # add comar files to package os.chdir(self.specdir) for pcomar in package.providesComar: fname = util.join_path(ctx.const.comar_dir, pcomar.script) pkg.add_to_package(fname) # add xmls and files os.chdir(self.pkg_dir()) pkg.add_to_package(ctx.const.metadata_xml) pkg.add_to_package(ctx.const.files_xml) # Now it is time to add files to the packages using newly # created files.xml files = Files() files.read(ctx.const.files_xml) for finfo in files.list: pkg.add_to_package(join("install", finfo.path)) pkg.close() os.chdir(c) self.set_state("buildpackages") ctx.ui.info(_("Done.")) if ctx.config.values.general.autoclean is True: ctx.ui.info(_("Cleaning Build Directory...")) util.clean_dir(self.pkg_dir()) else: ctx.ui.info(_("Keeping Build Directory")) return package_names