summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--docs/manpages/gbp-buildpackage-rpm.xml17
-rw-r--r--gbp/config.py4
-rw-r--r--gbp/scripts/buildpackage_rpm.py5
-rw-r--r--tests/component/rpm/test_buildpackage_rpm.py18
4 files changed, 44 insertions, 0 deletions
diff --git a/docs/manpages/gbp-buildpackage-rpm.xml b/docs/manpages/gbp-buildpackage-rpm.xml
index 251bf528..9f8f4381 100644
--- a/docs/manpages/gbp-buildpackage-rpm.xml
+++ b/docs/manpages/gbp-buildpackage-rpm.xml
@@ -63,6 +63,7 @@
<arg><option>--git-arch</option>=<replaceable>ARCHITECTURE</replaceable></arg>
<arg><option>--git-mock-options</option>=<replaceable>OPTIONS</replaceable></arg>
<arg><option>--git-mock-root</option>=<replaceable>ROOT</replaceable></arg>
+ <arg><option>--git-spec-vcs-tag</option>=<replaceable>TAG_FORMAT</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
@@ -610,6 +611,22 @@
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--git-spec-vcs-tag</option>=<replaceable>TAG_FORMAT</replaceable>
+ </term>
+ <listitem>
+ <para>
+ &gbp-buildpackage-rpm; always automatically sets/updates the 'VCS:'
+ tag in the spec file after exporting. This option defines the format
+ string for the 'VCS:' tag. An empty value causes no 'VCS:' tag to be
+ inserted and possible old 'VCS:' tag to be removed. Otherwise, the
+ old 'VCS:' tag is updated or a new 'VCS:' tag is added if one does
+ not exist. In the format string '%(tagname)s' expands to the long tag
+ name (from git-describe) and '%(commit)s' expans to the sha1 of the
+ exported commit.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
diff --git a/gbp/config.py b/gbp/config.py
index 08293d34..dceb011e 100644
--- a/gbp/config.py
+++ b/gbp/config.py
@@ -787,6 +787,7 @@ class GbpOptionParserRpm(GbpOptionParser):
'changelog-revision': '',
'spawn-editor': 'always',
'editor-cmd': 'vim',
+ 'spec-vcs-tag': '',
})
help = dict(GbpOptionParser.help)
@@ -848,6 +849,9 @@ class GbpOptionParserRpm(GbpOptionParser):
'git-author':
"Use name and email from git-config for the changelog header, "
"default is '%(git-author)s'",
+ 'spec-vcs-tag':
+ "Set/update the 'VCS:' tag in the spec file, empty value "
+ "removes the tag entirely, default is '%(spec-vcs-tag)s'",
})
def _warn_old_gbp_conf(self, gbp_conf):
diff --git a/gbp/scripts/buildpackage_rpm.py b/gbp/scripts/buildpackage_rpm.py
index 85024973..16b5eb56 100644
--- a/gbp/scripts/buildpackage_rpm.py
+++ b/gbp/scripts/buildpackage_rpm.py
@@ -430,6 +430,7 @@ def build_parser(name, prefix=None, git_treeish=None):
dest="packaging_dir")
export_group.add_config_file_option(option_name="spec-file",
dest="spec_file")
+ export_group.add_config_file_option("spec-vcs-tag", dest="spec_vcs_tag")
return parser
@@ -615,6 +616,10 @@ def main(argv):
'GBP_SHA1': sha})()
else:
vcs_info = get_vcs_info(repo, tree)
+
+ # Put 'VCS:' tag to .spec
+ spec.set_tag('VCS', None, format_str(options.spec_vcs_tag, vcs_info))
+ spec.write_spec_file()
except KeyboardInterrupt:
retval = 1
gbp.log.err("Interrupted. Aborting.")
diff --git a/tests/component/rpm/test_buildpackage_rpm.py b/tests/component/rpm/test_buildpackage_rpm.py
index 0f50ad14..78e9ff37 100644
--- a/tests/component/rpm/test_buildpackage_rpm.py
+++ b/tests/component/rpm/test_buildpackage_rpm.py
@@ -605,3 +605,21 @@ class TestGbpRpm(RpmRepoTestBase):
# Packaging dir should be taken from spec file if it is defined
eq_(mock_gbp(['--git-packaging-dir=foo',
'--git-spec-file=packaging/gbp-test-native.spec']), 0)
+
+ def test_option_spec_vcs_tag(self):
+ """Test the --git-spec-vcs-tag cmdline option"""
+ repo = self.init_test_repo('gbp-test-native')
+
+ eq_(mock_gbp(['--git-spec-vcs-tag=foobar-%(commit)s']), 0)
+ sha1 = repo.rev_parse('HEAD')
+ num_tags = 0
+ with open('../rpmbuild/SPECS/gbp-test-native.spec') as fobj:
+ for line in fobj.readlines():
+ if line.startswith('VCS: '):
+ ok_(re.match(r'VCS:\s+foobar-%s\n$' % sha1, line))
+ num_tags += 1
+ eq_(num_tags, 1)
+
+ # Test invalid key
+ eq_(mock_gbp(['--git-spec-vcs-tag=%(invalid-key)s']), 1)
+ self._check_log(-1, r".*Failed to format %\(invalid-key\)s")