[git-buildpackage] [PATCH master] gbp-dch: allow bug number format to be overridden

Jonathan Toppins jtoppins at cumulusnetworks.com
Mon Aug 24 16:35:52 CEST 2015


Some derivatives and non Debian exclusive projects don't use just
numbers for their bug numbers. gbp-dch should still be able to parse
these bug numbers and generate useful changelog entries. This doesn't
solve dpkg-parsechangelog but is a start.

	Examples of non-Debian bug numbers are:
		example change header

		Example: EX-12345

	Should produce the following change log:
		* example change header (Example: EX-12345)

This also helps in pulling CVE numbers simply by letting the user
modify the regex to something like 'cve-\d+-\d+'.

Signed-off-by: Jonathan Toppins <jtoppins at cumulusnetworks.com>
---
 Note: please keep me on the CC list as I am not subscribed to the mailing list.

 debian/git-buildpackage.zsh-completion |  2 ++
 docs/manpages/gbp-dch.sgml             | 13 +++++++++++++
 gbp.conf                               |  2 ++
 gbp/config.py                          |  3 +++
 gbp/dch.py                             |  7 ++-----
 gbp/scripts/dch.py                     |  1 +
 6 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/debian/git-buildpackage.zsh-completion b/debian/git-buildpackage.zsh-completion
index 1fc843e..a95beef 100644
--- a/debian/git-buildpackage.zsh-completion
+++ b/debian/git-buildpackage.zsh-completion
@@ -137,6 +137,7 @@ _gbp-dch () {
 		'(--meta --no-meta)--meta[Parse meta tags]' \
 		'(--meta --no-meta)--no-meta[Do not parse meta tags]' \
 		'--meta-closes=-[What meta tags to look for  to  generate  bug-closing  changelog entries]' \
+		'--meta-bugnumfmt=-[What bug number format to look for to generate bug-closing changelog entries]' \
 		'(--full --no-full)--full[Include the full commit message]' \
 		'(--full --no-full)--no-full[Do not include the full commit message]' \
 		'(--snapshot -S)'{-S,--snapshot}'[Create a snapshot release entry]' \
@@ -381,6 +382,7 @@ _gbp-dch () {
 		'(--meta --no-meta)--meta[Parse meta tags]' \
 		'(--meta --no-meta)--no-meta[Do not parse meta tags]' \
 		'--meta-closes=-[What meta tags to look for  to  generate  bug-closing  changelog entries]' \
+		'--meta-bugnumfmt=-[What bug number format to look for to generate bug-closing changelog entries]' \
 		'(--full --no-full)--full[Include the full commit message]' \
 		'(--full --no-full)--no-full[Do not include the full commit message]' \
 		'(--snapshot -S)'{-S,--snapshot}'[Create a snapshot release entry]' \
diff --git a/docs/manpages/gbp-dch.sgml b/docs/manpages/gbp-dch.sgml
index 888d987..8e02c50 100644
--- a/docs/manpages/gbp-dch.sgml
+++ b/docs/manpages/gbp-dch.sgml
@@ -46,6 +46,7 @@
       <arg><option>--[no-]full</option></arg>
       <arg><option>--[no-]meta</option></arg>
       <arg><option>--meta-closes=bug-close-tags</option></arg>
+      <arg><option>--meta-bugnumfmt=bug-number-format</option></arg>
       <arg><option>--snapshot-number=</option><replaceable>expression</replaceable></arg>
       <arg><option>--id-length=</option><replaceable>number</replaceable></arg>
       <arg><option>--git-log=</option><replaceable>git-log-options</replaceable></arg>
@@ -183,6 +184,18 @@
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><option>--meta-bugnumfmt=</option><replaceable>bug-number-format</replaceable>
+        </term>
+        <listitem>
+          <para>
+          What regular expression should be used for parse out the bug number.
+          The default is '(?:bug|issue)?\#?\s?\d+'. Note: the regex should
+          suppress all portions of the bug number that are not wanted using
+          "(?:)", see pyhton regex manual for details.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><option>--[no-]full</option>
         </term>
         <listitem>
diff --git a/gbp.conf b/gbp.conf
index 43fc36d..222656b 100644
--- a/gbp.conf
+++ b/gbp.conf
@@ -96,6 +96,8 @@
 #meta = False
 # what tags to look for to generate bug-closing changelog entries:
 #meta-closes = Closes|LP
+# what regex should be used to parse the bug number
+#meta-bugnumfmt = '(?:bug|issue)?\#?\s?\d+'
 # include the full commit message in the changelog:
 #full = True
 # ignore Signed-off-by: lines:
diff --git a/gbp/config.py b/gbp/config.py
index 3b483c0..afbd2c4 100644
--- a/gbp/config.py
+++ b/gbp/config.py
@@ -125,6 +125,7 @@ class GbpOptionParser(OptionParser):
                  'ignore-branch'   : 'False',
                  'meta'            : 'True',
                  'meta-closes'     : 'Closes|LP',
+                 'meta-bugnumfmt'  : r'(?:bug|issue)?\#?\s?\d+',
                  'full'            : 'False',
                  'id-length'       : '0',
                  'git-author'      : 'False',
@@ -212,6 +213,8 @@ class GbpOptionParser(OptionParser):
                   "Parse meta tags in commit messages, default is '%(meta)s'",
              'meta-closes':
                   "Meta tags for the bts close commands, default is '%(meta-closes)s'",
+             'meta-bugnumfmt':
+                  "Meta bug number format, default is '%(meta-bugnumfmt)s'",
              'ignore-new':
                   "Build with uncommited changes in the source tree, default is '%(ignore-new)s'",
              'ignore-branch':
diff --git a/gbp/dch.py b/gbp/dch.py
index 49b1020..c092c28 100644
--- a/gbp/dch.py
+++ b/gbp/dch.py
@@ -45,17 +45,14 @@ def filter_ignore_rx_matches(lines, options):
     else:
         return lines
 
-
-_bug_r = r'(?:bug|issue)?\#?\s?\d+'
-_bug_re = re.compile(_bug_r, re.I)
-
 def extract_bts_cmds(lines, opts):
     """Return a dictionary of the bug tracking system commands
     contained in the the given lines.  i.e. {'closed' : [1], 'fixed':
     [3, 4]}.  Right now, this will only notice a single directive
     clause on a line.  Also return all of the lines that do not
     contain bug tracking system commands."""
-    bts_rx = re.compile(r'(?P<bts>%s):\s+%s' % (opts.meta_closes, _bug_r), re.I)
+    _bug_re = re.compile(opts.meta_bugnumfmt, re.I)
+    bts_rx = re.compile(r'(?P<bts>%s):\s+%s' % (opts.meta_closes, opts.meta_bugnumfmt), re.I)
     commands = {}
     other_lines = []
     for line in lines:
diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py
index e3f7c7c..cbd66ea 100644
--- a/gbp/scripts/dch.py
+++ b/gbp/scripts/dch.py
@@ -358,6 +358,7 @@ def build_parser(name):
     version_group.add_boolean_config_file_option(option_name="git-author", dest="use_git_author")
     commit_group.add_boolean_config_file_option(option_name="meta", dest="meta")
     commit_group.add_config_file_option(option_name="meta-closes", dest="meta_closes")
+    commit_group.add_config_file_option(option_name="meta-bugnumfmt", dest="meta_bugnumfmt")
     commit_group.add_boolean_config_file_option(option_name="full", dest="full")
     commit_group.add_config_file_option(option_name="id-length", dest="idlen",
                       help="include N digits of the commit id in the changelog entry, default is '%(id-length)s'",
-- 
2.1.4



More information about the git-buildpackage mailing list