summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pbr/packaging.py23
-rw-r--r--pbr/tests/test_core.py38
-rw-r--r--pbr/tests/test_setup.py13
-rw-r--r--pbr/tests/testpackage/pbr_testpackage/cmd.py7
-rw-r--r--pbr/tests/testpackage/setup.cfg1
5 files changed, 49 insertions, 33 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py
index a55daed..02b741a 100644
--- a/pbr/packaging.py
+++ b/pbr/packaging.py
@@ -95,10 +95,14 @@ def _pip_install(links, requires, root=None, option_dict=dict()):
throw_on_error=True, buffer=False)
-def read_git_mailmap(git_dir, mailmap='.mailmap'):
- mailmap = os.path.join(git_dir, mailmap)
+def read_git_mailmap(root_dir=None, mailmap='.mailmap'):
+ if not root_dir:
+ root_dir = _run_shell_command('git rev-parse --show-toplevel')
+
+ mailmap = os.path.join(root_dir, mailmap)
if os.path.exists(mailmap):
return _parse_mailmap(open(mailmap, 'r').readlines())
+
return dict()
@@ -242,7 +246,7 @@ def write_git_changelog(git_dir=None, dest_dir=os.path.curdir,
if git_dir:
git_log_cmd = 'git --git-dir=%s log' % git_dir
changelog = _run_shell_command(git_log_cmd)
- mailmap = read_git_mailmap(git_dir)
+ mailmap = read_git_mailmap()
with open(new_changelog, "wb") as changelog_file:
changelog_file.write(canonicalize_emails(
changelog, mailmap).encode('utf-8'))
@@ -278,7 +282,7 @@ def generate_authors(git_dir=None, dest_dir='.', option_dict=dict()):
for signed in signed_entries.split("\n") if signed])
changelog = "\n".join((changelog, new_entries))
- mailmap = read_git_mailmap(git_dir)
+ mailmap = read_git_mailmap()
with open(new_authors, 'wb') as new_authors_fh:
if os.path.exists(old_authors):
with open(old_authors, "rb") as old_authors_fh:
@@ -427,11 +431,11 @@ _script_text = """# PBR Generated from %(group)r
import sys
-from %(module_name)s import %(func)s
+from %(module_name)s import %(import_target)s
if __name__ == "__main__":
- sys.exit(%(func)s())
+ sys.exit(%(invoke_target)s())
"""
@@ -441,10 +445,15 @@ def override_get_script_args(
header = easy_install.get_script_header("", executable, is_wininst)
for group in 'console_scripts', 'gui_scripts':
for name, ep in dist.get_entry_map(group).items():
+ if not ep.attrs or len(ep.attrs) > 2:
+ raise ValueError("Script targets must be of the form "
+ "'func' or 'Class.class_method'.")
script_text = _script_text % dict(
group=group,
module_name=ep.module_name,
- func=ep.attrs[0])
+ import_target=ep.attrs[0],
+ invoke_target='.'.join(ep.attrs),
+ )
yield (name, header+script_text)
diff --git a/pbr/tests/test_core.py b/pbr/tests/test_core.py
index f8e5989..a7376eb 100644
--- a/pbr/tests/test_core.py
+++ b/pbr/tests/test_core.py
@@ -49,6 +49,22 @@ from pbr import tests
class TestCore(tests.BaseTestCase):
+ cmd_names = ('pbr_test_cmd', 'pbr_test_cmd_with_class')
+
+ def check_script_install(self, install_stdout):
+ for cmd_name in self.cmd_names:
+ install_txt = 'Installing %s script to %s' % (cmd_name,
+ self.temp_dir)
+ self.assertIn(install_txt, install_stdout)
+
+ cmd_filename = os.path.join(self.temp_dir, cmd_name)
+
+ script_txt = open(cmd_filename, 'r').read()
+ self.assertNotIn('pkg_resources', script_txt)
+
+ stdout, _, return_code = self._run_cmd(cmd_filename)
+ self.assertIn("PBR", stdout)
+
def test_setup_py_keywords(self):
"""setup.py --keywords.
@@ -85,19 +101,10 @@ class TestCore(tests.BaseTestCase):
stdout, _, return_code = self.run_setup(
'install_scripts', '--install-dir=%s' % self.temp_dir)
- self.assertIn(
- 'Installing pbr_test_cmd script to %s' % self.temp_dir,
- stdout)
- self.assertNotIn(
- 'pkg_resources',
- open(os.path.join(self.temp_dir, 'pbr_test_cmd'), 'r').read())
-
self.useFixture(
fixtures.EnvironmentVariable('PYTHONPATH', '.'))
- stdout, _, return_code = self._run_cmd(
- os.path.join(self.temp_dir, 'pbr_test_cmd'))
- self.assertIn("PBR", stdout)
+ self.check_script_install(stdout)
def test_console_script_develop(self):
"""Test that we develop a non-pkg-resources console script."""
@@ -112,13 +119,4 @@ class TestCore(tests.BaseTestCase):
stdout, _, return_code = self.run_setup(
'develop', '--install-dir=%s' % self.temp_dir)
- self.assertIn(
- 'Installing pbr_test_cmd script to %s' % self.temp_dir,
- stdout)
- self.assertNotIn(
- 'pkg_resources',
- open(os.path.join(self.temp_dir, 'pbr_test_cmd'), 'r').read())
-
- stdout, _, return_code = self._run_cmd(
- os.path.join(self.temp_dir, 'pbr_test_cmd'))
- self.assertIn("PBR", stdout)
+ self.check_script_install(stdout)
diff --git a/pbr/tests/test_setup.py b/pbr/tests/test_setup.py
index 398c503..11f9a04 100644
--- a/pbr/tests/test_setup.py
+++ b/pbr/tests/test_setup.py
@@ -49,27 +49,26 @@ class MailmapTestCase(tests.BaseTestCase):
def setUp(self):
super(MailmapTestCase, self).setUp()
- self.git_dir = self.useFixture(fixtures.TempDir()).path
- self.mailmap = os.path.join(self.git_dir, '.mailmap')
+ self.root_dir = self.useFixture(fixtures.TempDir()).path
+ self.mailmap = os.path.join(self.root_dir, '.mailmap')
def test_mailmap_with_fullname(self):
- print(self.mailmap, self.git_dir)
with open(self.mailmap, 'w') as mm_fh:
mm_fh.write("Foo Bar <email@foo.com> Foo Bar <email@bar.com>\n")
self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
- packaging.read_git_mailmap(self.git_dir))
+ packaging.read_git_mailmap(self.root_dir))
def test_mailmap_with_firstname(self):
with open(self.mailmap, 'w') as mm_fh:
mm_fh.write("Foo <email@foo.com> Foo <email@bar.com>\n")
self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
- packaging.read_git_mailmap(self.git_dir))
+ packaging.read_git_mailmap(self.root_dir))
def test_mailmap_with_noname(self):
with open(self.mailmap, 'w') as mm_fh:
mm_fh.write("<email@foo.com> <email@bar.com>\n")
self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
- packaging.read_git_mailmap(self.git_dir))
+ packaging.read_git_mailmap(self.root_dir))
class SkipFileWrites(tests.BaseTestCase):
@@ -185,9 +184,11 @@ class GitLogsTest(tests.BaseTestCase):
git_log_cmd = ("git --git-dir=%s log --format" % self.git_dir)
git_co_log_cmd = ("git log --git-dir=%s" % self.git_dir)
+ git_top_level = "git rev-parse --show-toplevel"
cmd_map = {
git_log_cmd: author_new,
git_co_log_cmd: co_author_by,
+ git_top_level: self.root_dir,
}
exist_files = [self.git_dir,
diff --git a/pbr/tests/testpackage/pbr_testpackage/cmd.py b/pbr/tests/testpackage/pbr_testpackage/cmd.py
index 1b03915..4cc4522 100644
--- a/pbr/tests/testpackage/pbr_testpackage/cmd.py
+++ b/pbr/tests/testpackage/pbr_testpackage/cmd.py
@@ -17,3 +17,10 @@ from __future__ import print_function
def main():
print("PBR Test Command")
+
+
+class Foo(object):
+
+ @classmethod
+ def bar(self):
+ print("PBR Test Command - with class!")
diff --git a/pbr/tests/testpackage/setup.cfg b/pbr/tests/testpackage/setup.cfg
index 9bcc0ee..a410e3c 100644
--- a/pbr/tests/testpackage/setup.cfg
+++ b/pbr/tests/testpackage/setup.cfg
@@ -34,6 +34,7 @@ extra-files = extra-file.txt
[entry_points]
console_scripts =
pbr_test_cmd = pbr_testpackage.cmd:main
+ pbr_test_cmd_with_class = pbr_testpackage.cmd:Foo.bar
[extension=pbr_testpackage.testext]
sources = src/testext.c