def generate_attr_dict(pkg, portage_compatible=True): d = {} for k in pkg.tracked_attributes: if k == "contents": continue v = getattr(pkg, k) if k == 'environment': d['environment.bz2'] = compress_data( 'bzip2', v.bytes_fileobj().read()) continue elif not isinstance(v, str): try: s = ' '.join(v) except TypeError: s = str(v) else: s = v d[_metadata_rewrites.get(k, k.upper())] = s d[f"{pkg.package}-{pkg.fullver}.ebuild"] = pkg.ebuild.text_fileobj().read() # this shouldn't be necessary post portage 2.2. # till then, their code requires redundant data, # so we've got this. if portage_compatible: d["CATEGORY"] = pkg.category d["PF"] = pkg.PF return d
def generate_attr_dict(pkg, portage_compatible=True): d = {} for k in pkg.tracked_attributes: if k == "contents": continue v = getattr(pkg, k) if k == 'environment': d['environment.bz2'] = compress_data('bzip2', v.bytes_fileobj().read()) continue if k == 'provides': versionless_provides = lambda b: b.key s = stringify_boolean(v, func=versionless_provides) elif k == 'eapi_obj': s = v.magic elif not isinstance(v, basestring): try: s = ' '.join(v) except TypeError: s = str(v) else: s = v d[_metadata_rewrites.get(k, k.upper())] = s d["%s-%s.ebuild" % (pkg.package, pkg.fullver)] = \ pkg.ebuild.text_fileobj().read() # this shouldn't be necessary post portage 2.2. # till then, their code requires redundant data, # so we've got this. if portage_compatible: d["CATEGORY"] = pkg.category d["PF"] = pkg.PF return d
def generate_attr_dict(pkg, portage_compatible=True): d = {} for k in pkg.tracked_attributes: if k == "contents": continue v = getattr(pkg, k) if k == 'environment': d['environment.bz2'] = compress_data('bzip2', v.bytes_fileobj().read()) continue if k == 'provides': versionless_provides = lambda b: b.key s = stringify_boolean(v, func=versionless_provides) elif k == 'eapi_obj': s = v.magic elif not isinstance(v, basestring): try: s = ' '.join(v) except TypeError: s = str(v) else: s = v d[_metadata_rewrites.get(k, k.upper())] = s d["%s-%s.ebuild" % (pkg.package, pkg.fullver)] = \ pkg.ebuild.text_fileobj().read() # this shouldn't be necessary post portage 2.2. # till then, their code requires redundant data, # so we've got this. if portage_compatible: d["CATEGORY"] = pkg.category d["PF"] = pkg.PF return d
def generate_attr_dict(pkg, portage_compatible=True): d = {} for k in pkg.tracked_attributes: if k == "contents": continue v = getattr(pkg, k) if k == 'environment': d['environment.bz2'] = compress_data( 'bzip2', v.bytes_fileobj().read()) continue elif not isinstance(v, str): try: s = ' '.join(v) except TypeError: s = str(v) else: s = v d[_metadata_rewrites.get(k, k.upper())] = s d[f"{pkg.package}-{pkg.fullver}.ebuild"] = pkg.ebuild.text_fileobj().read() # this shouldn't be necessary post portage 2.2. # till then, their code requires redundant data, # so we've got this. if portage_compatible: d["CATEGORY"] = pkg.category d["PF"] = pkg.PF return d
def get_obj(self, data="foonani", mutable=False, test_creation=False): self.fp = pjoin(self.dir, "bz2source.test.bz2") if not test_creation: if isinstance(data, str): data = data.encode() with open(self.fp, 'wb') as f: f.write(compression.compress_data('bzip2', data)) return data_source.bz2_source(self.fp, mutable=mutable)
def get_obj(self, data="foonani", mutable=False, test_creation=False): self.fp = pjoin(self.dir, "bz2source.test.bz2") if not test_creation: if isinstance(data, str): data = data.encode() with open(self.fp, 'wb') as f: f.write(compression.compress_data('bzip2', data)) return data_source.bz2_source(self.fp, mutable=mutable)
def add_data(self, domain): # error checking? dirpath = self.tmp_write_path ensure_dirs(dirpath, mode=0755, minimal=True) update_mtime(self.repo.location) rewrite = self.repo._metadata_rewrites for k in self.new_pkg.tracked_attributes: if k == "contents": v = ContentsFile(pjoin(dirpath, "CONTENTS"), mutable=True, create=True) v.update(self.new_pkg.contents) v.flush() elif k == "environment": data = compression.compress_data( 'bzip2', self.new_pkg.environment.bytes_fileobj().read()) with open(pjoin(dirpath, "environment.bz2"), "wb") as f: f.write(data) del data else: v = getattr(self.new_pkg, k) if k == 'provides': versionless_providers = lambda b: b.key s = conditionals.stringify_boolean( v, func=versionless_providers) elif k == 'eapi_obj': # hackity hack. s = v.magic k = 'eapi' elif k == 'depends' or k == 'rdepends': s = v.slotdep_str(domain) elif not isinstance(v, basestring): try: s = ' '.join(v) except TypeError: s = str(v) else: s = v with open(pjoin(dirpath, rewrite.get(k, k.upper())), "w", 32768) as f: f.write(s + "\n") # ebuild_data is the actual ebuild- no point in holding onto # it for built ebuilds, but if it's there, we store it. o = getattr(self.new_pkg, "ebuild", None) if o is None: logger.warning( "doing install/replace op, " "but source package doesn't provide the actual ebuild data. " "Creating an empty file") o = '' else: o = o.bytes_fileobj().read() # XXX lil hackish accessing PF with open(pjoin(dirpath, self.new_pkg.PF + ".ebuild"), "wb") as f: f.write(o) # install NEEDED and NEEDED.ELF.2 files from tmpdir if they exist pkg_tmpdir = normpath( pjoin(domain._get_tempspace(), self.new_pkg.category, self.new_pkg.PF, 'temp')) for f in ['NEEDED', 'NEEDED.ELF.2']: fp = pjoin(pkg_tmpdir, f) if os.path.exists(fp): local_source(fp).transfer_to_path(pjoin(dirpath, f)) # XXX finally, hack to keep portage from doing stupid shit. # relies on counter to discern what to punt during # merging/removal, we don't need that crutch however. problem? # No counter file, portage wipes all of our merges (friendly # bugger). # need to get zmedico to localize the counter # creation/counting to per CP for this trick to behave # perfectly. with open(pjoin(dirpath, "COUNTER"), "w") as f: f.write(str(int(time.time()))) #finally, we mark who made this. with open(pjoin(dirpath, "PKGMANAGER"), "w") as f: f.write("pkgcore-%s\n" % VERSION) return True
def add_data(self, domain): # error checking? dirpath = self.tmp_write_path ensure_dirs(dirpath, mode=0755, minimal=True) update_mtime(self.repo.location) rewrite = self.repo._metadata_rewrites for k in self.new_pkg.tracked_attributes: if k == "contents": v = ContentsFile(pjoin(dirpath, "CONTENTS"), mutable=True, create=True) v.update(self.new_pkg.contents) v.flush() elif k == "environment": data = compression.compress_data('bzip2', self.new_pkg.environment.bytes_fileobj().read()) with open(pjoin(dirpath, "environment.bz2"), "wb") as f: f.write(data) del data else: v = getattr(self.new_pkg, k) if k == 'provides': versionless_providers = lambda b:b.key s = conditionals.stringify_boolean(v, func=versionless_providers) elif k == 'eapi_obj': # hackity hack. s = v.magic k = 'eapi' elif k == 'depends' or k == 'rdepends': s = v.slotdep_str(domain) elif not isinstance(v, basestring): try: s = ' '.join(sorted(v)) except TypeError: s = str(v) else: s = v with open(pjoin(dirpath, rewrite.get(k, k.upper())), "w", 32768) as f: f.write(s + "\n") # ebuild_data is the actual ebuild- no point in holding onto # it for built ebuilds, but if it's there, we store it. o = getattr(self.new_pkg, "ebuild", None) if o is None: logger.warning( "doing install/replace op, " "but source package doesn't provide the actual ebuild data. " "Creating an empty file") o = '' else: o = o.bytes_fileobj().read() # XXX lil hackish accessing PF with open(pjoin(dirpath, self.new_pkg.PF + ".ebuild"), "wb") as f: f.write(o) # install NEEDED and NEEDED.ELF.2 files from tmpdir if they exist pkg_tmpdir = normpath(pjoin(domain._get_tempspace(), self.new_pkg.category, self.new_pkg.PF, 'temp')) for f in ['NEEDED', 'NEEDED.ELF.2']: fp = pjoin(pkg_tmpdir, f) if os.path.exists(fp): local_source(fp).transfer_to_path(pjoin(dirpath, f)) # XXX finally, hack to keep portage from doing stupid shit. # relies on counter to discern what to punt during # merging/removal, we don't need that crutch however. problem? # No counter file, portage wipes all of our merges (friendly # bugger). # need to get zmedico to localize the counter # creation/counting to per CP for this trick to behave # perfectly. with open(pjoin(dirpath, "COUNTER"), "w") as f: f.write(str(int(time.time()))) #finally, we mark who made this. with open(pjoin(dirpath, "PKGMANAGER"), "w") as f: f.write("pkgcore-%s\n" % VERSION) return True
def add_data(self): # error checking? dirpath = self.tmp_write_path ensure_dirs(dirpath, mode=0755, minimal=True) update_mtime(self.repo.location) rewrite = self.repo._metadata_rewrites for k in self.new_pkg.tracked_attributes: if k == "contents": v = ContentsFile(pjoin(dirpath, "CONTENTS"), mutable=True, create=True) v.update(self.new_pkg.contents) v.flush() elif k == "environment": data = compression.compress_data("bzip2", self.new_pkg.environment.bytes_fileobj().read()) open(pjoin(dirpath, "environment.bz2"), "wb").write(data) del data else: v = getattr(self.new_pkg, k) if k == "provides": versionless_providers = lambda b: b.key s = conditionals.stringify_boolean(v, func=versionless_providers) elif k == "eapi_obj": # hackity hack. s = v.magic k = "eapi" elif not isinstance(v, basestring): try: s = " ".join(v) except TypeError: s = str(v) else: s = v open(pjoin(dirpath, rewrite.get(k, k.upper())), "w", 32768).write(s) # ebuild_data is the actual ebuild- no point in holding onto # it for built ebuilds, but if it's there, we store it. o = getattr(self.new_pkg, "ebuild", None) if o is None: logger.warn( "doing install/replace op, " "but source package doesn't provide the actual ebuild data. " "Creating an empty file" ) o = "" else: o = o.bytes_fileobj().read() # XXX lil hackish accessing PF open(pjoin(dirpath, self.new_pkg.PF + ".ebuild"), "wb").write(o) # XXX finally, hack to keep portage from doing stupid shit. # relies on counter to discern what to punt during # merging/removal, we don't need that crutch however. problem? # No counter file, portage wipes all of our merges (friendly # bugger). # need to get zmedico to localize the counter # creation/counting to per CP for this trick to behave # perfectly. open(pjoin(dirpath, "COUNTER"), "w").write(str(int(time.time()))) # finally, we mark who made this. open(pjoin(dirpath, "PKGMANAGER"), "w").write("pkgcore-%s\n" % VERSION) return True
def _set_data(self, data): if compatibility.is_py3k: if isinstance(data, str): data = data.encode() open(self.location, "wb").write( compression.compress_data('bzip2', data))