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

Cédric Bosdonnat cbosdonnat at suse.com
Thu Sep 7 11:45:15 UTC 2017


Clean up the file, tell the world we are now stable enough, generate
ChangeLog and AUTHORS files and add license header. Add the test files
to the distribution.
---
 AUTHORS.in  |  12 ++++++
 MANIFEST.in |   3 +-
 setup.py    | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++----------
 3 files changed, 113 insertions(+), 21 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/MANIFEST.in b/MANIFEST.in
index 61bb7fb..f99fa9d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,3 +1,4 @@
-include README.md LICENSE
+include README.md LICENSE ChangeLog AUTHORS
 recursive-include src *.py
+recursive-include tests *.py
 recursive-include man *
diff --git a/setup.py b/setup.py
index bca9955..9fa2c9b 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,10 +26,13 @@ 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
 
 # pylint: disable=import-error, wrong-import-position
 sys.path.insert(0, 'src')  # noqa: E402
@@ -94,16 +115,86 @@ 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)
+
+        with open('AUTHORS.in', 'r') as fd1, open('AUTHORS', 'w') as fd2:
+            for line in fd1:
+                fd2.write(line.replace('@AUTHORS@', "\n".join(authors)))
+
+    def gen_changelog(self):
+        """
+        Generate ChangeLog file out of git log
+        """
+        cmd = "git log '--pretty=format:%H:%ct %an  <%ae>%n%n%s%n%b%n'"
+        fd1 = os.popen(cmd)
+        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)
+
+
 setuptools.setup(
     name='virt-bootstrap',
     version=virtBootstrap.__version__,
     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',
     package_dir={"": "src"},
     packages=setuptools.find_packages('src'),
@@ -114,30 +205,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+)',  # noqa: 501
+        'Programming Language :: Python :: 2',
+        'Programming Language :: Python :: 3',
 
     ],
     cmdclass={
         'install': PostInstallCommand,
-        'pylint': CheckPylint
+        'pylint': CheckPylint,
+        'sdist': SdistCommand
     },
 
     data_files=[
-- 
2.13.2




More information about the virt-tools-list mailing list