summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBhuvan Arumugam <bhuvan@apache.org>2012-05-04 21:43:43 -0700
committerBhuvan Arumugam <bhuvan@apache.org>2012-05-04 21:46:32 -0700
commitf60c1cf4d4b4b75f9ce55cccab8a6f202761da5d (patch)
treeca25309981e6ad6677dc424b26e160cf2e5f7c4d
parente9ba370434537bcf1e53266e24397311d595b71e (diff)
downloadpython-keystoneclient-f60c1cf4d4b4b75f9ce55cccab8a6f202761da5d.tar.gz
Auto generate AUTHORS for python-keystoneclient.
Bug: 976267 Now that git commits are gated by CLA, we shouldn't enforce committers to add an entry in AUTHORS file. The AUTHORS file should be generated automatically, based on git commits. This commit fixes the problem. * AUTHORS Remove this file. * .gitignore Add AUTHORS file. * keystoneclient/openstack/common/setup.py generate_authors(): New method to create AUTHORS file. If AUTHORS.in file exists, append it's content to AUTHORS file. * setup.py Import the new method. Generate AUTHORS file before creating the package. * openstack-common.conf Add config file to copy libraries from openstack-common project, using update.py script. * keystoneclient/openstack/__init__.py * keystoneclient/openstack/common/__init__.py Add new placeholders. Change-Id: I1a17ee8f1e19e8ad522f0d2e37c04fffba5e16cb
-rw-r--r--.gitignore1
-rw-r--r--AUTHORS23
-rw-r--r--keystoneclient/openstack/__init__.py0
-rw-r--r--keystoneclient/openstack/common/__init__.py0
-rw-r--r--keystoneclient/openstack/common/setup.py145
-rw-r--r--openstack-common.conf7
-rw-r--r--setup.py2
7 files changed, 155 insertions, 23 deletions
diff --git a/.gitignore b/.gitignore
index 097d208..f9038bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ cover
.idea
*.swp
*~
+AUTHORS
build
dist
python_keystoneclient.egg-info
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 97efafc..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,23 +0,0 @@
-Adam Gandelman <adamg@canonical.com>
-Alan Pevec <apevec@redhat.com>
-Anthony Young <sleepsonthefloor@gmail.com>
-Brian Waldon <bcwaldon@gmail.com>
-Dean Troyer <dtroyer@gmail.com>
-Dolph Mathews <dolph.mathews@gmail.com>
-Gabriel Hurley <gabriel@strikeawe.com>
-Ghe Rivero <ghe@debian.org>
-Hengqing Hu <hudayou@hotmail.com>
-Jenkins <jenkins@review.openstack.org>
-Jesse Andrews <anotherjesse@gmail.com>
-Joe Heck <heckj@mac.com>
-Josh Kearney <josh@jk0.org>
-Ken Thomas <krt@yahoo-inc.com>
-Monty Taylor <mordred@inaugust.com>
-Thierry Carrez <thierry@openstack.org>
-Tihomir Trifonov <t.trifonov@gmail.com>
-Vishvananda Ishaya <vishvananda@gmail.com>
-Yaguang Tang <heut2008@gmail.com>
-Zhongyue Luo <lzyeval@gmail.com>
-Ziad Sawalha <github@highbridgellc.com>
-jakedahn <jake@ansolabs.com>
-termie <github@anarkystic.com>
diff --git a/keystoneclient/openstack/__init__.py b/keystoneclient/openstack/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/keystoneclient/openstack/__init__.py
diff --git a/keystoneclient/openstack/common/__init__.py b/keystoneclient/openstack/common/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/keystoneclient/openstack/common/__init__.py
diff --git a/keystoneclient/openstack/common/setup.py b/keystoneclient/openstack/common/setup.py
new file mode 100644
index 0000000..60c731a
--- /dev/null
+++ b/keystoneclient/openstack/common/setup.py
@@ -0,0 +1,145 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""
+Utilities with minimum-depends for use in setup.py
+"""
+
+import os
+import re
+import subprocess
+
+
+def parse_mailmap(mailmap='.mailmap'):
+ mapping = {}
+ if os.path.exists(mailmap):
+ fp = open(mailmap, 'r')
+ for l in fp:
+ l = l.strip()
+ if not l.startswith('#') and ' ' in l:
+ canonical_email, alias = l.split(' ')
+ mapping[alias] = canonical_email
+ return mapping
+
+
+def canonicalize_emails(changelog, mapping):
+ """Takes in a string and an email alias mapping and replaces all
+ instances of the aliases in the string with their real email.
+ """
+ for alias, email in mapping.iteritems():
+ changelog = changelog.replace(alias, email)
+ return changelog
+
+
+# Get requirements from the first file that exists
+def get_reqs_from_files(requirements_files):
+ reqs_in = []
+ for requirements_file in requirements_files:
+ if os.path.exists(requirements_file):
+ return open(requirements_file, 'r').read().split('\n')
+ return []
+
+
+def parse_requirements(requirements_files=['requirements.txt',
+ 'tools/pip-requires']):
+ requirements = []
+ for line in get_reqs_from_files(requirements_files):
+ if re.match(r'\s*-e\s+', line):
+ requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1',
+ line))
+ elif re.match(r'\s*-f\s+', line):
+ pass
+ else:
+ requirements.append(line)
+
+ return requirements
+
+
+def parse_dependency_links(requirements_files=['requirements.txt',
+ 'tools/pip-requires']):
+ dependency_links = []
+ for line in get_reqs_from_files(requirements_files):
+ if re.match(r'(\s*#)|(\s*$)', line):
+ continue
+ if re.match(r'\s*-[ef]\s+', line):
+ dependency_links.append(re.sub(r'\s*-[ef]\s+', '', line))
+ return dependency_links
+
+
+def write_requirements():
+ venv = os.environ.get('VIRTUAL_ENV', None)
+ if venv is not None:
+ with open("requirements.txt", "w") as req_file:
+ output = subprocess.Popen(["pip", "-E", venv, "freeze", "-l"],
+ stdout=subprocess.PIPE)
+ requirements = output.communicate()[0].strip()
+ req_file.write(requirements)
+
+
+def _run_shell_command(cmd):
+ output = subprocess.Popen(["/bin/sh", "-c", cmd],
+ stdout=subprocess.PIPE)
+ return output.communicate()[0].strip()
+
+
+def write_vcsversion(location):
+ """Produce a vcsversion dict that mimics the old one produced by bzr.
+ """
+ if os.path.isdir('.git'):
+ branch_nick_cmd = 'git branch | grep -Ei "\* (.*)" | cut -f2 -d" "'
+ branch_nick = _run_shell_command(branch_nick_cmd)
+ revid_cmd = "git rev-parse HEAD"
+ revid = _run_shell_command(revid_cmd).split()[0]
+ revno_cmd = "git log --oneline | wc -l"
+ revno = _run_shell_command(revno_cmd)
+ with open(location, 'w') as version_file:
+ version_file.write("""
+# This file is automatically generated by setup.py, So don't edit it. :)
+version_info = {
+ 'branch_nick': '%s',
+ 'revision_id': '%s',
+ 'revno': %s
+}
+""" % (branch_nick, revid, revno))
+
+
+def write_git_changelog():
+ """Write a changelog based on the git changelog."""
+ if os.path.isdir('.git'):
+ git_log_cmd = 'git log --stat'
+ changelog = _run_shell_command(git_log_cmd)
+ mailmap = parse_mailmap()
+ with open("ChangeLog", "w") as changelog_file:
+ changelog_file.write(canonicalize_emails(changelog, mailmap))
+
+
+def generate_authors():
+ """Create AUTHORS file using git commits."""
+ jenkins_email = 'jenkins@review.openstack.org'
+ old_authors = 'AUTHORS.in'
+ new_authors = 'AUTHORS'
+ if os.path.isdir('.git'):
+ # don't include jenkins email address in AUTHORS file
+ git_log_cmd = "git log --format='%aN <%aE>' | sort -u | " \
+ "grep -v " + jenkins_email
+ changelog = _run_shell_command(git_log_cmd)
+ mailmap = parse_mailmap()
+ with open(new_authors, 'w') as new_authors_fh:
+ new_authors_fh.write(canonicalize_emails(changelog, mailmap))
+ if os.path.exists(old_authors):
+ with open(old_authors, "r") as old_authors_fh:
+ new_authors_fh.write('\n' + old_authors_fh.read())
diff --git a/openstack-common.conf b/openstack-common.conf
new file mode 100644
index 0000000..de8f129
--- /dev/null
+++ b/openstack-common.conf
@@ -0,0 +1,7 @@
+[DEFAULT]
+
+# The list of modules to copy from openstack-common
+modules=setup
+
+# The base module to hold the copy of openstack.common
+base=keystoneclient
diff --git a/setup.py b/setup.py
index b0747df..634b3b4 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,7 @@
import os
import sys
from setuptools import setup, find_packages
+from keystoneclient.openstack.common.setup import generate_authors
def read(fname):
@@ -12,6 +13,7 @@ if sys.version_info < (2, 6):
if sys.version_info < (2, 7):
requirements.append('argparse')
+generate_authors()
setup(
name="python-keystoneclient",
version="2012.2",