From 90a1a99169521df9de2b1bfc3c129402ee1158fc Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Mon, 27 Nov 2017 19:59:32 +0100 Subject: ChangeLog: add class method to create empty changelogs --- gbp/deb/changelog.py | 18 ++++++++++++++++++ tests/30_test_deb_changelog.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/gbp/deb/changelog.py b/gbp/deb/changelog.py index 1d7bc47e..e7e03257 100644 --- a/gbp/deb/changelog.py +++ b/gbp/deb/changelog.py @@ -272,6 +272,10 @@ class ChangeLog(object): args.append("--distribution=%s" % distribution) args.extend(dch_options or []) + + if '--create' in args: + env['EDITOR'] = env['VISUAL'] = '/bin/true' + args.append('--') if msg: args.append('[[[insert-git-dch-commit-message-here]]]') @@ -344,3 +348,17 @@ class ChangeLog(object): name, mail = email.utils.parseaddr(_quote(maintainer or '')) return (_unquote(name), _unquote(mail)) + + @classmethod + def create(cls, package=None, version=None): + """ + Create a new, empty changelog + """ + dch_options = ['--create'] + if package: + dch_options.extend(['--package', package]) + if version: + dch_options.extend(['--newversion', version]) + + cls.spawn_dch(dch_options=dch_options) + return cls(filename='debian/changelog') diff --git a/tests/30_test_deb_changelog.py b/tests/30_test_deb_changelog.py index 8587a675..339864e0 100644 --- a/tests/30_test_deb_changelog.py +++ b/tests/30_test_deb_changelog.py @@ -7,9 +7,12 @@ Test things here that don't fit nicely into the doctests that also make up the API documentation. """ +from . import context # noqa: 401 +import os import unittest from gbp.deb.changelog import ChangeLog +from gbp.command_wrappers import CommandExecFailed class TestQuoting(unittest.TestCase): @@ -24,3 +27,39 @@ class TestQuoting(unittest.TestCase): cl = ChangeLog(changes) self.assertEquals(cl.author, 'Guido Günther, aftercomma') self.assertEquals(cl.email, 'agx@sigxcpu.org') + + +class Test(unittest.TestCase): + def setUp(self): + self.tmpdir = context.new_tmpdir(__name__) + context.chdir(self.tmpdir) + os.mkdir('debian/') + + def tearDown(self): + context.teardown() + + def test_changelog_creation_full(self): + cp = ChangeLog.create('package', '1.0') + self.assertEquals(cp.name, 'package') + self.assertEquals(cp.version, '1.0') + + def test_changelog_creation_version(self): + cp = ChangeLog.create(version='1.0') + self.assertEquals(cp.name, 'PACKAGE') + self.assertEquals(cp.version, '1.0') + + def test_changelog_creation_package(self): + cp = ChangeLog.create(package='package') + self.assertEquals(cp.name, 'package') + self.assertEquals(cp.version, 'unknown') + + def test_changelog_missing_dir(self): + os.rmdir('debian/') + with self.assertRaisesRegexp(CommandExecFailed, "Cannot find debian directory"): + ChangeLog.create('package', '1.0') + + def test_changelog_exists(self): + with open('debian/changelog', 'w') as f: + f.write('') + with self.assertRaisesRegexp(CommandExecFailed, "File debian/changelog already exists"): + ChangeLog.create('package', '1.0') -- cgit v1.2.3