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-26 22:30:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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"

Sat Mar 26 22:30:55 2022 rev:411 rq:964976 version:20220325.205e07a9

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2022-03-25 21:54:51.646288905 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1900/openSUSE-release-tools.changes
  2022-03-26 22:30:58.117945637 +0100
@@ -1,0 +2,26 @@
+Fri Mar 25 11:54:44 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220325.205e07a9:
+  * Do not decline requests with download_files errors
+
+-------------------------------------------------------------------
+Fri Mar 25 10:48:45 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220325.45c2fb1e:
+  * check_source: Allow a .changes line to mention 2 patches
+
+-------------------------------------------------------------------
+Fri Mar 25 09:48:39 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220325.939beac7:
+  * Stay with minversion 3.6 (and require module we already use elsewhere)
+
+-------------------------------------------------------------------
+Fri Mar 25 08:51:37 UTC 2022 - opensuse-releaset...@opensuse.org
+
+- Update to version 20220325.1f0c9fd1:
+  * Move download URL check to check_source.py
+  * Ignore patches that are listed as sources
+  * Move the 'patch in changes' check from check_source.pl to .py
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20220324.e25e4b7c.obscpio

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

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.2TfF25/_old  2022-03-26 22:30:59.189947105 +0100
+++ /var/tmp/diff_new_pack.2TfF25/_new  2022-03-26 22:30:59.193947111 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20220324.e25e4b7c
+Version:        20220325.205e07a9
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT
@@ -103,9 +103,7 @@
 %package check-source
 Summary:        Check source review bot
 Group:          Development/Tools/Other
-# check_source.pl
 Requires:       obs-service-download_files
-Requires:       obs-service-format_spec_file
 Requires:       obs-service-source_validator
 Requires:       osclib = %{version}
 Requires:       perl-Text-Diff
@@ -373,7 +371,6 @@
 %exclude %{_datadir}/%{source_dir}/abichecker
 %exclude %{_datadir}/%{source_dir}/%{announcer_filename}
 %exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
-%exclude %{_datadir}/%{source_dir}/check_source.pl
 %exclude %{_datadir}/%{source_dir}/check_source.py
 %exclude %{_datadir}/%{source_dir}/devel-project.py
 %exclude %{_datadir}/%{source_dir}/metrics
@@ -411,7 +408,6 @@
 
 %files check-source
 %{_bindir}/osrt-check_source
-%{_datadir}/%{source_dir}/check_source.pl
 %{_datadir}/%{source_dir}/check_source.py
 
 %files maintenance

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.2TfF25/_old  2022-03-26 22:30:59.257947199 +0100
+++ /var/tmp/diff_new_pack.2TfF25/_new  2022-03-26 22:30:59.265947210 +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">6931c440998fc599afc49ead6d739bead7847d76</param>
+    <param 
name="changesrevision">e4cb06a6920a8eb2221bb2fe2f2fa650e2f3efee</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20220324.e25e4b7c.obscpio -> 
openSUSE-release-tools-20220325.205e07a9.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20220324.e25e4b7c/CONTENTS.md 
new/openSUSE-release-tools-20220325.205e07a9/CONTENTS.md
--- old/openSUSE-release-tools-20220324.e25e4b7c/CONTENTS.md    2022-03-24 
18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/CONTENTS.md    2022-03-25 
12:53:21.000000000 +0100
@@ -263,7 +263,7 @@
 Checks for usual mistakes and problems in the source packages submitted by 
users. Used also as
 review bot that assigns reviews (?).
 
-* Sources: [check_source.py](check_source.py) and 
[check_source.pl](check_source.pl)
+* Sources: [check_source.py](check_source.py)
 * Documentation: [docs/check_source.asciidoc](docs/check_source.asciidoc)
 * Package: openSUSE-release-tools-check-source
 * Usage: 
[gocd](https://github.com/openSUSE/openSUSE-release-tools/search?q=path%3A%2Fgocd+check_source)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/check_source.pl 
new/openSUSE-release-tools-20220325.205e07a9/check_source.pl
--- old/openSUSE-release-tools-20220324.e25e4b7c/check_source.pl        
2022-03-24 18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/check_source.pl        
1970-01-01 01:00:00.000000000 +0100
@@ -1,138 +0,0 @@
-#! /usr/bin/perl
-
-use File::Basename;
-use File::Temp qw/ tempdir  /;
-use Cwd;
-use Text::Diff;
-BEGIN {
-    unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
-}
-use Build;
-
-my $ret = 0;
-
-my $old = $ARGV[0];
-my $dir = $ARGV[1];
-my $bname = basename($dir);
-
-my %patches = ();
-
-
-my $odir = getcwd();
-
-chdir($dir) || die "chdir $dir failed";
-for my $patch (glob("*.diff *.patch *.dif")) {
-    $patches{$patch} = 'current';
-}
-chdir($odir) || die "chdir $odir failed";
-
-if (-d "$old") {
-
-    chdir($old) || die "chdir $old failed";
-    my $cf = Build::read_config("x86_64", 
"/usr/lib/build/configs/default.conf");
-
-    my %thash = ();
-    for my $spec (glob("*.spec")) {
-        my $ps = Build::Rpm::parse($cf, $spec);
-
-        while (my ($k, $v) = each %$ps) {
-            if ($k =~ m/^source/) {
-                $thash{$v} = 1;
-            }
-        }
-    }
-    for my $patch (glob("*.diff *.patch *.dif")) {
-        if ($patches{$patch}) {
-            delete $patches{$patch};
-        }
-        else {
-            $patches{$patch} = 'old';
-        }
-    }
-
-    chdir($odir) || die "chdir $odir failed";
-    chdir($dir) || die "chdir $dir failed";
-    for my $spec (glob("*.spec")) {
-        my $ps = Build::Rpm::parse($cf, $spec);
-        open(OSPEC, "$spec");
-        open(NSPEC, ">$spec.new");
-        while (<OSPEC>) {
-            chomp;
-            if (m/^Source/) {
-                my $line = $_;
-                $line =~ s/^(Source[0-9]*)\s*:\s*//;
-                if ($patches{$line}) {
-                   delete $patches{$line};
-                }
-                my $prefix = $1;
-                my $parsedline = $ps->{lc $prefix};
-                if (defined $thash{$parsedline}) {
-                    my $file = $line;
-                    my $bname = basename($file);
-                    print NSPEC "$prefix: $bname\n";
-                }
-                else {
-                    print NSPEC "$_\n";
-                }
-            }
-            else {
-                print NSPEC "$_\n";
-            }
-        }
-        close(OSPEC);
-        close(NSPEC);
-        system(("cp", "$spec", "$spec.beforeurlstrip"));
-        rename("$spec.new", "$spec") || die "rename failed";
-    }
-
-    chdir($dir);
-    my @changes = glob("*.changes");
-    chdir($odir);
-
-    if (%patches) {
-        # parse changes
-        for my $changes (@changes) {
-            my $diff = "";
-            if (! -e "$old/$changes") {
-                $diff = diff "/dev/null", "$dir/$changes";
-            }
-            else {
-                $diff = diff "$old/$changes", "$dir/$changes";
-            }
-            for my $line (split(/\n/, $diff)) {
-                # Check if the line mentions a patch being added (starts with 
+)
-                # or removed (starts with -)
-                next unless $line =~ m/^[+-]/;
-                # In any of those cases, remove the patch from the list
-                $line =~ s/^[+-]//;
-                for my $patch (keys %patches) {
-                    if (index($line, $patch) != -1) {
-                        delete $patches{$patch};
-                    }
-                }
-            }
-        }
-    }
-    # still some left?
-    if (%patches) {
-        $ret = 1;
-        for my $patch (keys %patches) {
-            # wording stolen from Raymond's declines :)
-            if ($patches{$patch} eq 'current') {
-                print "A patch ($patch) is being added without this addition 
being mentioned in the changelog.\n";
-            }
-            else {
-                print "A patch ($patch) is being deleted without this removal 
being mentioned in the changelog.\n";
-            }
-        }
-    }
-}
-
-my $tmpdir = tempdir("obs-XXXXXXX", TMPDIR => 1, CLEANUP => 1);
-chdir($dir) || die 'tempdir failed';
-if (system("/usr/lib/obs/service/download_files","--enforceupstream", "yes", 
"--enforcelocal", "yes", "--outdir", $tmpdir)) {
-    print "Source URLs are not valid. Try \"osc service runall 
download_files\".\n";
-    $ret = 2;
-}
-
-exit($ret);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/check_source.py 
new/openSUSE-release-tools-20220325.205e07a9/check_source.py
--- old/openSUSE-release-tools-20220324.e25e4b7c/check_source.py        
2022-03-24 18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/check_source.py        
2022-03-25 12:53:21.000000000 +0100
@@ -1,17 +1,18 @@
 #!/usr/bin/python3
 
+import difflib
 import glob
 import os
 import re
 import shutil
 import subprocess
 import sys
+import tempfile
 
 from lxml import etree as ET
 
 import osc.conf
 import osc.core
-from osc.util.helper import decode_list
 from osclib.conf import Config
 from osclib.core import devel_project_get
 from osclib.core import devel_project_fallback
@@ -182,13 +183,11 @@
         os.makedirs(dir)
         os.chdir(dir)
 
-        old_info = {'version': None}
         try:
             CheckSource.checkout_package(self.apiurl, target_project, 
target_package, pathname=dir,
                                          server_service_files=True, 
expand_link=True)
             shutil.rmtree(os.path.join(target_package, '.osc'))
             os.rename(target_package, '_old')
-            old_info = self.package_source_parse(target_project, 
target_package)
         except HTTPError as e:
             if e.code == 404:
                 self.logger.info('target package does not exist %s/%s' % 
(target_project, target_package))
@@ -225,51 +224,34 @@
         if not self.run_source_validator('_old', target_package):
             return False
 
-        # Run check_source.pl script and interpret output.
-        source_checker = os.path.join(CheckSource.SCRIPT_PATH, 
'check_source.pl')
-        civs = ''
-        new_version = None
-        if old_info['version'] and old_info['version'] != new_info['version']:
-            new_version = new_info['version']
-            civs += "NEW_VERSION='{}' ".format(new_version)
-        civs += 'LC_ALL=C perl %s _old %s 2>&1' % (source_checker, 
target_package)
-        p = subprocess.Popen(civs, shell=True, stdout=subprocess.PIPE, 
close_fds=True)
-        ret = os.waitpid(p.pid, 0)[1]
-        checked = decode_list(p.stdout.readlines())
-
-        output = '  '.join(checked).replace('\033', '')
-        os.chdir('/tmp')
-
-        # ret = 0 : Good
-        # ret = 1 : Bad
-        # ret = 2 : Bad but can be non-fatal in some cases
-        if ret > 1 and target_project.startswith('openSUSE:Leap:') and 
(source_project.startswith('SUSE:SLE-15:') or
-                                                                        
source_project.startswith('openSUSE:Factory')):
-            pass
-        elif ret != 0:
-            shutil.rmtree(dir)
-            self.review_messages['declined'] = "Output of check script:\n" + 
output
+        if not self.detect_mentioned_patches('_old', target_package, specs):
             return False
 
+        if not self.check_urls('_old', target_package, specs):
+            osc.core.change_review_state(apiurl=self.apiurl,
+                                         reqid=self.request.reqid, 
newstate='new',
+                                         by_group=self.review_group,
+                                         by_user=self.review_user, 
message=self.review_messages['new'])
+            return None
+
         shutil.rmtree(dir)
         self.review_messages['accepted'] = 'Check script succeeded'
 
-        if len(checked):
-            self.review_messages['accepted'] += "\n\nOutput of check script 
(non-fatal):\n" + output
+        if self.skip_add_reviews:
+            return True
 
-        if not self.skip_add_reviews:
-            if self.add_review_team and self.review_team is not None:
-                self.add_review(self.request, by_group=self.review_team, 
msg='Please review sources')
-
-            if self.only_changes():
-                self.logger.debug('only .changes modifications')
-                if self.staging_group and self.review_user in 
group_members(self.apiurl, self.staging_group):
-                    if not self.dryrun:
-                        osc.core.change_review_state(self.apiurl, 
str(self.request.reqid), 'accepted',
-                                                     
by_group=self.staging_group,
-                                                     message='skipping the 
staging process since only .changes modifications')
-                else:
-                    self.logger.debug('unable to skip staging review since not 
a member of staging group')
+        if self.add_review_team and self.review_team is not None:
+            self.add_review(self.request, by_group=self.review_team, 
msg='Please review sources')
+
+        if self.only_changes():
+            self.logger.debug('only .changes modifications')
+            if self.staging_group and self.review_user in 
group_members(self.apiurl, self.staging_group):
+                if not self.dryrun:
+                    osc.core.change_review_state(self.apiurl, 
str(self.request.reqid), 'accepted',
+                                                 by_group=self.staging_group,
+                                                 message='skipping the staging 
process since only .changes modifications')
+            else:
+                self.logger.debug('unable to skip staging review since not a 
member of staging group')
 
         return True
 
@@ -574,6 +556,126 @@
 
         return True
 
+    def _snipe_out_existing_urls(self, old, directory, specs):
+        if not os.path.isdir(old):
+            return
+        oldsources = self._mentioned_sources(old, specs)
+        for spec in specs:
+            specfn = os.path.join(directory, spec)
+            nspecfn = specfn + '.new'
+            wf = open(nspecfn, 'w')
+            with open(specfn) as rf:
+                for line in rf:
+                    m = re.match(r'(Source[0-9]*\s*):\s*(.*)$', line)
+                    if m and m.group(2) in oldsources:
+                        wf.write(m.group(1) + ":" + 
os.path.basename(m.group(2)) + "\n")
+                        continue
+                    wf.write(line)
+            wf.close()
+            os.rename(nspecfn, specfn)
+
+    def check_urls(self, old, directory, specs):
+        self._snipe_out_existing_urls(old, directory, specs)
+        oldcwd = os.getcwd()
+        with tempfile.TemporaryDirectory() as tmpdir:
+            os.chdir(directory)
+            res = subprocess.run(["/usr/lib/obs/service/download_files", 
"--enforceupstream",
+                                  "yes", "--enforcelocal", "yes", "--outdir", 
tmpdir], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+            if res.returncode:
+                self.review_messages['new'] = "Source URLs are not valid. Try 
`osc service runall download_files`.\n" + \
+                    res.stdout.decode('utf-8')
+                os.chdir(oldcwd)
+                return False
+        os.chdir(oldcwd)
+        return True
+
+    def difflines(self, oldf, newf):
+        with open(oldf, 'r') as f:
+            oldl = f.readlines()
+        with open(newf, 'r') as f:
+            newl = f.readlines()
+        return list(difflib.unified_diff(oldl, newl))
+
+    def _mentioned_sources(self, directory, specs):
+        sources = set()
+        for spec in specs:
+            specfn = os.path.join(directory, spec)
+            if not os.path.exists(specfn):
+                continue
+            with open(specfn) as f:
+                for line in f:
+                    m = re.match(r'Source[0-9]*\s*:\s*(.*)$', line)
+                    if not m:
+                        continue
+                    sources.add(m.group(1))
+        return sources
+
+    def detect_mentioned_patches(self, old, directory, specs):
+        # new packages have different rules
+        if not os.path.isdir(old):
+            return True
+        opatches = self.list_patches(old)
+        npatches = self.list_patches(directory)
+
+        cpatches = opatches.intersection(npatches)
+        opatches -= cpatches
+        npatches -= cpatches
+
+        if not npatches and not opatches:
+            return True
+
+        patches_to_mention = dict()
+        for p in opatches:
+            patches_to_mention[p] = 'old'
+        for p in npatches:
+            patches_to_mention[p] = 'new'
+        for changes in glob.glob(os.path.join(directory, '*.changes')):
+            base = os.path.basename(changes)
+            oldchanges = os.path.join(old, base)
+            if os.path.exists(oldchanges):
+                diff = self.difflines(oldchanges, changes)
+            else:
+                with open(changes, 'r') as f:
+                    diff = ['+' + line for line in f.readlines()]
+            for line in diff:
+                pass
+                # Check if the line mentions a patch being added (starts with 
+)
+                # or removed (starts with -)
+                if not re.match(r'[+-]', line):
+                    continue
+                # In any of those cases, remove the patch from the list
+                line = line[1:].strip()
+                for patch in list(patches_to_mention):
+                    if line.find(patch) >= 0:
+                        del patches_to_mention[patch]
+
+        # if a patch is mentioned as source, we ignore it
+        sources = self._mentioned_sources(directory, specs)
+        sources |= self._mentioned_sources(old, specs)
+
+        for s in sources:
+            patches_to_mention.pop(s, None)
+
+        if not patches_to_mention:
+            return True
+
+        lines = []
+        for patch, state in patches_to_mention.items():
+            # wording stolen from Raymond's declines :)
+            if state == 'new':
+                lines.append(f"A patch ({patch}) is being added without this 
addition being mentioned in the changelog.")
+            else:
+                lines.append(f"A patch ({patch}) is being deleted without this 
removal being mentioned in the changelog.")
+        self.review_messages['declined'] = '\n'.join(lines)
+        return False
+
+    def list_patches(self, directory):
+        ret = set()
+        for ext in ['*.diff', '*.patch', '*.dif']:
+            for file in glob.glob(os.path.join(directory, ext)):
+                ret.add(os.path.basename(file))
+        return ret
+
 
 class CommandLineInterface(ReviewBot.CommandLineInterface):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/dist/package/openSUSE-release-tools.spec
 
new/openSUSE-release-tools-20220325.205e07a9/dist/package/openSUSE-release-tools.spec
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/dist/package/openSUSE-release-tools.spec
       2022-03-24 18:35:19.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/dist/package/openSUSE-release-tools.spec
       2022-03-25 12:53:21.000000000 +0100
@@ -103,9 +103,7 @@
 %package check-source
 Summary:        Check source review bot
 Group:          Development/Tools/Other
-# check_source.pl
 Requires:       obs-service-download_files
-Requires:       obs-service-format_spec_file
 Requires:       obs-service-source_validator
 Requires:       osclib = %{version}
 Requires:       perl-Text-Diff
@@ -373,7 +371,6 @@
 %exclude %{_datadir}/%{source_dir}/abichecker
 %exclude %{_datadir}/%{source_dir}/%{announcer_filename}
 %exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
-%exclude %{_datadir}/%{source_dir}/check_source.pl
 %exclude %{_datadir}/%{source_dir}/check_source.py
 %exclude %{_datadir}/%{source_dir}/devel-project.py
 %exclude %{_datadir}/%{source_dir}/metrics
@@ -411,7 +408,6 @@
 
 %files check-source
 %{_bindir}/osrt-check_source
-%{_datadir}/%{source_dir}/check_source.pl
 %{_datadir}/%{source_dir}/check_source.py
 
 %files maintenance
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/osclib/stagingapi.py 
new/openSUSE-release-tools-20220325.205e07a9/osclib/stagingapi.py
--- old/openSUSE-release-tools-20220324.e25e4b7c/osclib/stagingapi.py   
2022-03-24 18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/osclib/stagingapi.py   
2022-03-25 12:53:21.000000000 +0100
@@ -881,7 +881,7 @@
         """
         freezetime = attribute_value_load(self.apiurl, project, 'FreezeTime')
         if freezetime:
-            freezetime = datetime.fromisoformat(freezetime)
+            freezetime = dateutil.parser.isoparse(freezetime)
             tz_info = freezetime.tzinfo
             return (datetime.now(tz_info) - freezetime).total_seconds() / 3600 
/ 24
         # fallback: old method
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/OBSLocal.py 
new/openSUSE-release-tools-20220325.205e07a9/tests/OBSLocal.py
--- old/openSUSE-release-tools-20220324.e25e4b7c/tests/OBSLocal.py      
2022-03-24 18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/tests/OBSLocal.py      
2022-03-25 12:53:21.000000000 +0100
@@ -152,7 +152,7 @@
         try:
             env = os.environ
             env['OSC_CONFIG'] = OSCRC
-            self.output = subprocess.check_output(args, 
stderr=subprocess.STDOUT, text=True, env=env)
+            self.output = subprocess.check_output(args, 
stderr=subprocess.STDOUT, universal_newlines=True, env=env)
         except subprocess.CalledProcessError as e:
             print(e.output)
             raise e
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/check_source_tests.py 
new/openSUSE-release-tools-20220325.205e07a9/tests/check_source_tests.py
--- old/openSUSE-release-tools-20220324.e25e4b7c/tests/check_source_tests.py    
2022-03-24 18:35:19.000000000 +0100
+++ new/openSUSE-release-tools-20220325.205e07a9/tests/check_source_tests.py    
2022-03-25 12:53:21.000000000 +0100
@@ -151,6 +151,25 @@
         self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
         self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
 
+    @pytest.mark.usefixtures("default_config")
+    def test_patch_as_source(self):
+        """Accepts a request if a new patch is a source"""
+        # switch target and devel, so basically do revert of changes done
+        # with patch and changes
+        self._setup_devel_project(devel_files='blowfish-patch-as-source',
+                                  target_files='blowfish')
+
+        req_id = self.wf.create_submit_request(self.devel_package.project,
+                                               self.devel_package.name, 
add_commit=False).reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
+        self.assertReview(req_id, by_group=(REVIEW_TEAM, 'new'))
+
     @pytest.mark.usefixtures("required_source_maintainer")
     def test_no_source_maintainer(self):
         """Declines the request when the 'required_maintainer' is not 
maintainer of the source project
@@ -347,6 +366,53 @@
         review = self.assertReview(req_id, by_user=(self.bot_user, 'declined'))
         self.assertEqual("Attention, README is not mentioned in spec files as 
source or patch.", review.comment)
 
+    @pytest.mark.usefixtures("default_config")
+    def test_source_urls(self):
+        """Soft-Declines invalid source URLs"""
+        self._setup_devel_project(devel_files='blowfish-with-urls')
+
+        req_id = self.wf.create_submit_request(self.devel_package.project,
+                                               self.devel_package.name, 
add_commit=False).reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        # not declined but not accepted either
+        review = self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+        self.assertIn("Source URLs are not valid. Try `osc service runall 
download_files`.\nblowfish-1.tar.gz", review.comment)
+
+    @pytest.mark.usefixtures("default_config")
+    def test_existing_source_urls(self):
+        """Accepts invalid source URLs if previously present"""
+        self._setup_devel_project(devel_files='blowfish-with-urls', 
target_files='blowfish-with-existing-url')
+
+        req_id = self.wf.create_submit_request(self.devel_package.project,
+                                               self.devel_package.name, 
add_commit=False).reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
+
+    @pytest.mark.usefixtures("default_config")
+    def test_two_patches_in_one_line(self):
+        """Accepts patches even if mentioned in one line"""
+        self._setup_devel_project(devel_files='blowfish-with-two-patches')
+
+        req_id = self.wf.create_submit_request(self.devel_package.project,
+                                               self.devel_package.name, 
add_commit=False).reqid
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'new'))
+
+        self.review_bot.set_request_ids([req_id])
+        self.review_bot.check_requests()
+
+        self.assertReview(req_id, by_user=(self.bot_user, 'accepted'))
+
     def _setup_devel_project(self, maintainer={}, 
devel_files='blowfish-with-patch-changes',
                              target_files='blowfish'):
         devel_project = self.wf.create_project(SRC_PROJECT, 
maintainer=maintainer)
Binary files 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/blowfish-1.tar.gz
 and 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/blowfish-1.tar.gz
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/blowfish.changes
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/blowfish.changes
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/blowfish.changes
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/blowfish.changes
      2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,10 @@
+-------------------------------------------------------------------
+Fri Mar 25 06:18:56 UTC 2022 - Stephan Kulow <co...@suse.com>
+
+- Not mentioning the patch!
+
+-------------------------------------------------------------------
+Thu Jul  8 07:36:30 UTC 2021 - Fisherman <fisher...@opensuse.org>
+
+- Initial version.
+- 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/blowfish.spec
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/blowfish.spec
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/blowfish.spec
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/blowfish.spec
 2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2020 SUSE LLC
+#
+# This file is under MIT license
+
+
+Name:           blowfish
+Version:        1
+Release:        0
+Summary:        Blowfish
+License:        GPL-2.0-only
+URL:            https://github.com/openSUSE/cockpit-wicked
+Source:         blowfish-1.tar.gz
+Source1:        test.patch
+BuildArch:      noarch
+
+%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/test.patch
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/test.patch
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-patch-as-source/test.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-patch-as-source/test.patch
    2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1 @@
+Not really a patch
Binary files 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-existing-url/blowfish-1.tar.gz
 and 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-existing-url/blowfish-1.tar.gz
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-existing-url/blowfish.changes
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-existing-url/blowfish.changes
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-existing-url/blowfish.changes
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-existing-url/blowfish.changes
    2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,5 @@
+-------------------------------------------------------------------
+Thu Jul  8 07:36:30 UTC 2021 - Fisherman <fisher...@opensuse.org>
+
+- Initial version.
+- 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-existing-url/blowfish.spec
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-existing-url/blowfish.spec
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-existing-url/blowfish.spec
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-existing-url/blowfish.spec
       2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2020 SUSE LLC
+#
+# This file is under MIT license
+
+
+Name:           blowfish
+Version:        1
+Release:        0
+Summary:        Blowfish
+License:        GPL-2.0-only
+URL:            https://github.com/openSUSE/cockpit-wicked
+Source:         https://example.com/blowfish-%{version}.tar.gz
+BuildArch:      noarch
+
+%changelog
Binary files 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/blowfish-1.tar.gz
 and 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/blowfish-1.tar.gz
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/blowfish.changes
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/blowfish.changes
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/blowfish.changes
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/blowfish.changes
     2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,10 @@
+-------------------------------------------------------------------
+Fri Mar 25 10:16:23 UTC 2022 - Stephan Kulow <co...@suse.com>
+
+- Add patch1.patch and patch2.patch
+
+-------------------------------------------------------------------
+Thu Jul  8 07:36:30 UTC 2021 - Fisherman <fisher...@opensuse.org>
+
+- Initial version.
+- 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/blowfish.spec
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/blowfish.spec
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/blowfish.spec
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/blowfish.spec
        2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,21 @@
+#
+# Copyright (c) 2020 SUSE LLC
+#
+# This file is under MIT license
+
+
+Name:           blowfish
+Version:        1
+Release:        0
+Summary:        Blowfish
+License:        GPL-2.0-only
+URL:            https://github.com/openSUSE/cockpit-wicked
+Source:         blowfish-1.tar.gz
+Patch1:         patch1.patch
+Patch2:         patch2.patch
+BuildArch:      noarch
+
+%prep
+%autopatch
+
+%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/patch1.patch
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/patch1.patch
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/patch1.patch
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/patch1.patch
 2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,5 @@
+--- test.orig  2022-03-25 11:15:38.793593897 +0100
++++ test       2022-03-25 11:15:42.585630853 +0100
+@@ -1 +1 @@
+-test
++test1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/patch2.patch
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/patch2.patch
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-two-patches/patch2.patch
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-two-patches/patch2.patch
 2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,5 @@
+--- test.orig  2022-03-25 11:15:42.585630853 +0100
++++ test       2022-03-25 11:16:07.273871454 +0100
+@@ -1 +1 @@
+-test1
++test2
Binary files 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-urls/blowfish-1.tar.gz
 and 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-urls/blowfish-1.tar.gz
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-urls/blowfish.changes
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-urls/blowfish.changes
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-urls/blowfish.changes
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-urls/blowfish.changes
    2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,10 @@
+-------------------------------------------------------------------
+Fri Mar 25 07:43:21 UTC 2022 - Stephan Kulow <co...@suse.com>
+
+- I have a cool new URL!
+
+-------------------------------------------------------------------
+Thu Jul  8 07:36:30 UTC 2021 - Fisherman <fisher...@opensuse.org>
+
+- Initial version.
+- 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-urls/blowfish.spec
 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-urls/blowfish.spec
--- 
old/openSUSE-release-tools-20220324.e25e4b7c/tests/fixtures/packages/blowfish-with-urls/blowfish.spec
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20220325.205e07a9/tests/fixtures/packages/blowfish-with-urls/blowfish.spec
       2022-03-25 12:53:21.000000000 +0100
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2020 SUSE LLC
+#
+# This file is under MIT license
+
+
+Name:           blowfish
+Version:        1
+Release:        0
+Summary:        Blowfish
+License:        GPL-2.0-only
+URL:            https://github.com/openSUSE/cockpit-wicked
+Source:         https://example.com/blowfish-%{version}.tar.gz
+BuildArch:      noarch
+
+%changelog

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.2TfF25/_old  2022-03-26 22:31:00.173948453 +0100
+++ /var/tmp/diff_new_pack.2TfF25/_new  2022-03-26 22:31:00.177948458 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20220324.e25e4b7c
-mtime: 1648143319
-commit: e25e4b7ceeca79e37616b88e50c689aeafc5ed02
+version: 20220325.205e07a9
+mtime: 1648209201
+commit: 205e07a9d442993b842f0d5dcf1dc49d1093b8c5
 

Reply via email to