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 2025-08-13 16:31:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1085 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Wed Aug 13 16:31:22 2025 rev:537 rq:1299218 version:20250806.05cbe030

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2025-07-10 22:14:32.877702990 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1085/openSUSE-release-tools.changes
  2025-08-13 16:33:59.493121773 +0200
@@ -1,0 +2,64 @@
+Wed Aug 06 10:26:26 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250806.05cbe030:
+  * ttm/releaser.py: Fix check for config completeness
+
+-------------------------------------------------------------------
+Mon Aug 04 09:00:19 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250804.a945653f:
+  * check_source.py: Skip name validation for mkosi builds
+
+-------------------------------------------------------------------
+Tue Jul 29 12:45:22 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250729.e4cb814c:
+  * staging-installcheck: fix syntax failure introduced with 597d48be
+
+-------------------------------------------------------------------
+Tue Jul 29 08:10:45 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250729.d25df07e:
+  * osclib: core: explicitly replace OBS instance prefix in 
devel_project_fallback
+
+-------------------------------------------------------------------
+Mon Jul 28 15:36:37 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250728.2755573d:
+  * TTM: only publish override repos if publish_multiple_product_repo config 
is enabled
+
+-------------------------------------------------------------------
+Mon Jul 28 14:32:03 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250728.49d5752d:
+  * staging-installcheck: allow checking random devel projects
+
+-------------------------------------------------------------------
+Mon Jul 28 14:10:01 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250728.1772cc0c:
+  * Publish the each override repository
+  * TTM: do allow to override product_repo for ftp
+
+-------------------------------------------------------------------
+Mon Jul 28 08:47:35 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250728.12e0bdc5:
+  * tests/maintenance_tests.py: Add test cases for maintainer submissions
+  * check_maintenance_incidents.py: Expand devel pkg roles for maintainer check
+  * tests/maintenance_tests.py: Refactor and fix
+
+-------------------------------------------------------------------
+Fri Jul 25 08:48:23 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250725.9a33dc77:
+  * gocd/checkers.opensuse.gocd.yaml: Rewrite ssh://src.opensuse.org to 
https://
+
+-------------------------------------------------------------------
+Fri Jul 25 07:03:21 UTC 2025 - opensuse-releaset...@opensuse.org
+
+- Update to version 20250725.99e6a216:
+  * Make it a valid date as otherwise source_validator rejects it
+  * Fix flake8 warning
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20250703.42999618.obscpio

New:
----
  openSUSE-release-tools-20250806.05cbe030.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.hfOAKp/_old  2025-08-13 16:34:01.705214518 +0200
+++ /var/tmp/diff_new_pack.hfOAKp/_new  2025-08-13 16:34:01.717215022 +0200
@@ -21,7 +21,7 @@
 %define announcer_filename factory-package-news
 %define services osrt-slsa.target osrt-relpkggen@.timer 
osrt-relpkggen@.service osrt-pkglistgen@.timer osrt-pkglistgen@.service
 Name:           openSUSE-release-tools
-Version:        20250703.42999618
+Version:        20250806.05cbe030
 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.hfOAKp/_old  2025-08-13 16:34:01.925223743 +0200
+++ /var/tmp/diff_new_pack.hfOAKp/_new  2025-08-13 16:34:01.953224917 +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">4299961884e1f29ced8366904e3f5a8b27a2c997</param>
+    <param 
name="changesrevision">05cbe0309ddca144b95303c2f14d43ccfdac075e</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20250703.42999618.obscpio -> 
openSUSE-release-tools-20250806.05cbe030.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/check_maintenance_incidents.py 
new/openSUSE-release-tools-20250806.05cbe030/check_maintenance_incidents.py
--- old/openSUSE-release-tools-20250703.42999618/check_maintenance_incidents.py 
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/check_maintenance_incidents.py 
2025-08-06 12:24:49.000000000 +0200
@@ -12,6 +12,7 @@
 from osclib.core import action_is_patchinfo, devel_project_get
 from osclib.core import owner_fallback
 from osclib.core import maintainers_get
+from osclib.core import package_role_expand, project_role_expand
 
 import ReviewBot
 
@@ -24,8 +25,8 @@
         ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
         self.review_messages = {}
 
-    def add_devel_project_review(self, req, package):
-        """ add devel project/package as reviewer """
+    def get_pkg_for_review(self, req, package):
+        """ Return devel prj/pkg to use as reviewer"""
         a = req.actions[0]
         if action_is_patchinfo(a):
             a = req.actions[1]
@@ -39,9 +40,7 @@
                 prj, pkg = devel_project_get(self.apiurl, "openSUSE:Factory", 
package.rpartition('.')[0])
             logging.debug(f'using devel project {prj}/{pkg}')
             if prj is not None:
-                msg = f'Submission for {pkg} by someone who is not maintainer 
in the devel project ({prj}). Please review'
-                self.add_review(req, by_project=prj, by_package=pkg, msg=msg)
-                return
+                return prj, pkg
 
         # no devel project -- fallback to /search/owner?package -- OBS side 
"owner" prj/pkg search with pkg only fallback
         root = owner_fallback(self.apiurl, project, package)
@@ -53,6 +52,15 @@
             if prj.startswith('openSUSE:Leap') or prj.startswith('openSUSE:1'):
                 self.logger.debug("%s looks wrong as maintainer, skipped", prj)
                 continue
+
+            return prj, pkg
+
+        return None, None
+
+    def add_devel_project_review(self, req, package):
+        """ add devel project/package as reviewer """
+        prj, pkg = self.get_pkg_for_review(req, package)
+        if prj is not None:
             msg = f'Submission for {pkg} by someone who is not maintainer in 
the devel project ({prj}). Please review'
             self.add_review(req, by_project=prj, by_package=pkg, msg=msg)
 
@@ -102,7 +110,14 @@
                     self.logger.info(f"{pkgname} submitted from 
{a.src_project}, no maintainer review needed")
                     return
 
-        maintainers = set(maintainers_get(self.apiurl, project, pkgname))
+        devprj, devpkg = self.get_pkg_for_review(req, pkgname)
+        if devpkg is not None:
+            maintainers = set(package_role_expand(self.apiurl, devprj, devpkg))
+        elif devprj is not None:
+            maintainers = set(project_role_expand(self.apiurl, devprj))
+        else:
+            maintainers = set(maintainers_get(self.apiurl, project, pkgname))
+
         if maintainers:
             known_maintainer = False
             for m in maintainers:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/check_source.py 
new/openSUSE-release-tools-20250806.05cbe030/check_source.py
--- old/openSUSE-release-tools-20250703.42999618/check_source.py        
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/check_source.py        
2025-08-06 12:24:49.000000000 +0200
@@ -270,7 +270,8 @@
         expected_name = target_package
         if filename == '_preinstallimage':
             expected_name = 'preinstallimage'
-        if not (filename.endswith('.kiwi') or filename == 'Dockerfile') and 
new_info['name'] != expected_name:
+        if not (filename.endswith('.kiwi') or filename == 'Dockerfile' or 
filename.endswith('mkosi.conf')) \
+           and new_info['name'] != expected_name:
             shutil.rmtree(copath)
             self.review_messages['declined'] = (
                 f"A package submitted as {target_package} has to build as 
'Name: {expected_name}' - found Name '{new_info['name']}'")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/gocd/checkers.opensuse.gocd.yaml 
new/openSUSE-release-tools-20250806.05cbe030/gocd/checkers.opensuse.gocd.yaml
--- 
old/openSUSE-release-tools-20250703.42999618/gocd/checkers.opensuse.gocd.yaml   
    2025-07-03 17:11:10.000000000 +0200
+++ 
new/openSUSE-release-tools-20250806.05cbe030/gocd/checkers.opensuse.gocd.yaml   
    2025-08-06 12:24:49.000000000 +0200
@@ -19,7 +19,9 @@
             resources:
             - staging-bot
             tasks:
-            - script: ./check_source.py -A https://api.opensuse.org --verbose 
--skip-add-reviews --user factory-auto review
+            - script: |-
+                git config --global url.https://src.opensuse.org/.insteadof 
ssh://gi...@src.opensuse.org/
+                ./check_source.py -A https://api.opensuse.org --verbose 
--skip-add-reviews --user factory-auto review
   openSUSE.MaintInstCheck:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20250703.42999618/metrics.py 
new/openSUSE-release-tools-20250806.05cbe030/metrics.py
--- old/openSUSE-release-tools-20250703.42999618/metrics.py     2025-07-03 
17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/metrics.py     2025-08-06 
12:24:49.000000000 +0200
@@ -94,8 +94,9 @@
 points = []
 
 
-def point(measurement, fields, datetime, tags={}, delta=False):
-    global points
+def point(measurement, fields, datetime, tags=None, delta=False):
+    if tags is None:
+        tags = {}
     points.append(Point(measurement, tags, fields, timestamp(datetime), delta))
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/osclib/core.py 
new/openSUSE-release-tools-20250806.05cbe030/osclib/core.py
--- old/openSUSE-release-tools-20250703.42999618/osclib/core.py 2025-07-03 
17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/osclib/core.py 2025-08-06 
12:24:49.000000000 +0200
@@ -345,7 +345,7 @@
             project, package = devel_project_get(apiurl, 
'openSUSE.org:openSUSE:Factory', target_package)
             if project:
                 # Strip openSUSE.org: prefix since string since not used for 
lookup.
-                project = project.split(':', 1)[1]
+                project = project.replace("openSUSE.org:", "", count=1)
 
     return project, package
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/staging-installcheck.py 
new/openSUSE-release-tools-20250806.05cbe030/staging-installcheck.py
--- old/openSUSE-release-tools-20250703.42999618/staging-installcheck.py        
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/staging-installcheck.py        
2025-08-06 12:24:49.000000000 +0200
@@ -173,11 +173,9 @@
             args = args.replace(',', ' ').split(' ')
         return set(args)
 
-    def staging(self, project, force=False):
+    def staging(self, project, repository, force=False, devel=False):
         api = self.api
 
-        repository = self.api.cmain_repo
-
         # fetch the build ids at the beginning - mirroring takes a while
         buildids = {}
         try:
@@ -216,20 +214,21 @@
 
         result = True
         to_ignore = self.packages_to_ignore(project)
-        status = api.project_status(project)
-        if status is None:
-            self.logger.error(f'no project status for {project}')
-            return False
+        if not devel:
+            status = api.project_status(project)
+            if status is None:
+                self.logger.error(f'no project status for {project}')
+                return False
 
-        # collect packages to be deleted
-        to_delete = set()
-        for req in status.findall('staged_requests/request'):
-            if req.get('type') == 'delete':
-                to_delete |= 
self.pkg_with_multibuild_flavors(req.get('package'))
-
-        for req in status.findall('staged_requests/request'):
-            if req.get('type') == 'delete':
-                result = self.check_delete_request(req, to_ignore, to_delete, 
result_comment) and result
+            # collect packages to be deleted
+            to_delete = set()
+            for req in status.findall('staged_requests/request'):
+                if req.get('type') == 'delete':
+                    to_delete |= 
self.pkg_with_multibuild_flavors(req.get('package'))
+
+            for req in status.findall('staged_requests/request'):
+                if req.get('type') == 'delete':
+                    result = self.check_delete_request(req, to_ignore, 
to_delete, result_comment) and result
 
         for arch in architectures:
             # hit the first repository in the target project (if existant)
@@ -279,13 +278,16 @@
             result_comment.append(yaml.dump(duplicates, 
default_flow_style=False))
             result = False
 
-        if result:
-            self.report_state('success', self.gocd_url(), project, repository, 
buildids)
+        if devel:
+            print(project, '\n'.join(result_comment))
         else:
-            result_comment.insert(0, f'Generated from {self.gocd_url()}\n')
-            self.report_state('failure', self.upload_failure(project, 
result_comment), project, repository, buildids)
-            self.logger.warning(f'Not accepting {project}')
-            return False
+            if result:
+                self.report_state('success', self.gocd_url(), project, 
repository, buildids)
+            else:
+                result_comment.insert(0, f'Generated from {self.gocd_url()}\n')
+                self.report_state('failure', self.upload_failure(project, 
result_comment), project, repository, buildids)
+                self.logger.warning(f'Not accepting {project}')
+                return False
 
         return result
 
@@ -403,6 +405,10 @@
         description='Do an installcheck on staging project')
     parser.add_argument('-s', '--staging', type=str, default=None,
                         help='staging project')
+    parser.add_argument('--devel', type=str, default=None,
+                        help='devel project (ex GNOME:Factory)')
+    parser.add_argument('-r', '--repository', type=str, default=None,
+                        help='repository to check, if not specified, use the 
staging configuration')
     parser.add_argument('-p', '--project', type=str, 
default='openSUSE:Factory',
                         help='project to check (ex. openSUSE:Factory, 
openSUSE:Leap:15.1)')
     parser.add_argument('-d', '--debug', action='store_true', default=False,
@@ -417,6 +423,8 @@
     apiurl = osc.conf.config['apiurl']
     config = Config.get(apiurl, args.project)
     api = StagingAPI(apiurl, args.project)
+    if not args.repository:
+        args.repository = api.cmain_repo
     staging_report = InstallChecker(api, config)
 
     if args.debug:
@@ -425,10 +433,13 @@
         logging.basicConfig(level=logging.INFO)
 
     if args.staging:
-        if not staging_report.staging(api.prj_from_short(args.staging), 
force=True):
+        if not staging_report.staging(api.prj_from_short(args.staging), 
repository=args.repository, force=True):
+            sys.exit(1)
+    elif args.devel:
+        if not staging_report.staging(args.devel, repository=args.repository, 
force=True, devel=True):
             sys.exit(1)
     else:
         for staging in api.get_staging_projects():
             if api.is_adi_project(staging):
-                staging_report.staging(staging)
+                staging_report.staging(staging, repository=args.repository)
     sys.exit(0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/tests/fixtures/packages/wine/wine.changes
 
new/openSUSE-release-tools-20250806.05cbe030/tests/fixtures/packages/wine/wine.changes
--- 
old/openSUSE-release-tools-20250703.42999618/tests/fixtures/packages/wine/wine.changes
      2025-07-03 17:11:10.000000000 +0200
+++ 
new/openSUSE-release-tools-20250806.05cbe030/tests/fixtures/packages/wine/wine.changes
      2025-08-06 12:24:49.000000000 +0200
@@ -1,5 +1,5 @@
 -------------------------------------------------------------------
-Thu Aug  4 00:06:66 UTC 2021 - Wine Drinker <win...@notanemulator.com>
+Thu Aug  4 00:06:06 UTC 2021 - Wine Drinker <win...@notanemulator.com>
 
 - Initial version.
 - 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/tests/maintenance_tests.py 
new/openSUSE-release-tools-20250806.05cbe030/tests/maintenance_tests.py
--- old/openSUSE-release-tools-20250703.42999618/tests/maintenance_tests.py     
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/tests/maintenance_tests.py     
2025-08-06 12:24:49.000000000 +0200
@@ -31,15 +31,108 @@
                                           logger=self.logger)
         self.checker.override_allow = False  # Test setup cannot handle.
 
-    def test_non_maintainer_submit(self):
-        """same as above but already has devel project as reviewer
-        """
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + "/source/home:brassh/mysql-workbench",
+                               match_querystring=True,
+                               body="""
+                <directory name="mysql-workbench" rev="6" vrev="6" 
srcmd5="858204decf53f923d5574dbe6ae63b15">
+                  <linkinfo project="openSUSE:13.2" package="mysql-workbench" 
srcmd5="ed9c3b12388cbd14868eb3faabe34685"
+                      baserev="ed9c3b12388cbd14868eb3faabe34685" 
xsrcmd5="08bfb4f40cb1e2de8f9cd4633bf02eb1"
+                      lsrcmd5="858204decf53f923d5574dbe6ae63b15" />
+                  <serviceinfo code="succeeded" 
xsrcmd5="6ec4305a8e5363e26a7f4895a0ae12d2" />
+                  <entry name="_link" md5="85ef5fb38ca1ec7c300311fda9f4b3d1" 
size="121" mtime="1414567341" />
+                  <entry name="mysql-workbench-community-6.1.7-src.tar.gz" 
md5="ac059e239869fb77bf5d7a1f5845a8af"
+                      size="24750696" mtime="1404405925" />
+                  <entry name="mysql-workbench-ctemplate.patch" 
md5="06ccba1f8275cd9408f515828ecede19" size="1322" mtime="1404658323" />
+                  <entry name="mysql-workbench-glib.patch" 
md5="67fd7d8e3503ce0909381bde747c8a1e" size="1785" mtime="1415732509" />
+                  <entry name="mysql-workbench-mysql_options4.patch" 
md5="9c07dfe1b94af95daf3e16bd6a161684"
+                         size="910" mtime="1404658324" />
+                  <entry name="mysql-workbench-no-check-for-updates.patch" 
md5="1f0c9514ff8218d361ea46d3031b2b64"
+                         size="1139" mtime="1404658324" />
+                  <entry name="mysql-workbench.changes" 
md5="26bc54777e6a261816b72f64c69630e4" size="13354" mtime="1415747835" />
+                  <entry name="mysql-workbench.spec" 
md5="88b562a93f01b842a5798f809e3c8188" size="7489" mtime="1415745943" />
+                  <entry name="openSUSE_(Vendor_Package).xml" 
md5="ab041af98d7748c216e7e5787ec36f65"
+                    size="743" mtime="1315923090" />
+                  <entry name="patch-desktop-categories.patch" 
md5="c24b3283573c34a5e072be122388f8e1"
+                    size="391" mtime="1376991147" />
+                </directory>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + 
"/source/openSUSE:Factory/mysql-workbench/_meta",
+                               match_querystring=True,
+                               body="""
+                  <package name="mysql-workbench" project="openSUSE:Factory">
+                    <title>MySQL Workbench</title>
+                    <description>UI for MySQL server</description>
+                    <devel project="server:database" 
package="mysql-workbench"/>
+                  </package>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + 
"/source/server:database/mysql-workbench/_meta",
+                               match_querystring=True,
+                               body="""
+                  <package name="mysql-workbench" project="server:database">
+                    <title>MySQL Workbench</title>
+                    <description>UI for MySQL server</description>
+                    <person userid="Gankov" role="maintainer"/>
+                    <person userid="bruno_friedmann" role="maintainer"/>
+                  </package>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + "/source/server:database/_meta",
+                               match_querystring=True,
+                               body="""
+                  <project name="server:database">
+                    <title>Databases</title>
+                    <description>Server Database software</description>
+                    <group groupid="factory-maintainers" role="maintainer"/>
+                  </project>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + "/group/factory-maintainers",
+                               match_querystring=True,
+                               body="""
+                  <group>
+                    <title>factory-maintainers</title>
+                    <maintainer userid="dimstar_suse"/>
+                    <maintainer userid="maxlin_factory"/>
+                    <person>
+                        <person userid="factory-maintainer"/>
+                        <person userid="dimstar_suse"/>
+                    </person>
+                  </group>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + 
"/search/owner?project=openSUSE:13.2:Update&binary=mysql-workbench",
+                               match_querystring=True,
+                               body="""
+                <collection/>
+            """)
+
+        httpretty.register_uri(httpretty.GET,
+                               APIURL + "/search/owner?binary=mysql-workbench",
+                               match_querystring=True,
+                               body="""
+                <collection>
+                  <owner rootproject="openSUSE" project="server:database" 
package="mysql-workbench">
+                    <person name="Gankov" role="maintainer"/>
+                    <person name="bruno_friedmann" role="maintainer"/>
+                  </owner>
+                </collection>
+            """)
+
+    def test_maintainer_submit(self):
 
         httpretty.register_uri(httpretty.GET,
                                APIURL + '/search/request',
                                body="""
                 <collection matches="1">
-                  <request id="261355" creator="brassh">
+                  <request id="261355" creator="bruno_friedmann">
                     <action type="maintenance_incident">
                       <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
                       <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
@@ -50,7 +143,7 @@
                     <review state="new" by_user="maintbot">
                       <comment></comment>
                     </review>
-                    <history who="brassh" when="2014-11-13T09:18:19">
+                    <history who="bruno_friedmann" when="2014-11-13T09:18:19">
                       <description>Request created</description>
                       <comment>...</comment>
                     </history>
@@ -66,7 +159,7 @@
                                APIURL + "/request/261355",
                                match_querystring=True,
                                body="""
-              <request id="261355" creator="brassh">
+              <request id="261355" creator="bruno_friedmann">
                 <action type="maintenance_incident">
                   <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
                   <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
@@ -77,7 +170,7 @@
                 <review state="new" by_user="maintbot">
                   <comment></comment>
                 </review>
-                <history who="brassh" when="2014-11-13T09:18:19">
+                <history who="bruno_friedmann" when="2014-11-13T09:18:19">
                   <description>Request created</description>
                   <comment>...</comment>
                 </history>
@@ -88,49 +181,84 @@
               </request>
             """)
 
+        result = {'devel_review_added': None}
+
+        def change_request(result, method, uri, headers):
+            query = parse_qs(urlparse(uri).query)
+            if query == {'by_package': ['mysql-workbench'], 'cmd': 
['addreview'], 'by_project': ['server:database']}:
+                result['devel_review_added'] = True
+            return (200, headers, '<status code="ok"/>')
+
+        httpretty.register_uri(httpretty.POST,
+                               APIURL + "/request/261355",
+                               body=lambda method, uri, headers: 
change_request(result, method, uri, headers))
+
+        self.checker.requests = []
+        self.checker.set_request_ids_search_review()
+        self.checker.check_requests()
+
+        self.assertFalse(result['devel_review_added'])
+
+    def test_prj_maintainer_submit(self):
+
         httpretty.register_uri(httpretty.GET,
-                               APIURL + "/source/home:brassh/mysql-workbench",
-                               match_querystring=True,
+                               APIURL + '/search/request',
                                body="""
-                <directory name="mysql-workbench" rev="6" vrev="6" 
srcmd5="858204decf53f923d5574dbe6ae63b15">
-                  <linkinfo project="openSUSE:13.2" package="mysql-workbench" 
srcmd5="ed9c3b12388cbd14868eb3faabe34685"
-                      baserev="ed9c3b12388cbd14868eb3faabe34685" 
xsrcmd5="08bfb4f40cb1e2de8f9cd4633bf02eb1"
-                      lsrcmd5="858204decf53f923d5574dbe6ae63b15" />
-                  <serviceinfo code="succeeded" 
xsrcmd5="6ec4305a8e5363e26a7f4895a0ae12d2" />
-                  <entry name="_link" md5="85ef5fb38ca1ec7c300311fda9f4b3d1" 
size="121" mtime="1414567341" />
-                  <entry name="mysql-workbench-community-6.1.7-src.tar.gz" 
md5="ac059e239869fb77bf5d7a1f5845a8af"
-                      size="24750696" mtime="1404405925" />
-                  <entry name="mysql-workbench-ctemplate.patch" 
md5="06ccba1f8275cd9408f515828ecede19" size="1322" mtime="1404658323" />
-                  <entry name="mysql-workbench-glib.patch" 
md5="67fd7d8e3503ce0909381bde747c8a1e" size="1785" mtime="1415732509" />
-                  <entry name="mysql-workbench-mysql_options4.patch" 
md5="9c07dfe1b94af95daf3e16bd6a161684"
-                         size="910" mtime="1404658324" />
-                  <entry name="mysql-workbench-no-check-for-updates.patch" 
md5="1f0c9514ff8218d361ea46d3031b2b64"
-                         size="1139" mtime="1404658324" />
-                  <entry name="mysql-workbench.changes" 
md5="26bc54777e6a261816b72f64c69630e4" size="13354" mtime="1415747835" />
-                  <entry name="mysql-workbench.spec" 
md5="88b562a93f01b842a5798f809e3c8188" size="7489" mtime="1415745943" />
-                  <entry name="openSUSE_(Vendor_Package).xml" 
md5="ab041af98d7748c216e7e5787ec36f65"
-                    size="743" mtime="1315923090" />
-                  <entry name="patch-desktop-categories.patch" 
md5="c24b3283573c34a5e072be122388f8e1"
-                    size="391" mtime="1376991147" />
-                </directory>
+                <collection matches="1">
+                  <request id="261355" creator="factory-maintainer">
+                    <action type="maintenance_incident">
+                      <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
+                      <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
+                    </action>
+                    <state name="review" who="lnussel_factory" 
when="2014-11-13T10:46:52">
+                      <comment></comment>
+                    </state>
+                    <review state="new" by_user="maintbot">
+                      <comment></comment>
+                    </review>
+                    <history who="factory-maintainer" 
when="2014-11-13T09:18:19">
+                      <description>Request created</description>
+                      <comment>...</comment>
+                    </history>
+                    <history who="lnussel_factory" when="2014-11-13T10:46:52">
+                      <description>Request got a new review 
request</description>
+                    </history>
+                    <description>...</description>
+                  </request>
+                </collection>
             """)
 
         httpretty.register_uri(httpretty.GET,
-                               APIURL + 
"/source/openSUSE:Factory/mysql-workbench/_meta",
+                               APIURL + "/request/261355",
                                match_querystring=True,
                                body="""
-                  <package name="mysql-workbench" project="openSUSE:Factory">
-                    <title>MySQL Workbench</title>
-                    <description>UI for MySQL server</description>
-                    <devel project="server:database" 
package="mysql-workbench"/>
-                  </package>
+              <request id="261355" creator="factory-maintainer">
+                <action type="maintenance_incident">
+                  <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
+                  <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
+                </action>
+                <state name="review" who="lnussel_factory" 
when="2014-11-13T10:46:52">
+                  <comment></comment>
+                </state>
+                <review state="new" by_user="maintbot">
+                  <comment></comment>
+                </review>
+                <history who="factory-maintainer" when="2014-11-13T09:18:19">
+                  <description>Request created</description>
+                  <comment>...</comment>
+                </history>
+                <history who="lnussel_factory" when="2014-11-13T10:46:52">
+                  <description>Request got a new review request</description>
+                </history>
+                <description>...</description>
+              </request>
             """)
 
         result = {'devel_review_added': None}
 
         def change_request(result, method, uri, headers):
             query = parse_qs(urlparse(uri).query)
-            if query == {'by_user': ['maintbot'], 'cmd': 
['changereviewstate'], 'newstate': ['accepted']}:
+            if query == {'by_package': ['mysql-workbench'], 'cmd': 
['addreview'], 'by_project': ['server:database']}:
                 result['devel_review_added'] = True
             return (200, headers, '<status code="ok"/>')
 
@@ -138,30 +266,89 @@
                                APIURL + "/request/261355",
                                body=lambda method, uri, headers: 
change_request(result, method, uri, headers))
 
+        self.checker.requests = []
+        self.checker.set_request_ids_search_review()
+        self.checker.check_requests()
+
+        self.assertFalse(result['devel_review_added'])
+
+    def test_non_maintainer_submit(self):
+        """same as above but already has devel project as reviewer
+        """
+
         httpretty.register_uri(httpretty.GET,
-                               APIURL + 
"/search/owner?project=openSUSE:13.2:Update&binary=mysql-workbench",
-                               match_querystring=True,
+                               APIURL + '/search/request',
                                body="""
-                <collection/>
+                <collection matches="1">
+                  <request id="261355" creator="brassh">
+                    <action type="maintenance_incident">
+                      <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
+                      <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
+                    </action>
+                    <state name="review" who="lnussel_factory" 
when="2014-11-13T10:46:52">
+                      <comment></comment>
+                    </state>
+                    <review state="new" by_user="maintbot">
+                      <comment></comment>
+                    </review>
+                    <review state="new" by_package="mysql-workbench" 
by_project="server:database">
+                      <comment>review by devel project</comment>
+                    </review>
+                    <history who="brassh" when="2014-11-13T09:18:19">
+                      <description>Request created</description>
+                      <comment>...</comment>
+                    </history>
+                    <history who="lnussel_factory" when="2014-11-13T10:46:52">
+                      <description>Request got a new review 
request</description>
+                    </history>
+                    <description>...</description>
+                  </request>
+                </collection>
             """)
 
         httpretty.register_uri(httpretty.GET,
-                               APIURL + "/search/owner?binary=mysql-workbench",
+                               APIURL + "/request/261355",
                                match_querystring=True,
                                body="""
-                <collection>
-                  <owner rootproject="openSUSE" project="server:database" 
package="mysql-workbench">
-                    <person name="Gankov" role="maintainer"/>
-                    <person name="bruno_friedmann" role="maintainer"/>
-                  </owner>
-                </collection>
+              <request id="261355" creator="brassh">
+                <action type="maintenance_incident">
+                  <source project="home:brassh" package="mysql-workbench" 
rev="857c77d2ba1d347b6dc50a1e5bcb74e1"/>
+                  <target project="openSUSE:Maintenance" 
releaseproject="openSUSE:13.2:Update"/>
+                </action>
+                <state name="review" who="lnussel_factory" 
when="2014-11-13T10:46:52">
+                  <comment></comment>
+                </state>
+                <review state="new" by_user="maintbot">
+                  <comment></comment>
+                </review>
+                <history who="brassh" when="2014-11-13T09:18:19">
+                  <description>Request created</description>
+                  <comment>...</comment>
+                </history>
+                <history who="lnussel_factory" when="2014-11-13T10:46:52">
+                  <description>Request got a new review request</description>
+                </history>
+                <description>...</description>
+              </request>
             """)
 
+        result = {'devel_review_added': None}
+
+        def change_request(result, method, uri, headers):
+            query = parse_qs(urlparse(uri).query)
+            if query == {'by_package': ['mysql-workbench'], 'cmd': 
['addreview'], 'by_project': ['server:database']}:
+                result['devel_review_added'] = True
+            return (200, headers, '<status code="ok"/>')
+
+        httpretty.register_uri(httpretty.POST,
+                               APIURL + "/request/261355",
+                               body=lambda method, uri, headers: 
change_request(result, method, uri, headers))
+
         self.checker.requests = []
         self.checker.set_request_ids_search_review()
         self.checker.check_requests()
 
-        self.assertTrue(result['devel_review_added'])
+        self.assertFalse(result['devel_review_added'])
 
     def test_non_maintainer_double_review(self):
 
@@ -224,42 +411,11 @@
               </request>
             """)
 
-        httpretty.register_uri(httpretty.GET,
-                               APIURL + "/source/home:brassh/mysql-workbench",
-                               match_querystring=True,
-                               body="""
-                <directory name="mysql-workbench" rev="6" vrev="6" 
srcmd5="858204decf53f923d5574dbe6ae63b15">
-                  <linkinfo project="openSUSE:13.2" package="mysql-workbench"
-                            srcmd5="ed9c3b12388cbd14868eb3faabe34685" 
baserev="ed9c3b12388cbd14868eb3faabe34685"
-                            xsrcmd5="08bfb4f40cb1e2de8f9cd4633bf02eb1" 
lsrcmd5="858204decf53f923d5574dbe6ae63b15" />
-                  <serviceinfo code="succeeded" 
xsrcmd5="6ec4305a8e5363e26a7f4895a0ae12d2" />
-                  <entry name="_link" md5="85ef5fb38ca1ec7c300311fda9f4b3d1" 
size="121" mtime="1414567341" />
-                  <entry name="mysql-workbench-community-6.1.7-src.tar.gz" 
md5="ac059e239869fb77bf5d7a1f5845a8af"
-                         size="24750696" mtime="1404405925" />
-                  <entry name="mysql-workbench-ctemplate.patch" 
md5="06ccba1f8275cd9408f515828ecede19"
-                         size="1322" mtime="1404658323" />
-                  <entry name="mysql-workbench-glib.patch" 
md5="67fd7d8e3503ce0909381bde747c8a1e"
-                         size="1785" mtime="1415732509" />
-                  <entry name="mysql-workbench-mysql_options4.patch" 
md5="9c07dfe1b94af95daf3e16bd6a161684"
-                         size="910" mtime="1404658324" />
-                  <entry name="mysql-workbench-no-check-for-updates.patch" 
md5="1f0c9514ff8218d361ea46d3031b2b64"
-                         size="1139" mtime="1404658324" />
-                  <entry name="mysql-workbench.changes" 
md5="26bc54777e6a261816b72f64c69630e4"
-                         size="13354" mtime="1415747835" />
-                  <entry name="mysql-workbench.spec" 
md5="88b562a93f01b842a5798f809e3c8188"
-                         size="7489" mtime="1415745943" />
-                  <entry name="openSUSE_(Vendor_Package).xml" 
md5="ab041af98d7748c216e7e5787ec36f65"
-                         size="743" mtime="1315923090" />
-                  <entry name="patch-desktop-categories.patch" 
md5="c24b3283573c34a5e072be122388f8e1"
-                         size="391" mtime="1376991147" />
-                </directory>
-            """)
-
         result = {'devel_review_added': None}
 
         def change_request(result, method, uri, headers):
-            u = urlparse(uri)
-            if u.query == 
'by_package=mysql-workbench&cmd=addreview&by_project=server%3Adatabase':
+            query = parse_qs(urlparse(uri).query)
+            if query == {'by_package': ['mysql-workbench'], 'cmd': 
['addreview'], 'by_project': ['server:database']}:
                 result['devel_review_added'] = True
             return (200, headers, '<status code="ok"/>')
 
@@ -267,25 +423,6 @@
                                APIURL + "/request/261355",
                                body=lambda method, uri, headers: 
change_request(result, method, uri, headers))
 
-        httpretty.register_uri(httpretty.GET,
-                               APIURL + 
"/search/owner?project=openSUSE:13.2:Update&binary=mysql-workbench",
-                               match_querystring=True,
-                               body="""
-                <collection/>
-            """)
-
-        httpretty.register_uri(httpretty.GET,
-                               APIURL + "/search/owner?binary=mysql-workbench",
-                               match_querystring=True,
-                               body="""
-                <collection>
-                  <owner rootproject="openSUSE" project="server:database" 
package="mysql-workbench">
-                    <person name="Gankov" role="maintainer"/>
-                    <person name="bruno_friedmann" role="maintainer"/>
-                  </owner>
-                </collection>
-            """)
-
         self.checker.requests = []
         self.checker.set_request_ids_search_review()
         self.checker.check_requests()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/ttm/publisher.py 
new/openSUSE-release-tools-20250806.05cbe030/ttm/publisher.py
--- old/openSUSE-release-tools-20250703.42999618/ttm/publisher.py       
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/ttm/publisher.py       
2025-08-06 12:24:49.000000000 +0200
@@ -305,6 +305,10 @@
         self.api.switch_flag_in_prj(
             self.project.test_project, flag='publish', state='enable',
             repository=self.project.product_repo)
+        if self.project.publish_multiple_product_repo and 
len(self.project.product_repo_overrides):
+            for key, value in self.project.product_repo_overrides.items():
+                self.api.switch_flag_in_prj(self.project.test_project, 
flag='publish',
+                                            state='enable', repository=value)
 
         if self.project.totest_images_repo != self.project.product_repo:
             self.logger.info('Publish test project content (image_products)')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/ttm/releaser.py 
new/openSUSE-release-tools-20250806.05cbe030/ttm/releaser.py
--- old/openSUSE-release-tools-20250703.42999618/ttm/releaser.py        
2025-07-03 17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/ttm/releaser.py        
2025-08-06 12:24:49.000000000 +0200
@@ -81,7 +81,9 @@
             # as well as agama-installer
             if 'productcompose' in self.project.main_products[0] and\
                     'productcompose' in self.project.ftp_products[0]:
-                return self.productcompose_build_version(self.project.name, 
self.project.ftp_products[0])
+                return self.productcompose_build_version(self.project.name, 
self.project.ftp_products[0],
+                                                         
repo=self.project.product_repo_overrides.get(self.project.ftp_products[0],
+                                                                               
                       self.project.product_repo))
             return self.iso_build_version(self.project.name, 
self.project.main_products[0])
 
         return self.iso_build_version(self.project.name, 
self.project.image_products[0].package,
@@ -146,6 +148,9 @@
             products[image_product.package] = image_product.archs
 
         all_found = 
self.verify_package_list_complete(self.project.product_repo, products)
+        if len(self.project.product_repo_overrides):
+            for key, value in self.project.product_repo_overrides.items():
+                all_found = self.verify_package_list_complete(value, products) 
and all_found
 
         # Then for containerfile_products
         if self.project.containerfile_products:
@@ -212,7 +217,9 @@
         prjresult = ET.parse(resultxml).getroot()
 
         for product in self.project.ftp_products + self.project.main_products:
-            if not self.package_ok(prjresult, self.project.name, product, 
self.project.product_repo, self.project.product_arch):
+            if not self.package_ok(prjresult, self.project.name, product,
+                                   
self.project.product_repo_overrides.get(product, self.project.product_repo),
+                                   self.project.product_arch):
                 all_ok = False
 
         # agama-installer in Leap uses images repo as source repo as well as 
target repo
@@ -250,7 +257,9 @@
         product_version = self.get_product_version()
         if product_version is not None:
             for product in self.project.ftp_products:
-                for binary in self.binaries_of_product(self.project.name, 
product):
+                for binary in self.binaries_of_product(self.project.name, 
product,
+                                                       
repo=self.project.product_repo_overrides.get(
+                                                           product, 
self.project.product_repo)):
                     # The NonOSS tree doesn't include the version...
                     if binary.endswith('.report') and 'NonOss' not in binary 
and product_version not in binary:
                         self.logger.debug(f'{binary} in {product} does not 
include {product_version}')
@@ -293,7 +302,9 @@
 
         if len(self.project.main_products):
             for product in self.project.ftp_products:
-                self.release_package(self.project.name, product, 
repository=self.project.product_repo)
+                self.release_package(self.project.name, product,
+                                     
repository=self.project.product_repo_overrides.get(
+                                         product, self.project.product_repo))
 
             for cd in self.project.main_products:
                 self.release_package(self.project.name, cd, 
set_release=set_release,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20250703.42999618/ttm/totest.py 
new/openSUSE-release-tools-20250806.05cbe030/ttm/totest.py
--- old/openSUSE-release-tools-20250703.42999618/ttm/totest.py  2025-07-03 
17:11:10.000000000 +0200
+++ new/openSUSE-release-tools-20250806.05cbe030/ttm/totest.py  2025-08-06 
12:24:49.000000000 +0200
@@ -9,6 +9,7 @@
 # Distribute under GPLv2 or GPLv3
 
 import yaml
+import re
 from osclib.core import attribute_value_load
 
 
@@ -48,6 +49,9 @@
         self.containerfile_products = []
         self.livecd_products = []
         self.image_products = []
+        self.product_repo_overrides = {}
+        # publish the default product_repo, ignore product_repo_overrides
+        self.publish_multiple_product_repo = False
 
         self.test_subproject = 'ToTest'
         self.base = project.split(':')[0]
@@ -68,6 +72,15 @@
         if self.totest_images_repo is None:
             self.totest_images_repo = self.product_repo
 
+        # do allow to override repository for ftp product
+        ftp_products_copy = self.ftp_products.copy()
+        for product in ftp_products_copy:
+            extract_product = re.search(r"(.+)/product_repo:(.+)", product)
+            if extract_product:
+                self.ftp_products.remove(product)
+                self.ftp_products.append(extract_product.group(1))
+                self.product_repo_overrides[extract_product.group(1)] = 
extract_product.group(2)
+
     def parse_images(self, products):
         parsed = []
         for package in products:

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.hfOAKp/_old  2025-08-13 16:34:06.157401182 +0200
+++ /var/tmp/diff_new_pack.hfOAKp/_new  2025-08-13 16:34:06.161401350 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20250703.42999618
-mtime: 1751555470
-commit: 4299961884e1f29ced8366904e3f5a8b27a2c997
+version: 20250806.05cbe030
+mtime: 1754475889
+commit: 05cbe0309ddca144b95303c2f14d43ccfdac075e
 

Reply via email to