Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
 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
Пример #5
0
 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__}'
Пример #6
0
 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
Пример #7
0
    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']}"
Пример #8
0
    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
Пример #9
0
    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']}"
Пример #10
0
    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
Пример #11
0
 def test_get_version_api(self):
     v = version.get_version('snakeoil', __file__, '9.9.9')
     assert v.startswith('snakeoil 9.9.9')
Пример #12
0
 def test_get_version_unknown(self):
     with pytest.raises(ValueError):
         version.get_version('snakeoilfoo', __file__)
Пример #13
0
    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
Пример #14
0
    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
Пример #15
0
 def test_get_version_api(self):
     v = version.get_version('snakeoil', __file__, '9.9.9')
     assert v.startswith('snakeoil 9.9.9')
Пример #16
0
 def test_get_version_unknown(self):
     with pytest.raises(ValueError):
         version.get_version('snakeoilfoo', __file__)