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-17 17:01:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.25692 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Thu Mar 17 17:01:54 2022 rev:402 rq:962396 version:20220317.518f6f90

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2022-03-16 20:20:55.584990074 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.25692/openSUSE-release-tools.changes
 2022-03-17 17:02:12.725718129 +0100
@@ -1,0 +2,6 @@
+Thu Mar 17 10:29:24 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220317.518f6f90:
+  * pkglisten: Generate a comment for staging diffs
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20220315.0bbf3b2b.obscpio

New:
----
  openSUSE-release-tools-20220317.518f6f90.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.cQtNih/_old  2022-03-17 17:02:13.517718735 +0100
+++ /var/tmp/diff_new_pack.cQtNih/_new  2022-03-17 17:02:13.521718739 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20220315.0bbf3b2b
+Version:        20220317.518f6f90
 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.cQtNih/_old  2022-03-17 17:02:13.569718776 +0100
+++ /var/tmp/diff_new_pack.cQtNih/_new  2022-03-17 17:02:13.573718778 +0100
@@ -1,7 +1,7 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">0bbf3b2bdf803594c68feed8439039fb70fac30e</param>
+    <param 
name="changesrevision">bceaa53e13d4167b6e480bf502d27a0b3e5a8405</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20220315.0bbf3b2b.obscpio -> 
openSUSE-release-tools-20220317.518f6f90.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220315.0bbf3b2b/pkglistgen/tool.py 
new/openSUSE-release-tools-20220317.518f6f90/pkglistgen/tool.py
--- old/openSUSE-release-tools-20220315.0bbf3b2b/pkglistgen/tool.py     
2022-03-15 13:44:45.000000000 +0100
+++ new/openSUSE-release-tools-20220317.518f6f90/pkglistgen/tool.py     
2022-03-17 11:27:45.000000000 +0100
@@ -7,6 +7,7 @@
 import shutil
 import subprocess
 import yaml
+import textwrap
 
 from lxml import etree as ET
 
@@ -22,6 +23,7 @@
 from osclib.core import repository_path_expand
 from osclib.core import repository_arch_state
 from osclib.cache_manager import CacheManager
+from osclib.comments import CommentAPI
 
 from urllib.parse import urlparse
 
@@ -31,6 +33,7 @@
 SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
 
 PRODUCT_SERVICE = '/usr/lib/obs/service/create_single_product'
+MARKER = 'PackageListDiff'
 
 # share header cache with repochecker
 CACHEDIR = CacheManager.directory('repository-meta')
@@ -45,6 +48,7 @@
     def __init__(self):
         ToolBase.ToolBase.__init__(self)
         self.logger = logging.getLogger(__name__)
+        self.comment = CommentAPI(self.apiurl)
         self.reset()
 
     def reset(self):
@@ -504,6 +508,86 @@
                 print('%endif', file=output)
         output.flush()
 
+    def read_summary_file(self, file):
+        ret = dict()
+        with open(file, 'r') as f:
+            for line in f:
+                pkg, group = line.strip().split(':')
+                ret.setdefault(pkg, [])
+                ret[pkg].append(group)
+        return ret
+
+    def calculcate_package_diff(self, old_file, new_file):
+        old_file = self.read_summary_file(old_file)
+        new_file = self.read_summary_file(new_file)
+
+        # remove common part
+        keys = list(old_file.keys())
+        for key in keys:
+            if new_file.get(key, []) == old_file[key]:
+                del new_file[key]
+                del old_file[key]
+
+        if not old_file and not new_file:
+            return None
+
+        moved = dict()
+        for pkg in old_file:
+            old_groups = old_file[pkg]
+            new_groups = new_file.get(pkg, [])
+            movekey = ','.join(old_groups) + ' to ' + ','.join(new_groups)
+            moved.setdefault(movekey, [])
+            moved[movekey].append(pkg)
+
+        report = ''
+        for move in sorted(moved.keys()):
+            report += f"**Move from {move}**\n\n```\n"
+            paragraph = ', '.join(moved[move])
+            report += "\n".join(textwrap.wrap(paragraph, width=90, 
break_long_words=False, break_on_hyphens=False))
+            report += "\n```\n\n"
+
+        added = dict()
+        for pkg in new_file:
+            if pkg in old_file:
+                continue
+            addkey = ','.join(new_file[pkg])
+            added.setdefault(addkey, [])
+            added[addkey].append(pkg)
+
+        for group in sorted(added):
+            report += f"**Add to {group}**\n\n```\n"
+            paragraph = ', '.join(added[group])
+            report += "\n".join(textwrap.wrap(paragraph, width=90, 
break_long_words=False, break_on_hyphens=False))
+            report += "\n```\n\n"
+
+        return report.strip()
+
+    def handle_package_diff(self, project, old_file, new_file):
+        comments = self.comment.get_comments(project_name=project)
+        comment, _ = self.comment.comment_find(comments, MARKER)
+
+        report = self.calculcate_package_diff(old_file, new_file)
+        if not report:
+            if comment:
+                self.comment.delete(comment['id'])
+            return 0
+        report = self.comment.add_marker(report, MARKER)
+
+        if comment:
+            write_comment = report != comment['comment']
+        else:
+            write_comment = True
+        if write_comment:
+            if comment:
+                self.comment.delete(comment['id'])
+            self.comment.add_comment(project_name=project, comment=report)
+        else:
+            for c in comments.values():
+                if c['parent'] == comment['id']:
+                    print(c)
+
+        return 1
+
     def solve_project(self, ignore_unresolvable=False, 
ignore_recommended=False, locale=None, locales_from=None):
         self.load_all_groups()
         if not self.output:
@@ -652,6 +736,8 @@
         release_dir = os.path.join(cache_dir, release)
         oldrepos_dir = os.path.join(cache_dir, oldrepos)
 
+        # FOR DEBUG ret = self.handle_package_diff(project, 
f"{group_dir}/summary-staging.txt", f"{product_dir}/summary-staging.txt")
+
         self.input_dir = group_dir
         self.output_dir = product_dir
 
@@ -738,7 +824,6 @@
 
         file_utils.multibuild_from_glob(product_dir, '*.kiwi')
         self.build_stub(product_dir, 'kiwi')
-        self.commit_package(product_dir)
 
         # new way
         reference_summary = os.path.join(group_dir, f'summary-{scope}.txt')
@@ -753,37 +838,7 @@
                 for line in sorted(output):
                     f.write(line + '\n')
 
-            done = subprocess.run(['diff', '-u', reference_summary, 
summary_file])
-            return done.returncode
+        self.commit_package(product_dir)
 
-        # old way
-        error_output = b''
-        reference_summary = os.path.join(group_dir, 'reference-summary.yml')
         if os.path.isfile(reference_summary):
-            summary_file = os.path.join(product_dir, 'summary.yml')
-            with open(summary_file, 'w') as f:
-                f.write('# Summary of packages in groups')
-                for group in sorted(summary):
-                    # the unsorted group should appear filtered by
-                    # unneeded.yml - so we need the content of unsorted.yml
-                    # not unsorted.group (this grew a little unnaturally)
-                    if group == 'unsorted':
-                        continue
-                    f.write('\n' + group + ':\n')
-                    for package in sorted(summary[group]):
-                        f.write('  - ' + package + '\n')
-
-            try:
-                error_output += subprocess.check_output(['diff', '-u', 
reference_summary, summary_file])
-            except subprocess.CalledProcessError as e:
-                error_output += e.output
-            reference_unsorted = os.path.join(group_dir, 
'reference-unsorted.yml')
-            unsorted_file = os.path.join(product_dir, 'unsorted.yml')
-            try:
-                error_output += subprocess.check_output(['diff', '-u', 
reference_unsorted, unsorted_file])
-            except subprocess.CalledProcessError as e:
-                error_output += e.output
-
-        if len(error_output) > 0:
-            self.logger.error('Difference in yml:\n' + 
error_output.decode('utf-8'))
-            return 1
+            return self.handle_package_diff(project, reference_summary, 
summary_file)

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.cQtNih/_old  2022-03-17 17:02:14.253719299 +0100
+++ /var/tmp/diff_new_pack.cQtNih/_new  2022-03-17 17:02:14.257719302 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20220315.0bbf3b2b
-mtime: 1647348285
-commit: 0bbf3b2bdf803594c68feed8439039fb70fac30e
+version: 20220317.518f6f90
+mtime: 1647512865
+commit: 518f6f90f5537792d1b7dcba236d23115f43cff9
 

Reply via email to