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

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

Reply via email to