From 8eff471f60a0be2eb6ede5525e224852d5c06048 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Fri, 2 Aug 2013 11:46:09 -0400 Subject: Ensure _run_shell_command always returns same type If _run_shell_command gets no output, return an empty string instead of None. This ensures that callers can always treat the results as a string, and avoids the TypeError that was preventing the ChangeLog and AUTHORS files from being created properly in a git repository without any commits. Change-Id: I880210bc3ff92ece29b216a10e1d0c918f884eaf --- pbr/packaging.py | 2 +- pbr/tests/test_packaging.py | 106 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 pbr/tests/test_packaging.py diff --git a/pbr/packaging.py b/pbr/packaging.py index 8e6ab4a..366f21e 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -220,7 +220,7 @@ def _run_shell_command(cmd, throw_on_error=False, buffer=True): raise distutils.errors.DistutilsError( "%s returned %d" % (cmd, output.returncode)) if len(out) == 0 or not out[0] or not out[0].strip(): - return None + return '' return out[0].strip().decode('utf-8') diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py new file mode 100644 index 0000000..7461c0f --- /dev/null +++ b/pbr/tests/test_packaging.py @@ -0,0 +1,106 @@ +# Copyright (c) 2013 New Dream Network, LLC (DreamHost) +# +# 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. +# +# Copyright (C) 2013 Association of Universities for Research in Astronomy +# (AURA) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of AURA and its representatives may not be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + +import os + +from pbr import tests + + +class TestPackagingInGitRepoWithCommit(tests.BaseTestCase): + + def setUp(self): + super(TestPackagingInGitRepoWithCommit, self).setUp() + self._run_cmd('git', ['init', '.']) + self._run_cmd('git', ['add', '.']) + self._run_cmd('git', ['commit', '-m', 'test commit']) + self.run_setup('sdist') + return + + def test_authors(self): + # One commit, something should be in the authors list + with open(os.path.join(self.package_dir, 'AUTHORS'), 'r') as f: + body = f.read() + self.assertNotEqual(body, '') + + def test_changelog(self): + with open(os.path.join(self.package_dir, 'ChangeLog'), 'r') as f: + body = f.read() + # One commit, something should be in the ChangeLog list + self.assertNotEqual(body, '') + + +class TestPackagingInGitRepoWithoutCommit(tests.BaseTestCase): + + def setUp(self): + super(TestPackagingInGitRepoWithoutCommit, self).setUp() + self._run_cmd('git', ['init', '.']) + self._run_cmd('git', ['add', '.']) + self.run_setup('sdist') + return + + def test_authors(self): + # No commits, no authors in list + with open(os.path.join(self.package_dir, 'AUTHORS'), 'r') as f: + body = f.read() + self.assertEqual(body, '') + + def test_changelog(self): + # No commits, nothing should be in the ChangeLog list + with open(os.path.join(self.package_dir, 'ChangeLog'), 'r') as f: + body = f.read() + self.assertEqual(body, '') + + +class TestPackagingInPlainDirectory(tests.BaseTestCase): + + def setUp(self): + super(TestPackagingInPlainDirectory, self).setUp() + self.run_setup('sdist') + return + + def test_authors(self): + # Not a git repo, no AUTHORS file created + filename = os.path.join(self.package_dir, 'AUTHORS') + self.assertFalse(os.path.exists(filename)) + + def test_changelog(self): + # Not a git repo, no ChangeLog created + filename = os.path.join(self.package_dir, 'ChangeLog') + self.assertFalse(os.path.exists(filename)) -- cgit v1.2.1