summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2017-11-27 19:59:32 +0100
committerGuido Günther <agx@sigxcpu.org>2017-11-27 22:49:52 +0100
commit90a1a99169521df9de2b1bfc3c129402ee1158fc (patch)
tree8ec60013f4fdaaee54b7809c1ef7d4a6bf70d49e
parent7c05c02f2d0380ea2304a81f3c9f133161204c44 (diff)
ChangeLog: add class method to create empty changelogs
-rw-r--r--gbp/deb/changelog.py18
-rw-r--r--tests/30_test_deb_changelog.py39
2 files changed, 57 insertions, 0 deletions
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')