[virt-tools-list] [virt-bootstrap][PATCH 6/7] Prepare setup.py for release

Radostin Stoyanov rstoyanov1 at gmail.com
Wed Sep 6 04:44:18 UTC 2017



On 05/09/17 17:41, Cédric Bosdonnat wrote:
> Clean up the file, tell the world we are now stable enough, generate
> ChangeLog and AUTHORS files and add license header.
> ---
>  AUTHORS.in |  12 +++++++
>  setup.py   | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 111 insertions(+), 20 deletions(-)
>  create mode 100644 AUTHORS.in
>
> diff --git a/AUTHORS.in b/AUTHORS.in
> new file mode 100644
> index 0000000..9a57532
> --- /dev/null
> +++ b/AUTHORS.in
> @@ -0,0 +1,12 @@
> +  virt-boostrap Authors
> +  ==============================
> +
> +The virt-bootstrap tool is maintained by the
> +virt-manager development team, who can be contacted
> +at
> +
> +   virt-tools-list at redhat.com
> +
> +The individual contributors are
> +
> + at AUTHORS@
> diff --git a/setup.py b/setup.py
> index 1ed852f..d2a0c8b 100755
> --- a/setup.py
> +++ b/setup.py
> @@ -1,5 +1,23 @@
>  #!/usr/bin/env python
>  # -*- coding: utf-8; -*-
> +# Authors: Cedric Bosdonnat <cbosdonnat at suse.com>
> +# Authors: Radostin Stoyanov <rstoyanov1 at gmail.com>
> +#
> +# Copyright (C) 2017 SUSE, Inc.
> +# Copyright (C) 2017 Radostin Stoyanov
> +#
> +# This program is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 3 of the License, or
> +# (at your option) any later version.
> +
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
>  """
>  Setup script used for building, testing, and installing modules
> @@ -8,8 +26,10 @@ based on setuptools.
>  
>  import codecs
>  import os
> +import re
>  import sys
>  import subprocess
> +import time
>  import setuptools
>  from setuptools.command.install import install
>  from setuptools.command.sdist import sdist
^^ This import statement should be added in this patch (not in patch 3).
> @@ -91,6 +111,78 @@ class CheckPylint(setuptools.Command):
>  
>          sys.exit(res)
>  
> +# SdistCommand is reused from the libvirt python binding (GPLv2+)
> +class SdistCommand(sdist):
> +    """
> +    Custom sdist command, generating a few files.
> +    """
> +    user_options = sdist.user_options
> +
> +    description = "Update AUTHORS and ChangeLog; build sdist-tarball."
> +
> +    def gen_authors(self):
> +        """
> +        Generate AUTHOS file out of git log
> +        """
> +        fdlog = os.popen("git log --pretty=format:'%aN <%aE>'")
> +        authors = []
> +        for line in fdlog:
> +            line = "   " + line.strip()
> +            if line not in authors:
> +                authors.append(line)
> +
> +        authors.sort(key=str.lower)
> +
> +        fd1 = open('AUTHORS.in', 'r')
> +        fd2 = open('AUTHORS', 'w')
> +        for line in fd1:
> +            fd2.write(line.replace('@AUTHORS@', "\n".join(authors)))
> +        fd1.close()
> +        fd2.close()
> +
Here we can use the "with" statement

with open('AUTHORS.in', 'r') as fd1,  open('AUTHORS', 'w') as fd2:
    for line in fd1:
        fd2.write(line.replace('@AUTHORS@', "\n".join(authors)))

For more info see:
   -
https://docs.python.org/2/reference/datamodel.html#with-statement-context-managers
   - https://www.python.org/dev/peps/pep-0343
> +
> +    def gen_changelog(self):
> +        """
> +        Generate ChangeLog file out of git log
> +        """
> +        fd1 = os.popen("git log '--pretty=format:%H:%ct %an  <%ae>%n%n%s%n%b%n'")
> +        fd2 = open("ChangeLog", 'w')
> +
> +        for line in fd1:
> +            match = re.match(r'([a-f0-9]+):(\d+)\s(.*)', line)
> +            if match:
> +                timestamp = time.gmtime(int(match.group(2)))
> +                fd2.write("%04d-%02d-%02d %s\n" % (timestamp.tm_year,
> +                                                   timestamp.tm_mon,
> +                                                   timestamp.tm_mday, match.group(3)))
> +            else:
> +                if re.match(r'Signed-off-by', line):
> +                    continue
> +                fd2.write("    " + line.strip() + "\n")
> +
> +        fd1.close()
> +        fd2.close()
> +
> +
> +    def run(self):
> +        if not os.path.exists("build"):
> +            os.mkdir("build")
> +
> +        if os.path.exists(".git"):
> +            try:
> +                self.gen_authors()
> +                self.gen_changelog()
> +
> +                sdist.run(self)
> +
> +            finally:
> +                files = ["AUTHORS",
> +                         "ChangeLog"]
> +                for file in files:
> +                    if os.path.exists(file):
> +                        os.unlink(file)
> +        else:
> +            sdist.run(self)
AFAIK the idea is to generate ChangeLog and AUTHORS files which are
included in the "dist/virt-bootstrap-0.1.0.tar.gz" archive and then
these files are deleted.
However, for this work we need to include "ChangeLog" and "AUTHORS" in
the MANIFEST.in file.
>  
>  setuptools.setup(
>      name='virt-bootstrap',
> @@ -98,10 +190,9 @@ setuptools.setup(
>      author='Cedric Bosdonnat',
>      author_email='cbosdonnat at suse.com',
>      description='Container bootstrapping tool',
> -    license="GPLv3",
> +    license="GPLv3+",
>      long_description=read('README.md'),
>      url='https://github.com/virt-manager/virt-bootstrap',
> -    # What does your project relate to?
>      keywords='virtualization container rootfs',
>      packages=setuptools.find_packages(),
>      test_suite='tests',
> @@ -111,30 +202,18 @@ setuptools.setup(
>          ]
>      },
>      classifiers=[
> -        # How mature is this project? Common values are
> -        #   3 - Alpha
> -        #   4 - Beta
> -        #   5 - Production/Stable
> -        'Development Status :: 3 - Alpha',
> -
> -        # Indicate who your project is intended for
> +        'Development Status :: 5 - Production/Stable',
>          'Intended Audience :: System Administrators',
>          'Intended Audience :: Developers',
> -
> -        # Pick your license as you wish (should match "license" above)
> -        'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
> -
> -        # Specify the Python versions you support here. In particular, ensure
> -        # that you indicate whether you support Python 2, Python 3 or both.
> -        'Programming Language :: Python :: 2.7',
> -        'Programming Language :: Python :: 3.4',
> -        'Programming Language :: Python :: 3.5',
> -        'Programming Language :: Python :: 3.6'
> +        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
> +        'Programming Language :: Python :: 2',
> +        'Programming Language :: Python :: 3',
>  
>      ],
>      cmdclass={
>          'install': PostInstallCommand,
> -        'pylint': CheckPylint
> +        'pylint': CheckPylint,
> +        'sdist': SdistCommand
>      },
>  
>      data_files=[

There are a few errors from pylint which need to be fixed.

ACK with the above-mentioned changes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20170906/7b485681/attachment.htm>


More information about the virt-tools-list mailing list