On Mon, May 14, 2012 at 10:46:52PM +0200, Daniel Dehennin wrote:
> + cp = klass(filename="debian/changelog")
> + cp.first = True
> + return cp
It's better to have a:
cp.is_empty()
method here. You can simply stat the file and check it's length to
implement this until we have the ChangeLog class parsing the changelog
for real.
Cheers,
-- Guido
> diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py
> index 14dff29..0309aa4 100644
> --- a/gbp/scripts/dch.py
> +++ b/gbp/scripts/dch.py
> @@ -112,6 +112,8 @@ def guess_version_from_upstream(repo,
> upstream_tag_format, cp):
> version = repo.tag_to_version(tag, upstream_tag_format)
> if version:
> gbp.log.debug("Found upstream version %s." % version)
> + if cp == None:
> + return "%s-1" % version
> if cp.has_epoch():
> version = "%s:%s" % (cp.epoch, version)
> if compare_versions(version, cp.version) > 0:
> @@ -357,6 +359,8 @@ def main(argv):
> parser.add_option_group(custom_group)
>
> parser.add_boolean_config_file_option(option_name = "ignore-branch",
> dest="ignore_branch")
> + naming_group.add_config_file_option(option_name="upstream-tree",
> dest="upstream_tree")
> + naming_group.add_config_file_option(option_name="upstream-branch",
> dest="upstream_branch")
> naming_group.add_config_file_option(option_name="debian-branch",
> dest="debian_branch")
> naming_group.add_config_file_option(option_name="upstream-tag",
> dest="upstream_tag")
> naming_group.add_config_file_option(option_name="debian-tag",
> dest="debian_tag")
> @@ -423,13 +427,17 @@ def main(argv):
> gbp.log.err("You are not on branch '%s' but on '%s'" %
> (options.debian_branch, branch))
> raise GbpError, "Use --ignore-branch to ignore or
> --debian-branch to set the branch name."
>
> - cp = ChangeLog(filename=changelog)
> + try:
> + cp = ChangeLog(filename=changelog)
> + except NoChangeLogError, e:
> + gbp.log.debug("No debian/changelog: create a new one")
> + cp = ChangeLog.create(repo, version=options.new_version,
> upstream_tag_format=options.upstream_tag)
>
> if options.since:
> since = options.since
> else:
> since = ''
> - if options.auto:
> + if options.auto or hasattr(cp, 'first') and cp.first:
> since = guess_snapshot_commit(cp, repo, options)
> if since:
> gbp.log.info("Continuing from commit '%s'" % since)
> @@ -437,7 +445,22 @@ def main(argv):
> else:
> gbp.log.info("Couldn't find snapshot header, using
> version info")
> if not since:
> - since = repo.find_version(options.debian_tag, cp['Version'])
> + # Take care of newly created debian/changelog
> + if hasattr(cp, 'first') and cp.first:
> + pattern = options.upstream_tag % dict(version='*')
> + try:
> + upstream = repo.find_tag('HEAD', pattern=pattern)
> + except GitRepositoryError:
> + gbp.debug('No upstream tag found')
> + upstream = options.upstream_branch
> + if options.upstream_tree == 'branch':
> + upstream = options.upstream_branch
> + since = repo.get_merge_base('HEAD', upstream)
> + if since and options.snapshot:
> + # Snapshot can not be guessed
> + found_snapshot_header = True
> + else:
> + since = repo.find_version(options.debian_tag,
> cp['Version'])
> if not since:
> raise GbpError, "Version %s not found" % cp['Version']
>
> diff --git a/tests/11_test_changelog_create.py
> b/tests/11_test_changelog_create.py
> new file mode 100644
> index 0000000..270bdf1
> --- /dev/null
> +++ b/tests/11_test_changelog_create.py
> @@ -0,0 +1,159 @@
> +# vim: set fileencoding=utf-8 :
> +
> +"""Test L{Changelog}'s create"""
> +
> +import unittest
> +
> +from testutils import DebianGitTestRepo
> +
> +from gbp.scripts import dch
> +from gbp.deb.changelog import ChangeLog
> +
> +import os
> +import re
> +
> +snap_header =
> r'^test-package\s\(1.0-1~1\.gbp([0-9a-f]{6})\)\sUNRELEASED;\surgency=low'
> +snap_mark = r'\s{2}\*{2}\sSNAPSHOT\sbuild\s@'
> +
> +class TestScriptDch(DebianGitTestRepo):
> + """Test git-dch"""
> +
> + def setUp(self):
> + DebianGitTestRepo.setUp(self)
> + self.add_file("foo", "bar")
> + self.repo.create_tag("upstream/1.0", msg="upstream version 1.0")
> + self.repo.create_branch("debian")
> + self.repo.set_branch("debian")
> + self.upstream_tag = "upstream/%(version)s"
> + self.top = os.path.abspath(os.path.curdir)
> + os.mkdir(os.path.join(self.repo.path, "debian"))
> + os.chdir(self.repo.path)
> + self.add_file("debian/control", """Source: test-package\nSection:
> test\n""")
> +
> + def tearDown(self):
> + os.chdir(self.top)
> + DebianGitTestRepo.tearDown(self)
> +
> + def test_create(self):
> + """Test direct call to ChangeLog.create(): guess package name from
> debian/control"""
> + ChangeLog.create(self.repo, upstream_tag_format=self.upstream_tag)
> + lines = file("debian/changelog").readlines()
> + assert """test-package (1.0-1) UNRELEASED; urgency=low\n""" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> +
> + def test_create_without_control(self):
> + """Test direct call to ChangeLog.create()"""
> + ChangeLog.create(self.repo, package="test-package",
> upstream_tag_format=self.upstream_tag)
> + lines = file("debian/changelog").readlines()
> + assert """test-package (1.0-1) UNRELEASED; urgency=low\n""" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> +
> + def test_create_without_upstream_log(self):
> + """Test direct call to ChangeLog.create(): must not include upstream
> log in debian/changelog"""
> + ChangeLog.create(self.repo, upstream_tag_format=self.upstream_tag)
> + lines = file("debian/changelog").readlines()
> + assert """test-package (1.0-1) UNRELEASED; urgency=low\n""" in lines
> + assert """ * added foo\n""" not in lines
> +
> + def test_create_after_delete(self):
> + """Test direct call to ChangeLog.create(): debian/changelog
> deleted"""
> + self.add_file("debian/changelog", "fake")
> + self.repo.remove_files("debian/changelog")
> + self.repo.commit_files(self.repo.path, "removed debian/changelog")
> + ChangeLog.create(self.repo, upstream_tag_format=self.upstream_tag)
> + lines = file("debian/changelog").readlines()
> + assert """test-package (1.0-1) UNRELEASED; urgency=low\n""" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * removed debian/changelog\n""" not in lines
> +
> + def test_create_from_dch_main(self):
> + """Test dch.py like git-dch script does: must not include upstream
> log in debian/changelog"""
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + assert "test-package (1.0-1) UNRELEASED; urgency=low\n" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * added debian/control\n""" in lines
> +
> + def test_create_from_dch_main_with_auto(self):
> + """Test dch.py like git-dch script does: guess last commit"""
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-a"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + assert "test-package (1.0-1) UNRELEASED; urgency=low\n" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * added debian/control\n""" in lines
> +
> + def test_create_from_dch_main_with_snapshot(self):
> + """Test dch.py like git-dch script does: snashot mode"""
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-S"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + header = re.search(snap_header, lines[0])
> + self.assertEqual(header.lastindex, 1)
> + assert re.search(snap_mark + header.group(1), lines[2])
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * added debian/control\n""" in lines
> +
> + def test_create_from_dch_main_after_delete(self):
> + """Test dch.py like git-dch script does: debian/changelog was
> deleted"""
> + self.add_file("debian/changelog", "fake")
> + self.repo.remove_files("debian/changelog")
> + self.repo.commit_files(self.repo.path, "removed debian/changelog")
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + assert "test-package (1.0-1) UNRELEASED; urgency=low\n" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * removed debian/changelog\n""" not in lines
> +
> + def test_create_from_dch_main_with_auto_snapshot(self):
> + """Test dch.py like git-dch script does: guess last commit,
> snashot"""
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-a", "-S"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + header = re.search(snap_header, lines[0])
> + self.assertEqual(header.lastindex, 1)
> + assert re.search(snap_mark + header.group(1), lines[2])
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * added debian/control\n""" in lines
> +
> + def test_create_from_dch_main_with_auto_after_delete(self):
> + """Test dch.py like git-dch script does: guess last commit,
> debian/changelog was deleted"""
> + self.add_file("debian/changelog", "fake")
> + self.repo.remove_files("debian/changelog")
> + self.repo.commit_files(self.repo.path, "removed debian/changelog")
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-a"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + assert "test-package (1.0-1) UNRELEASED; urgency=low\n" in lines
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * removed debian/changelog\n""" not in lines
> +
> + def test_create_from_dch_main_with_snapshot_after_delete(self):
> + """Test dch.py like git-dch script does: snapshot, debian/changelog
> was deleted"""
> + self.add_file("debian/changelog", "fake")
> + self.repo.remove_files("debian/changelog")
> + self.repo.commit_files(self.repo.path, "removed debian/changelog")
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-S"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + header = re.search(snap_header, lines[0])
> + self.assertEqual(header.lastindex, 1)
> + assert re.search(snap_mark + header.group(1), lines[2])
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * removed debian/changelog\n""" not in lines
> +
> + def test_create_from_dch_main_with_auto_snapshot_after_delete(self):
> + """Test dch.py like git-dch script does: guess last commit,
> snapshot, debian/changelog was deleted"""
> + self.add_file("debian/changelog", "fake")
> + self.repo.remove_files("debian/changelog")
> + self.repo.commit_files(self.repo.path, "removed debian/changelog")
> + ret = dch.main(["--upstream-tag=%s" % self.upstream_tag,
> "--debian-branch=debian", "-a", "-S"])
> + self.assertEqual(ret, 0)
> + lines = file("debian/changelog").readlines()
> + header = re.search(snap_header, lines[0])
> + self.assertEqual(header.lastindex, 1)
> + assert re.search(snap_mark + header.group(1), lines[2])
> + assert """ * debian/changelog: generated by git-dch.\n""" in lines
> + assert """ * removed debian/changelog\n""" not in lines
> --
> 1.7.10
>
>
>
> Footnotes:
> [1] This make longer mail but as the rebasable signed tags are not
> meant to stay for ever, this make history available on the BTS.
>
> --
> Daniel Dehennin
> Récupérer ma clef GPG:
> gpg --keyserver pgp.mit.edu --recv-keys 0x7A6FE2DF
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]