File 0010-handle-dependencies.patch of Package tito

Index: tito-tito-0.6.11-1/src/tito/tagger/main.py
===================================================================
--- tito-tito-0.6.11-1.orig/src/tito/tagger/main.py
+++ tito-tito-0.6.11-1/src/tito/tagger/main.py
@@ -137,6 +137,8 @@ class VersionTagger(ConfigObject):
         self._make_changelog()
         new_version = self._bump_version()
         self._check_tag_does_not_exist(self._get_new_tag(new_version))
+        self._update_dependencies()
+        self._update_dependencies_rhn_conf()
         self._update_changelog(new_version)
         CargoBump.tag_new_version(self.full_project_dir, new_version)
         self._update_setup_py(new_version)
@@ -377,6 +379,99 @@ class VersionTagger(ConfigObject):
             mvn_new_version))
         run_command("git add %s" % pom_file)
 
+    def _update_dependencies_rhn_conf(self):
+        for section in self.config.sections():
+            if not section.endswith(".conf"):
+                debug("section '{}' seems not to be a config file. Skipping".format(section))
+                continue
+            conf_file = os.path.join(self.full_project_dir, section)
+            if not os.path.exists(conf_file):
+                warn_out("File not found: {}, skipping".format(conf_file))
+                continue
+            ver_regex = re.compile("([\w._-]+)(\s*)(=)(\s*)([\w.-]+)(.*)", re.IGNORECASE)
+            for key, value in self.config.items(section):
+                buf = StringIO()
+                with open(conf_file, 'r') as in_f:
+                    for line in in_f.readlines():
+                        m = ver_regex.match(line)
+                        if m and m.group(1) == key:
+                            result_tuple = list(m.group(1, 2, 3, 4))
+                            result_tuple.append(value)
+                            result_tuple.append(m.group(6))
+                            new_line = "%s%s%s%s%s%s\n" % tuple(result_tuple)
+                            buf.write(new_line)
+                        else:
+                            buf.write(line)
+
+                with open(conf_file, 'w') as out_f:
+                    out_f.write(buf.getvalue())
+                buf.close()
+            run_command("git add %s" % conf_file)
+
+        # Legacy configuration format
+        if not self.config.has_section("dbschema"):
+            return
+        ver_regex = re.compile("(.*)(min_schema_version)(\s*)(=)(\s*)([\w.-]+)(.*)", re.IGNORECASE)
+        conf_file = ""
+        for f in self.config.options("dbschema"):
+            version = self.config.get("dbschema", f)
+            conf_file = os.path.join(self.full_project_dir, f)
+            if not os.path.exists(conf_file):
+                debug("File not found: {}".format(conf_file))
+                continue
+
+            buf = StringIO()
+            with open(conf_file, 'r') as in_f:
+                for line in in_f.readlines():
+                    m = ver_regex.match(line)
+                    if m:
+                        result_tuple = list(m.group(1, 2, 3, 4, 5))
+                        result_tuple.append(version)
+                        result_tuple.append(m.group(7))
+                        new_line = "%s%s%s%s%s%s%s\n" % tuple(result_tuple)
+                        buf.write(new_line)
+                    else:
+                        buf.write(line)
+
+            with open(conf_file, 'w') as out_f:
+                out_f.write(buf.getvalue())
+            buf.close()
+            run_command("git add %s" % conf_file)
+
+    def _update_dependencies(self):
+        if not any(elem in self.config.sections()  for elem in ["requires", "buildrequires"]):
+            return
+
+        require_regex = re.compile("^(requires:\s*)(.+)$", re.IGNORECASE)
+        buildrequire_regex = re.compile("^(buildrequires:\s*)(.+)$", re.IGNORECASE)
+        specfile = []
+        with open(self.spec_file, 'r') as in_f:
+            specfile = in_f.readlines()
+
+
+        if self.config.has_section("requires"):
+            for pkg in self.config.options("requires"):
+                version = self.config.get("requires", pkg)
+                specfile = self._change_spec(specfile, require_regex, pkg, version)
+        if self.config.has_section("buildrequires"):
+            for pkg in self.config.options("buildrequires"):
+                version = self.config.get("buildrequires", pkg)
+                specfile = self._change_spec(specfile, buildrequire_regex, pkg, version)
+
+
+        with open(self.spec_file + ".new", 'w') as out_f:
+            for line in specfile:
+                out_f.write(line)
+        shutil.move(self.spec_file + ".new", self.spec_file)
+
+
+    def _change_spec(self, specfile, regex, pkg, version):
+        for i, line in enumerate(specfile):
+            m = re.match(regex, line)
+            if m and m.group(2).startswith(pkg):
+                specfile[i] = "".join([m.group(1), pkg, " >= ", version, "\n"])
+        return specfile
+
     def _bump_version(self, release=False, zstream=False):
         """
         Bump up the package version in the spec file.
@@ -663,6 +758,8 @@ class ReleaseTagger(VersionTagger):
         new_version = self._bump_version(release=bump_release)
 
         self._check_tag_does_not_exist(self._get_new_tag(new_version))
+        self._update_dependencies()
+        self._update_dependencies_rhn_conf()
         self._update_changelog(new_version)
         self._update_package_metadata(new_version)
 
Index: tito-tito-0.6.11-1/src/tito/tagger/zstreamtagger.py
===================================================================
--- tito-tito-0.6.11-1.orig/src/tito/tagger/zstreamtagger.py
+++ tito-tito-0.6.11-1/src/tito/tagger/zstreamtagger.py
@@ -17,6 +17,8 @@ class zStreamTagger(VersionTagger):
         new_version = self._bump_version(release=True)
 
         self._check_tag_does_not_exist(self._get_new_tag(new_version))
+        self._update_dependencies()
+        self._update_dependencies_rhn_conf()
         self._update_changelog(new_version)
         self._update_package_metadata(new_version)
 
openSUSE Build Service is sponsored by