rpm helpers: support updating tags in the spec file
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Fri, 30 Nov 2012 17:11:35 +0000 (19:11 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Thu, 5 Jun 2014 11:20:06 +0000 (14:20 +0300)
Currently only the 'VCS' tag is supported.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp/rpm/__init__.py
tests/test_rpm.py
tests/test_rpm_data/rpmbuild/SPECS/gbp-test2.spec
tests/test_rpm_data/rpmbuild/SPECS/gbp-test2.spec.orig [new file with mode: 0644]
tests/test_rpm_data/specs/gbp-test-reference2.spec [new file with mode: 0644]
tests/test_rpm_data/specs/gbp-test2-reference2.spec [new file with mode: 0644]

index 5418976a550ea35da61b1807bcbff74dc2da3465..05b40e3cfd95c35d27615cdcc95cd2da720c8a27 100644 (file)
@@ -339,11 +339,15 @@ class SpecFile(object):
                                      'tag_line': lineobj}
                         self.patches[tagnum] = new_patch
                     ret['lastpatchtag'] = lineobj
-                # 'Name:' and 'Packager:' tags
+                # Other tags
                 elif tagname == 'name':
                     ret['nametag'] = lineobj
                 elif tagname == 'packager':
                     ret['packagertag'] = lineobj
+                elif tagname == 'vcs':
+                    ret['vcstag'] = lineobj
+                elif tagname == 'release':
+                    ret['releasetag'] = lineobj
                 continue
 
             # Parse special macros
@@ -386,6 +390,26 @@ class SpecFile(object):
                     ret['prepmacro'] = lineobj
         return ret
 
+    def set_tag(self, tag, value):
+        """Update a tag in spec file content"""
+        loc = self.parse_content()
+
+        key = tag.lower() + "tag"
+        if tag.lower() == 'vcs':
+            if value:
+                text = '%-12s%s\n' % ('VCS:', value)
+                if key in loc:
+                    gbp.log.info("Updating '%s' tag in spec" % tag)
+                    loc[key].set_data(text)
+                else:
+                    gbp.log.info("Adding '%s' tag to spec" % tag)
+                    self.content.insert_after(loc['releasetag'], text)
+            elif key in loc:
+                gbp.log.info("Removing '%s' tag from spec" % tag)
+                self.content.delete(loc[key])
+        else:
+            raise GbpError("Setting '%s:' tag not supported")
+
     def update_patches(self, patchfilenames):
         """
         Update spec with new patch tags and patch macros.
index a04bce3eb258ed8f958769fcb2333bb6d9817735..7f0181957b85fe5580b4345bcd31cb936f45a636 100644 (file)
@@ -154,11 +154,27 @@ class TestSpecFile(object):
         spec.write_spec_file()
         assert filecmp.cmp(tmp_spec, reference_spec) is True
 
-        # Test a second spec file
+        # Test adding the VCS tag
+        reference_spec = os.path.join(SPEC_DIR, 'gbp-test-reference2.spec')
+        spec.set_tag('vcs', 'myvcstag')
+        spec.write_spec_file()
+        assert filecmp.cmp(tmp_spec, reference_spec) is True
+
+    def test_update_spec2(self):
+        """Another test for spec autoupdate functionality"""
+        tmp_spec = os.path.join(self.tmpdir, 'gbp-test.spec')
         shutil.copy2(os.path.join(SPEC_DIR, 'gbp-test2.spec'), tmp_spec)
-        reference_spec = os.path.join(SPEC_DIR, 'gbp-test2-reference.spec')
+
+        reference_spec = os.path.join(SPEC_DIR, 'gbp-test2-reference2.spec')
         spec = SpecFile(tmp_spec)
         spec.update_patches(['new.patch'])
+        spec.set_tag('vcs', 'myvcstag')
+        spec.write_spec_file()
+        assert filecmp.cmp(tmp_spec, reference_spec) is True
+
+        # Test removing the VCS tag
+        reference_spec = os.path.join(SPEC_DIR, 'gbp-test2-reference.spec')
+        spec.set_tag('vcs', '')
         spec.write_spec_file()
         assert filecmp.cmp(tmp_spec, reference_spec) is True
 
index ffae7e999aa0849b03a6ca78b02562f760bb89d9..4180a87788d2106fd6263f0483225fff53efdfa4 100644 (file)
@@ -13,6 +13,7 @@ Patch:      my.patch
 Patch10:    my2.patch
 Patch20:    my3.patch
 Packager:   Markus Lehtonen <markus.lehtonen@linux.intel.com>
+VCS:        myoldvcstag
 
 %description
 Package for testing the RPM functionality of git-buildpackage.
diff --git a/tests/test_rpm_data/rpmbuild/SPECS/gbp-test2.spec.orig b/tests/test_rpm_data/rpmbuild/SPECS/gbp-test2.spec.orig
new file mode 100644 (file)
index 0000000..ffae7e9
--- /dev/null
@@ -0,0 +1,46 @@
+Name:       gbp-test2
+Summary:    Test package 2 for git-buildpackage
+Epoch:      2
+Version:    3.0
+Release:    0
+Group:      Development/Libraries
+License:    GPLv2
+Source10:   ftp://ftp.host.com/%{name}-%{version}.tar.gz
+Source:     foo.txt
+Source20:   bar.tar.gz
+# Gbp-Ignore-Patches: 0
+Patch:      my.patch
+Patch10:    my2.patch
+Patch20:    my3.patch
+Packager:   Markus Lehtonen <markus.lehtonen@linux.intel.com>
+
+%description
+Package for testing the RPM functionality of git-buildpackage.
+
+
+%prep
+%setup -T -n %{name}-%{version} -c -a 10
+
+%patch
+%patch -P 10 -p1
+
+echo "Do things"
+
+# Gbp-Patch-Macros
+
+%build
+make
+
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/%{_datadir}/%{name}
+cp -R * %{buildroot}/%{_datadir}/%{name}
+install %{SOURCE0} %{buildroot}/%{_datadir}/%{name}
+
+
+
+%files
+%defattr(-,root,root,-)
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}
diff --git a/tests/test_rpm_data/specs/gbp-test-reference2.spec b/tests/test_rpm_data/specs/gbp-test-reference2.spec
new file mode 100644 (file)
index 0000000..f006fc7
--- /dev/null
@@ -0,0 +1,44 @@
+Name:       gbp-test
+Summary:    Test package for git-buildpackage
+Version:    1.0
+Release:    1
+VCS:        myvcstag
+Group:      Development/Libraries
+License:    GPLv2
+Source:     %{name}-%{version}.tar.bz2
+Source1:    foo.txt
+Source20:   bar.tar.gz
+# Gbp-Ignore-Patches: 0
+Patch0:     my.patch
+# Patches auto-generated by git-buildpackage:
+Patch1:     new.patch
+
+
+%description
+Package for testing the RPM functionality of git-buildpackage.
+
+
+%prep
+%setup -n %{name} -a 20
+
+%patch0
+# new.patch
+%patch1 -p1
+
+
+%build
+make
+
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/%{_datadir}/%{name}
+cp -R * %{buildroot}/%{_datadir}/%{name}
+install %{SOURCE0} %{buildroot}/%{_datadir}/%{name}
+
+
+
+%files
+%defattr(-,root,root,-)
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}
diff --git a/tests/test_rpm_data/specs/gbp-test2-reference2.spec b/tests/test_rpm_data/specs/gbp-test2-reference2.spec
new file mode 100644 (file)
index 0000000..02356d0
--- /dev/null
@@ -0,0 +1,48 @@
+Name:       gbp-test2
+Summary:    Test package 2 for git-buildpackage
+Epoch:      2
+Version:    3.0
+Release:    0
+Group:      Development/Libraries
+License:    GPLv2
+Source10:   ftp://ftp.host.com/%{name}-%{version}.tar.gz
+Source:     foo.txt
+Source20:   bar.tar.gz
+# Gbp-Ignore-Patches: 0
+Patch:      my.patch
+# Patches auto-generated by git-buildpackage:
+Patch1:     new.patch
+Packager:   Markus Lehtonen <markus.lehtonen@linux.intel.com>
+VCS:        myvcstag
+
+%description
+Package for testing the RPM functionality of git-buildpackage.
+
+
+%prep
+%setup -T -n %{name}-%{version} -c -a 10
+
+%patch
+
+echo "Do things"
+
+# Gbp-Patch-Macros
+# new.patch
+%patch1 -p1
+
+%build
+make
+
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/%{_datadir}/%{name}
+cp -R * %{buildroot}/%{_datadir}/%{name}
+install %{SOURCE0} %{buildroot}/%{_datadir}/%{name}
+
+
+
+%files
+%defattr(-,root,root,-)
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}