Hi, On Tue, May 15, 2012 at 08:21:30AM +0200, Daniel Dehennin wrote: > Tags: patch > <#secure method=pgpmime mode=sign> > Hello, > > I made a new version of the patch which include methods documentations > and avoid passing all the options to ChangeLog.add_section(). > > Following are: > > - diff to previous version: git diff > dad/move-spawn_dch-to-ChangeLog..dad/move-spawn_dch-to-ChangeLog-1 > - pull request > - patch for review: full patch of the new version
Thanks! Please don't stack patches that fixup previous versions but send a new version instead since it makes reviewing things much harder otherwise. Cheers, -- Guido > > Regards. > > Diff to previous version: > ========================= > > diff --git a/gbp/deb/changelog.py b/gbp/deb/changelog.py > index 3ab259d..7ad2804 100644 > --- a/gbp/deb/changelog.py > +++ b/gbp/deb/changelog.py > @@ -156,12 +156,21 @@ class ChangeLog(object): > Spawn dch > > @param author: committers name > + @type author: C{str} > @param email: committers email > + @type email: C{str} > @param newversion: start a new version > + @type newversion: C{bool} > @param version: the verion to use > + @type version: C{str} > @param release: finalize changelog for releaze > + @type release: C{bool} > @param distribution: distribution to use > + @type distribution: C{str} > @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > """ > distopt = "" > versionopt = "" > @@ -191,7 +200,7 @@ class ChangeLog(object): > args.append('"[[[insert-git-dch-commit-message-here]]]"') > else: > args.append('""') > - dch = Command('dch', args, shell=True, extra_env=env) > + dch = Command('dch', args, extra_env=env) > dch.call([]) > if msg: > old_cl = open("debian/changelog", "r") > @@ -205,15 +214,47 @@ class ChangeLog(object): > print >> new_cl, line, > os.rename("debian/changelog.bak", "debian/changelog") > > - def add_entry(self, msg, author, email, dch_options): > - """Add a single changelog entry""" > + def add_entry(self, msg, author=None, email=None, dch_options=[]): > + """Add a single changelog entry > + > + @param msg: log message to add > + @type msg: C{str} > + @param author: name of the author of the log message > + @type author: C{str} > + @param email: email of the author of the log message > + @type email: C{str} > + @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > + """ > self.spawn_dch(msg=msg, author=author, email=email, > dch_options=dch_options) > > - def add_section(self, msg, distribution, repo, options, > - author=None, email=None, version={}, dch_options=''): > - """Add a new section to the changelog""" > + def add_section(self, msg, distribution, repo, upstream_tag_format='', > + author=None, email=None, version={}, dch_options=[]): > + """Add a new section to the changelog > + > + @param msg: log message to add > + @type msg: C{str} > + @param distribution: distribution to set for the new changelog entry > + @type distribution: C{str} > + @param repo: git repository we are operating on > + @type repo: C{gbp.deb.git.DebianRepository} > + @param upstream_tag_format: format use to find upstream tag > + @type upstream_tag_format: C{str} > + @param author: name of the author of the log message > + @type author: C{str} > + @param email: email of the author of the log message > + @type email: C{str} > + @param version: version to set for the new changelog entry > + @param version: C{dict} > + @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > + """ > if not version and not self.is_native(): > - v = repo.guess_version_from_upstream(options.upstream_tag, self) > + v = repo.guess_version_from_upstream(upstream_tag_format, self) > if v: > version['version'] = v > self.spawn_dch(msg=msg, newversion=True, version=version, > author=author, > diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py > index 4eb32ed..ee1c075 100644 > --- a/gbp/scripts/dch.py > +++ b/gbp/scripts/dch.py > @@ -391,7 +391,7 @@ def main(argv): > email=commit_email, > dch_options=dch_options, > repo=repo, > - options=options) > + upstream_tag_format=options.upstream_tag) > # Adding a section only needs to happen once. > add_section = False > else: > @@ -410,7 +410,7 @@ def main(argv): > version=version_change, > dch_options=dch_options, > repo=repo, > - options=options) > + upstream_tag_format=options.upstream_tag) > > fixup_trailer(repo, git_author=options.git_author, > dch_options=dch_options) > > > Pull request: > ============= > > The following changes since commit c57d4af675910ec151cf982532db0f877aef413f: > > gbp.git.repository: Add a "git merge-base" wrapper (2012-05-14 13:16:15 > +0200) > > are available in the git repository at: > > git://git.baby-gnu.org/git-buildpackage > tags/dad/move-spawn_dch-to-ChangeLog-1 > > for you to fetch changes up to 69cbf3d88106a41839fcd35bbd0c4a5d0d3442ee: > > Move spawn_dch, add_changelog_entry and add_changelog_section from > gbp.scripts.dch to gbp.deb.changelog.ChangeLog. (2012-05-15 08:09:42 +0200) > > ---------------------------------------------------------------- > Add methods documentation. > > ChangeLog.add_section(): only use upstream_tag_format option, pass it > directly instead of all the options. > > ChangeLog.spawn_dch(): do not use shell with > gbp.command_wrappers.Command(). > > ---------------------------------------------------------------- > Daniel Dehennin (1): > Move spawn_dch, add_changelog_entry and add_changelog_section from > gbp.scripts.dch to gbp.deb.changelog.ChangeLog. > > gbp/deb/changelog.py | 111 +++++++++++++++++++++++++++++ > gbp/deb/git.py | 17 +++++ > gbp/scripts/dch.py | 138 > ++++++------------------------------ > tests/03_test_dch_guess_version.py | 11 +-- > 4 files changed, 151 insertions(+), 126 deletions(-) > > Patch for review: > ================= > > From 69cbf3d88106a41839fcd35bbd0c4a5d0d3442ee Mon Sep 17 00:00:00 2001 > From: Daniel Dehennin <daniel.dehen...@baby-gnu.org> > Date: Mon, 14 May 2012 18:15:06 +0200 > Subject: [PATCH] Move spawn_dch, add_changelog_entry and > add_changelog_section from gbp.scripts.dch to > gbp.deb.changelog.ChangeLog. > > This require the move of gbp.scripts.guess_version_from_upstream to > gbp.deb.git.DebianGitRepository. > > spawn_dch use gbp.command.wrappers.Command, this require the change of > dch_options from string to list. > > * tests/03_test_dch_guess_version.py: Make MockGitRepository inherits > from DebianGitRepository since guess_version_from_upstream became a > method of DebianGitRepository. > Update calls to guess_version_from_upstream accordingly. > > * gbp/deb/changelog.py (ChangeLog.spawn_dch): static method imported from > gbp.scripts.dch and converted to gbp.command_wrappers.Command. > (add_entry): New method imported from > gbp.scripts.dch.add_changelog_entry. > (add_section): New method imported from > gbp.scripts.dch.add_changelog_entry. Replace options argument by direct > upstream_tag_format. > > * gbp/deb/git.py: Update imports. > (guess_version_from_upstream): New method imported from > gbp.scripts.dch. Remove the logging. Caller is responsible of handling > possible GitRepositoryError exception. > > * gbp/scripts/dch.py: Remove useless import. > Remove unused functions. > (process_options): dch_options is now a list. > (main): Update calls to spawn_dch() to ChangeLog.spawn_dch(). > Update calls to add_changelog_entry() to ChangeLog.add_entry(). > Update calls to add_changelog_section() to ChangeLog.add_section(). > Catch CommandExecFailed exception. > --- > gbp/deb/changelog.py | 111 +++++++++++++++++++++++++++++ > gbp/deb/git.py | 17 +++++ > gbp/scripts/dch.py | 138 > ++++++------------------------------ > tests/03_test_dch_guess_version.py | 11 +-- > 4 files changed, 151 insertions(+), 126 deletions(-) > > diff --git a/gbp/deb/changelog.py b/gbp/deb/changelog.py > index b8c10b8..7ad2804 100644 > --- a/gbp/deb/changelog.py > +++ b/gbp/deb/changelog.py > @@ -19,6 +19,7 @@ > import email > import os > import subprocess > +from gbp.command_wrappers import Command > > class NoChangeLogError(Exception): > """No changelog found""" > @@ -148,3 +149,113 @@ class ChangeLog(object): > """ > return self._cp['Date'] > > + @staticmethod > + def spawn_dch(msg=[], author=None, email=None, newversion=False, > version=None, > + release=False, distribution=None, dch_options=[]): > + """ > + Spawn dch > + > + @param author: committers name > + @type author: C{str} > + @param email: committers email > + @type email: C{str} > + @param newversion: start a new version > + @type newversion: C{bool} > + @param version: the verion to use > + @type version: C{str} > + @param release: finalize changelog for releaze > + @type release: C{bool} > + @param distribution: distribution to use > + @type distribution: C{str} > + @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > + """ > + distopt = "" > + versionopt = "" > + env = "" > + args = ['--no-auto-nmu'] > + if newversion: > + if version: > + try: > + args.append(version['increment']) > + except KeyError: > + args.append('--newversion=%s' % version['version']) > + else: > + args.append('-i') > + elif release: > + args.append("--release --no-force-save-on-release") > + msg = None > + > + if author and email: > + env = {'DEBFULLNAME': author, 'DEBEMAIL': email} > + > + if distribution: > + args.append("--distribution=%s" % distribution) > + > + args.extend(dch_options) > + args.append('--') > + if msg: > + args.append('"[[[insert-git-dch-commit-message-here]]]"') > + else: > + args.append('""') > + dch = Command('dch', args, extra_env=env) > + dch.call([]) > + if msg: > + old_cl = open("debian/changelog", "r") > + new_cl = open("debian/changelog.bak", "w") > + for line in old_cl: > + if line == " * [[[insert-git-dch-commit-message-here]]]\n": > + print >> new_cl, " * " + msg[0] > + for line in msg[1:]: > + print >> new_cl, " " + line > + else: > + print >> new_cl, line, > + os.rename("debian/changelog.bak", "debian/changelog") > + > + def add_entry(self, msg, author=None, email=None, dch_options=[]): > + """Add a single changelog entry > + > + @param msg: log message to add > + @type msg: C{str} > + @param author: name of the author of the log message > + @type author: C{str} > + @param email: email of the author of the log message > + @type email: C{str} > + @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > + """ > + self.spawn_dch(msg=msg, author=author, email=email, > dch_options=dch_options) > + > + def add_section(self, msg, distribution, repo, upstream_tag_format='', > + author=None, email=None, version={}, dch_options=[]): > + """Add a new section to the changelog > + > + @param msg: log message to add > + @type msg: C{str} > + @param distribution: distribution to set for the new changelog entry > + @type distribution: C{str} > + @param repo: git repository we are operating on > + @type repo: C{gbp.deb.git.DebianRepository} > + @param upstream_tag_format: format use to find upstream tag > + @type upstream_tag_format: C{str} > + @param author: name of the author of the log message > + @type author: C{str} > + @param email: email of the author of the log message > + @type email: C{str} > + @param version: version to set for the new changelog entry > + @param version: C{dict} > + @param dch_options: options passed verbatim to dch > + @type dch_options: C{list} > + @return: return code of dch subprocess > + @rtype: C{int} > + """ > + if not version and not self.is_native(): > + v = repo.guess_version_from_upstream(upstream_tag_format, self) > + if v: > + version['version'] = v > + self.spawn_dch(msg=msg, newversion=True, version=version, > author=author, > + email=email, distribution=distribution, > dch_options=dch_options) > diff --git a/gbp/deb/git.py b/gbp/deb/git.py > index 3f99805..b7acff5 100644 > --- a/gbp/deb/git.py > +++ b/gbp/deb/git.py > @@ -19,6 +19,7 @@ > import re > from gbp.git import GitRepository, GitRepositoryError > from gbp.deb.pristinetar import PristineTar > +from gbp.deb import compare_versions > > class DebianGitRepository(GitRepository): > """A git repository that holds the source of a Debian package""" > @@ -117,6 +118,22 @@ class DebianGitRepository(GitRepository): > return version > return None > > + def guess_version_from_upstream(self, upstream_tag_format, cp): > + """ > + Guess the version based on the latest version on the upstream branch > + """ > + pattern = upstream_tag_format % dict(version='*') > + tag = self.find_tag('HEAD', pattern=pattern) > + version = self.tag_to_version(tag, upstream_tag_format) > + if 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: > + return "%s-1" % version > + return None > + > @property > def pristine_tar_branch(self): > """ > diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py > index 14dff29..ee1c075 100644 > --- a/gbp/scripts/dch.py > +++ b/gbp/scripts/dch.py > @@ -28,7 +28,6 @@ import gbp.dch as dch > import gbp.log > from gbp.config import GbpOptionParserDebian, GbpOptionGroup > from gbp.errors import GbpError > -from gbp.deb import compare_versions > from gbp.deb.git import GitRepositoryError, DebianGitRepository > from gbp.deb.changelog import ChangeLog, NoChangeLogError > > @@ -36,102 +35,6 @@ user_customizations = {} > snapshot_re = re.compile("\s*\*\* SNAPSHOT build > @(?P<commit>[a-z0-9]+)\s+\*\*") > > > -def system(cmd): > - try: > - gbpc.Command(cmd, shell=True)() > - except gbpc.CommandExecFailed: > - raise GbpError > - > - > -def spawn_dch(msg=[], author=None, email=None, newversion=False, > version=None, > - release=False, distribution=None, dch_options=''): > - """ > - Spawn dch > - > - @param author: committers name > - @param email: committers email > - @param newversion: start a new version > - @param version: the verion to use > - @param release: finalize changelog for releaze > - @param distribution: distribution to use > - @param dch_options: options passed verbatim to dch > - """ > - distopt = "" > - versionopt = "" > - env = "" > - > - if newversion: > - if version: > - try: > - versionopt = version['increment'] > - except KeyError: > - versionopt = '--newversion=%s' % version['version'] > - else: > - versionopt = '-i' > - elif release: > - versionopt = "--release --no-force-save-on-release" > - msg = None > - > - if author and email: > - env = """DEBFULLNAME="%s" DEBEMAIL="%s" """ % (author, email) > - > - if distribution: > - distopt = "--distribution=%s" % distribution > - > - cmd = '%(env)s dch --no-auto-nmu %(distopt)s %(versionopt)s > %(dch_options)s ' % locals() > - if msg: > - cmd += '-- "[[[insert-git-dch-commit-message-here]]]"' > - else: > - cmd += '-- ""' > - system(cmd) > - if msg: > - old_cl = open("debian/changelog", "r") > - new_cl = open("debian/changelog.bak", "w") > - for line in old_cl: > - if line == " * [[[insert-git-dch-commit-message-here]]]\n": > - print >> new_cl, " * " + msg[0] > - for line in msg[1:]: > - print >> new_cl, " " + line > - else: > - print >> new_cl, line, > - os.rename("debian/changelog.bak", "debian/changelog") > - > - > -def add_changelog_entry(msg, author, email, dch_options): > - """Add a single changelog entry""" > - spawn_dch(msg=msg, author=author, email=email, dch_options=dch_options) > - > - > -def guess_version_from_upstream(repo, upstream_tag_format, cp): > - """ > - Guess the version based on the latest version on the upstream branch > - """ > - pattern = upstream_tag_format % dict(version='*') > - try: > - tag = repo.find_tag('HEAD', pattern=pattern) > - version = repo.tag_to_version(tag, upstream_tag_format) > - if version: > - gbp.log.debug("Found upstream version %s." % version) > - if cp.has_epoch(): > - version = "%s:%s" % (cp.epoch, version) > - if compare_versions(version, cp.version) > 0: > - return "%s-1" % version > - except GitRepositoryError: > - gbp.log.debug("No tag found matching pattern %s." % pattern) > - return None > - > - > -def add_changelog_section(msg, distribution, repo, options, cp, > - author=None, email=None, version={}, > dch_options=''): > - """Add a new section to the changelog""" > - if not version and not cp.is_native(): > - v = guess_version_from_upstream(repo, options.upstream_tag, cp) > - if v: > - version['version'] = v > - spawn_dch(msg=msg, newversion=True, version=version, author=author, > - email=email, distribution=distribution, > dch_options=dch_options) > - > - > def get_author_email(repo, use_git_config): > """Get author and email from git configuration""" > author = email = None > @@ -153,7 +56,7 @@ def fixup_trailer(repo, git_author, dch_options): > creating the changelog > """ > author, email = get_author_email(repo, git_author) > - spawn_dch(msg='', author=author, email=email, dch_options=dch_options) > + ChangeLog.spawn_dch(msg='', author=author, email=email, > dch_options=dch_options) > > > def snapshot_version(version): > @@ -294,15 +197,16 @@ def process_options(options, parser): > if options.since and options.auto: > parser.error("'--since' and '--auto' are incompatible options") > > + dch_options = [] > if options.multimaint_merge: > - dch_options = "--multimaint-merge" > + dch_options.append("--multimaint-merge") > else: > - dch_options = "--nomultimaint-merge" > + dch_options.append("--nomultimaint-merge") > > if options.multimaint: > - dch_options += " --multimaint" > + dch_options.append(" --multimaint") > else: > - dch_options += " --nomultimaint" > + dch_options.append(" --nomultimaint") > > get_customizations(options.customization_file) > return dch_options > @@ -481,18 +385,17 @@ def main(argv): > if add_section: > # Add a section containing just this message (we can't > # add an empty section with dch) > - add_changelog_section(distribution="UNRELEASED", > msg=commit_msg, > - version=version_change, > - author=commit_author, > - email=commit_email, > - dch_options=dch_options, > - repo=repo, > - options=options, > - cp=cp) > + cp.add_section(distribution="UNRELEASED", msg=commit_msg, > + version=version_change, > + author=commit_author, > + email=commit_email, > + dch_options=dch_options, > + repo=repo, > + upstream_tag_format=options.upstream_tag) > # Adding a section only needs to happen once. > add_section = False > else: > - add_changelog_entry(commit_msg, commit_author, commit_email, > dch_options) > + cp.add_entry(commit_msg, commit_author, commit_email, > dch_options) > > > # Show a message if there were no commits (not even ignored > @@ -503,12 +406,11 @@ def main(argv): > if add_section: > # If we end up here, then there were no commits to include, > # so we put a dummy message in the new section. > - add_changelog_section(distribution="UNRELEASED", > msg=["UNRELEASED"], > - version=version_change, > - dch_options=dch_options, > - repo=repo, > - options=options, > - cp=cp) > + cp.add_section(distribution="UNRELEASED", msg=["UNRELEASED"], > + version=version_change, > + dch_options=dch_options, > + repo=repo, > + upstream_tag_format=options.upstream_tag) > > fixup_trailer(repo, git_author=options.git_author, > dch_options=dch_options) > @@ -533,7 +435,7 @@ def main(argv): > repo.commit_files([changelog], msg) > gbp.log.info("Changelog has been committed for version %s" % > version) > > - except (GbpError, GitRepositoryError, NoChangeLogError), err: > + except (CommandExecFailed, GbpError, GitRepositoryError, > NoChangeLogError), err: > if len(err.__str__()): > gbp.log.err(err) > ret = 1 > diff --git a/tests/03_test_dch_guess_version.py > b/tests/03_test_dch_guess_version.py > index d954459..ba80a3b 100644 > --- a/tests/03_test_dch_guess_version.py > +++ b/tests/03_test_dch_guess_version.py > @@ -4,12 +4,11 @@ > > import unittest > > -from gbp.scripts import dch > from gbp.errors import GbpError > from gbp.deb.changelog import ChangeLog > from gbp.deb.git import DebianGitRepository > > -class MockGitRepository(object): > +class MockGitRepository(DebianGitRepository): > def __init__(self, upstream_tag): > self.upstream_tag = upstream_tag > > @@ -37,18 +36,14 @@ class TestGuessVersionFromUpstream(unittest.TestCase): > """Guess the new version from the upstream tag""" > repo = MockGitRepository(upstream_tag='upstream/1.1') > cp = MockedChangeLog('1.0-1') > - guessed = dch.guess_version_from_upstream(repo, > - 'upstream/%(version)s', > - cp) > + guessed = repo.guess_version_from_upstream('upstream/%(version)s', > cp) > self.assertEqual('1.1-1', guessed) > > def test_guess_epoch(self): > """Check if we picked up the epoch correctly (#652366)""" > repo = MockGitRepository(upstream_tag='upstream/1.1') > cp = MockedChangeLog('1:1.0-1') > - guessed = dch.guess_version_from_upstream(repo, > - 'upstream/%(version)s', > - cp) > + guessed = repo.guess_version_from_upstream('upstream/%(version)s', > cp) > self.assertEqual('1:1.1-1', guessed) > > > -- > 1.7.10 > > -- > Daniel Dehennin > Récupérer ma clef GPG: > gpg --keyserver pgp.mit.edu --recv-keys 0x7A6FE2DF > > -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org