Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2022-03-29 18:15:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Tue Mar 29 18:15:05 2022 rev:412 rq:965466 version:20220328.c6d6df6b

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2022-03-26 22:30:58.117945637 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1900/openSUSE-release-tools.changes
  2022-03-29 18:15:36.367143809 +0200
@@ -1,0 +2,7 @@
+Mon Mar 28 18:04:02 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220328.c6d6df6b:
+  * project-installcheck: Comment into openSUSE:Factory packages
+  * project-installcheck: Remove problems for gone packages
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20220325.205e07a9.obscpio

New:
----
  openSUSE-release-tools-20220328.c6d6df6b.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.FZXzN9/_old  2022-03-29 18:15:37.127144580 +0200
+++ /var/tmp/diff_new_pack.FZXzN9/_new  2022-03-29 18:15:37.131144585 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20220325.205e07a9
+Version:        20220328.c6d6df6b
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.FZXzN9/_old  2022-03-29 18:15:37.207144662 +0200
+++ /var/tmp/diff_new_pack.FZXzN9/_new  2022-03-29 18:15:37.211144666 +0200
@@ -1,7 +1,7 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">e4cb06a6920a8eb2221bb2fe2f2fa650e2f3efee</param>
+    <param 
name="changesrevision">00451e3762c75695d32528544751c282014d7d15</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20220325.205e07a9.obscpio -> 
openSUSE-release-tools-20220328.c6d6df6b.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220325.205e07a9/project-installcheck.py 
new/openSUSE-release-tools-20220328.c6d6df6b/project-installcheck.py
--- old/openSUSE-release-tools-20220325.205e07a9/project-installcheck.py        
2022-03-25 12:53:21.000000000 +0100
+++ new/openSUSE-release-tools-20220328.c6d6df6b/project-installcheck.py        
2022-03-28 20:01:57.000000000 +0200
@@ -19,10 +19,11 @@
 
 import ToolBase
 from osclib.conf import Config
-from osclib.core import (http_GET, makeurl,
+from osclib.core import (http_DELETE, http_GET, makeurl,
                          repository_path_expand, repository_path_search,
                          target_archs, source_file_load, source_file_ensure)
 from osclib.repochecks import mirror, parsed_installcheck, CorruptRepos
+from osclib.comments import CommentAPI
 
 
 class RepoChecker():
@@ -49,7 +50,46 @@
             return None
 
         for arch in archs:
-            self.check_pra(project, repository, arch)
+            state = self.check_pra(project, repository, arch)
+
+        comments = dict()
+        for source, details in state['check'].items():
+            _, _, arch, rpm = source.split('/')
+            rpm = rpm.split(':')[0]
+            comments.setdefault(rpm, {})
+            comments[rpm][arch] = details['problem']
+
+        url = makeurl(self.apiurl, ['comments', 'user'])
+        root = ET.parse(http_GET(url)).getroot()
+        for comment in root.findall('.//comment'):
+            if comment.get('project') != project:
+                continue
+            if comment.get('package') in comments:
+                continue
+            self.logger.info("Removing comment for package 
{}".format(comment.get('package')))
+            url = makeurl(self.apiurl, [comment, comment.get('id')])
+            http_DELETE(url)
+
+        commentapi = CommentAPI(self.apiurl)
+        MARKER = 'Installcheck'
+
+        for package in comments:
+            newcomment = ''
+            for arch in sorted(comments[package]):
+                newcomment += f"\n\n**Installcheck problems for {arch}**\n\n"
+                for problem in sorted(comments[package][arch]):
+                    newcomment += "+ " + problem + "\n"
+
+            newcomment = commentapi.add_marker(newcomment.strip(), MARKER)
+            oldcomments = commentapi.get_comments(project_name=project, 
package_name=package)
+            oldcomment, _ = commentapi.comment_find(oldcomments, MARKER)
+            if oldcomment and oldcomment['comment'] == newcomment:
+                continue
+
+            if oldcomment:
+                commentapi.delete(oldcomment['id'])
+            self.logger.debug("Adding comment to {}/{}".format(project, 
package))
+            commentapi.add_comment(project_name=project, package_name=package, 
comment=newcomment)
 
     def project_pseudometa_file_name(self, project, repository):
         filename = 'repo_checker'
@@ -167,16 +207,17 @@
             for package in parsed:
                 parsed[package]['output'] = 
self._split_and_filter(parsed[package]['output'])
 
-        url = makeurl(self.apiurl, ['build', project, '_result'], {
-                      'repository': repository, 'arch': arch, 'code': 
'succeeded'})
+        url = makeurl(self.apiurl, ['build', project, '_result'], 
{'repository': repository, 'arch': arch})
         root = ET.parse(http_GET(url)).getroot()
-        succeeding = list(map(lambda x: x.get('package'), 
root.findall('.//status')))
+        buildresult = dict()
+        for p in root.findall('.//status'):
+            buildresult[p.get('package')] = p.get('code')
 
         per_source = dict()
 
         for package, entry in parsed.items():
             source = "{}/{}/{}/{}".format(project, repository, arch, 
entry['source'])
-            per_source.setdefault(source, {'output': [], 'builds': 
entry['source'] in succeeding})
+            per_source.setdefault(source, {'output': [], 'buildresult': 
buildresult.get(entry['source'], 'gone')})
             per_source[source]['output'].extend(entry['output'])
 
         rebuilds = set()
@@ -184,9 +225,9 @@
         for source in sorted(per_source):
             if not len(per_source[source]['output']):
                 continue
-            self.logger.debug("{} builds: {}".format(source, 
per_source[source]['builds']))
+            self.logger.debug("{} builds: {}".format(source, 
per_source[source]['buildresult']))
             self.logger.debug("  " + "\n  ".join(per_source[source]['output']))
-            if not per_source[source]['builds']:  # nothing we can do
+            if per_source[source]['buildresult'] != 'succeeded':  # nothing we 
can do
                 continue
             old_output = oldstate['check'].get(source, {}).get('problem', [])
             if sorted(old_output) == sorted(per_source[source]['output']):
@@ -202,7 +243,11 @@
         for source in list(oldstate['check']):
             if not source.startswith('{}/{}/{}/'.format(project, repository, 
arch)):
                 continue
-            if not os.path.basename(source) in succeeding:
+            code = buildresult.get(os.path.basename(source), 'gone')
+            if code == 'gone':
+                del oldstate['check'][source]
+            if code != 'succeeded':
+                self.logger.debug(f"Skipping build result for {source} {code}")
                 continue
             if source not in per_source:
                 self.logger.info("No known problem, erasing %s", source)
@@ -233,8 +278,8 @@
 
         # calculate build info hashes
         for package in packages:
-            if package not in succeeding:
-                self.logger.debug("Ignore %s for the moment, not succeeding", 
package)
+            if buildresult[package] != 'succeeded':
+                self.logger.debug("Ignore %s for the moment, %s", package, 
buildresult[package])
                 continue
             m = hashlib.sha256()
             for bdep in sorted(infos[package]['deps']):
@@ -251,13 +296,13 @@
         if self.dryrun:
             if self.rebuild:
                 self.logger.info("To rebuild: %s", ' '.join(rebuilds))
-            return
+            return oldstate
 
         if not self.rebuild or not len(rebuilds):
             self.logger.debug("Nothing to rebuild")
             # in case we do rebuild, wait for it to succeed before saving
             self.store_yaml(oldstate, project, repository, arch)
-            return
+            return oldstate
 
         query = {'cmd': 'rebuild', 'repository': repository, 'arch': arch, 
'package': rebuilds}
         url = makeurl(self.apiurl, ['build', project])
@@ -265,6 +310,7 @@
         http_request('POST', url, headers, data=urlencode(query, doseq=True))
 
         self.store_yaml(oldstate, project, repository, arch)
+        return oldstate
 
     def check_leaf_package(self, project, repository, arch, package):
         url = makeurl(self.apiurl, ['build', project, repository, arch, 
package, '_buildinfo'])

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.FZXzN9/_old  2022-03-29 18:15:37.835145299 +0200
+++ /var/tmp/diff_new_pack.FZXzN9/_new  2022-03-29 18:15:37.839145304 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20220325.205e07a9
-mtime: 1648209201
-commit: 205e07a9d442993b842f0d5dcf1dc49d1093b8c5
+version: 20220328.c6d6df6b
+mtime: 1648490517
+commit: c6d6df6b9c3195531d83a3ba4978399eb4c36d26
 

Reply via email to