def test_get_version_caching(self): # retrieved version info is cached in a module attr v = version.get_version('snakeoil', __file__) assert v.startswith('%s %s' % ('snakeoil', __version__)) # re-running get_version returns the cached attr instead of reprocessing with mock.patch('snakeoil.version.import_module') as import_module: v = version.get_version('snakeoil', __file__) assert not import_module.called
def to_man(self): """Convert eclassdoc object to a man page.""" from docutils.writers import manpage man_data = { 'manual_section': '5', 'manual_group': 'eclass-manpages', 'date': datetime.utcnow().strftime('%Y-%m-%d'), 'version': 'Gentoo Linux', } if self.blurb: man_data['subtitle'] = self.blurb # add pkgcore version to header comment pkgcore_version = get_version(__title__, __file__).split(' --')[0] header_comment = f'\nCreated by {pkgcore_version}.' class Translator(manpage.Translator): """Override docutils man page metadata defaults.""" document_start = manpage.Translator.document_start + header_comment def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._docinfo.update(man_data) writer = manpage.Writer() writer.translator_class = Translator return self._to_docutils(writer)
def test_get_version_no_git_version(self): with mock.patch('snakeoil.version.import_module') as import_module, \ mock.patch('snakeoil.version.get_git_version') as get_git_version: import_module.side_effect = ImportError get_git_version.return_value = None result = version.get_version('snakeoil', 'nonexistent', __version__) expected = '%s %s -- extended version info unavailable' % ('snakeoil', __version__) assert result == expected
def test_get_version_no_git_version(self): with mock.patch('snakeoil.version.import_module') as import_module, \ mock.patch('snakeoil.version.get_git_version') as get_git_version: import_module.side_effect = ImportError get_git_version.return_value = None result = version.get_version('snakeoil', 'nonexistent', __version__) assert result == f'snakeoil {__version__}'
def test_get_version_git_dev(self): with mock.patch('snakeoil.version.import_module') as import_module, \ mock.patch('snakeoil.version.get_git_version') as get_git_version: import_module.side_effect = ImportError verinfo = { 'rev': '1ff76b021d208f7df38ac524537b6419404f1c64', 'date': 'Mon Sep 25 13:50:24 2017 -0400', 'tag': None } get_git_version.return_value = verinfo result = version.get_version('snakeoil', __file__, __version__) assert result == f"snakeoil {__version__}-g{verinfo['rev'][:7]} -- {verinfo['date']}"
def test_get_version_git_dev(self): with mock.patch('snakeoil.version.import_module') as import_module, \ mock.patch('snakeoil.version.get_git_version') as get_git_version: import_module.side_effect = ImportError verinfo = { 'rev': '1ff76b021d208f7df38ac524537b6419404f1c64', 'date': 'Mon Sep 25 13:50:24 2017 -0400', 'tag': None } get_git_version.return_value = verinfo result = version.get_version('snakeoil', __file__, __version__) expected = 'snakeoil %s-g%s -- %s' % (__version__, verinfo['rev'][:7], verinfo['date']) assert result == expected
def test_get_version_git_release(self): verinfo = { 'rev': 'ab38751890efa8be96b7f95938d6b868b769bab6', 'date': 'Thu Sep 21 15:57:38 2017 -0400', 'tag': '2.3.4', } # fake snakeoil._verinfo module object class Verinfo: version_info = verinfo with mock.patch('snakeoil.version.import_module') as import_module: import_module.return_value = Verinfo() result = version.get_version('snakeoil', __file__, verinfo['tag']) assert result == f"snakeoil {verinfo['tag']} -- released {verinfo['date']}"
def test_get_version_git_release(self): verinfo={ 'rev': 'ab38751890efa8be96b7f95938d6b868b769bab6', 'date': 'Thu Sep 21 15:57:38 2017 -0400', 'tag': '2.3.4', } # fake snakeoil._verinfo module object class Verinfo(object): version_info=verinfo with mock.patch('snakeoil.version.import_module') as import_module: import_module.return_value = Verinfo() result = version.get_version('snakeoil', __file__, verinfo['tag']) expected = 'snakeoil %s -- released %s' % (verinfo['tag'], verinfo['date']) assert result == expected
def test_get_version_api(self): v = version.get_version('snakeoil', __file__, '9.9.9') assert v.startswith('snakeoil 9.9.9')
def test_get_version_unknown(self): with pytest.raises(ValueError): version.get_version('snakeoilfoo', __file__)
def add_data(self, domain): # error checking? dirpath = self.tmp_write_path ensure_dirs(dirpath, mode=0o755, 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 in ('bdepend', 'depend', 'rdepend'): s = v.slotdep_str(domain) elif k == 'user_patches': s = '\n'.join(chain.from_iterable(files for _, files in v)) elif not isinstance(v, str): 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: if s: s += '\n' f.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.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.pm_tmpdir, 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(get_version(__title__, __file__)) return True
def add_data(self, domain): # error checking? dirpath = self.tmp_write_path ensure_dirs(dirpath, mode=0o755, 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 in ('bdepend', 'depend', 'rdepend', 'idepend'): s = v.slotdep_str(domain) elif k == 'user_patches': s = '\n'.join(chain.from_iterable(files for _, files in v)) elif not isinstance(v, str): 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: if s: s += '\n' f.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.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.pm_tmpdir, 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(get_version(__title__, __file__)) return True