Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package obs-service-source_validator for 
openSUSE:Factory checked in at 2026-09-02 16:58:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/obs-service-source_validator (Old)
 and      /work/SRC/openSUSE:Factory/.obs-service-source_validator.new.1265 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "obs-service-source_validator"

Wed Sep  2 16:58:25 2026 rev:93 rq:1375301 version:0.47

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/obs-service-source_validator/obs-service-source_validator.changes
        2026-07-08 17:39:02.626710259 +0200
+++ 
/work/SRC/openSUSE:Factory/.obs-service-source_validator.new.1265/obs-service-source_validator.changes
      2026-09-02 16:58:39.526833331 +0200
@@ -1,0 +2,51 @@
+Wed Sep 02 07:01:39 UTC 2026 - Dirk Müller <[email protected]>
+
+- Update to version 0.47:
+  * Avoid running git in a potentially unsafe manner
+  * Remove unnecessary BASE variable
+
+-------------------------------------------------------------------
+Tue Sep 01 09:56:55 UTC 2026 - Dirk Müller <[email protected]>
+
+- Update to version 0.46.1:
+  * Fix service handling
+
+-------------------------------------------------------------------
+Tue Sep 01 09:50:23 UTC 2026 - Dirk Müller <[email protected]>
+
+- Update to version 0.46:
+  * avoid legacy shell back ticks
+  * Readability improvements
+  * Fix source-tracking regressions and adding a testcase
+  * Fix source-tracking regressions and adding a testcase
+  * Avoid a few shellcheck warnings
+  * Revert excessive git related warnings check
+- drop revert-pr161.patch (obsolete)
+
+-------------------------------------------------------------------
+Tue Sep  1 08:21:46 UTC 2026 - Dirk Müller <[email protected]>
+
+- add revert-pr161.patch
+
+-------------------------------------------------------------------
+Mon Aug 31 15:01:35 UTC 2026 - Dirk Müller <[email protected]>
+
+- Update to version 0.45:
+  * Git add the sources to make the git testing working
+  * switch to ubuntu 26.04
+- drop obs-service-source_validator-test-git-init.patch (upstream)
+
+-------------------------------------------------------------------
+Mon Aug 31 14:06:45 UTC 2026 - Dirk Müller <[email protected]>
+
+- Update to version 0.44:
+  * Small test case for current factory remoteasset policy
+  * Fix remoteasset validation
+  * Move git related check out of OSC section
+  * Ignore .gitignore or AI related files
+  * 20-files-present-and-referenced: ignore .obs directory
+  * Use a wider-scoped wildcard for ignoring Debian special files
+  * Add test data for declarative BuildSystem
+  * ci: make the test suite run even from the tarball
+
+-------------------------------------------------------------------

Old:
----
  obs-service-source_validator-0.43.tar.xz
  obs-service-source_validator-test-git-init.patch

New:
----
  obs-service-source_validator-0.47.tar.xz

----------(Old B)----------
  Old:  * switch to ubuntu 26.04
- drop obs-service-source_validator-test-git-init.patch (upstream)
----------(Old E)----------

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

Other differences:
------------------
++++++ obs-service-source_validator.spec ++++++
--- /var/tmp/diff_new_pack.EyzMPZ/_old  2026-09-02 16:58:40.237858048 +0200
+++ /var/tmp/diff_new_pack.EyzMPZ/_new  2026-09-02 16:58:40.238858083 +0200
@@ -22,7 +22,7 @@
 %define build_pkg_name obs-build
 %endif
 Name:           obs-service-source_validator
-Version:        0.43
+Version:        0.47
 Release:        0
 Summary:        An OBS source service: running all the osc source-validator 
checks
 License:        GPL-2.0-or-later
@@ -30,7 +30,6 @@
 URL:            https://github.com/openSUSE/obs-service-source_validator
 # use osc service mr to update
 Source:         %{name}-%{version}.tar.xz
-Patch0:         obs-service-source_validator-test-git-init.patch
 BuildRequires:  %{build_pkg_name}
 BuildRequires:  git-core
 BuildRequires:  zstd
@@ -40,6 +39,7 @@
 Requires:       bzip2
 Requires:       diffutils
 Requires:       patch
+Requires:       perl = %{perl_version}
 Requires:       perl-TimeDate
 Requires:       unzip
 Requires:       xz

++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.EyzMPZ/_old  2026-09-02 16:58:40.284859682 +0200
+++ /var/tmp/diff_new_pack.EyzMPZ/_new  2026-09-02 16:58:40.288859821 +0200
@@ -1,5 +1,5 @@
 pkgname=obs-service-source_validator
-pkgver=0.43
+pkgver=0.47
 pkgrel=0
 pkgdesc='An OBS source service: running all the osc source-validator checks'
 arch=('any')

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.EyzMPZ/_old  2026-09-02 16:58:40.341861664 +0200
+++ /var/tmp/diff_new_pack.EyzMPZ/_new  2026-09-02 16:58:40.346861837 +0200
@@ -3,6 +3,6 @@
             <param 
name="url">git://github.com/openSUSE/obs-service-source_validator.git</param>
           <param 
name="changesrevision">c68d7a28c4ecd88b179359b030098503e75adc0b</param></service><service
 name="tar_scm">
                 <param 
name="url">https://github.com/openSUSE/obs-service-source_validator.git</param>
-              <param 
name="changesrevision">b2ab4c8f41cfeefbceae5886721140fc359ee9ce</param></service></servicedata>
+              <param 
name="changesrevision">26c1c51f77936c4a659f6ef2b919cdcd2bd100cb</param></service></servicedata>
 (No newline at EOF)
 

++++++ debian.dsc ++++++
--- /var/tmp/diff_new_pack.EyzMPZ/_old  2026-09-02 16:58:40.371862706 +0200
+++ /var/tmp/diff_new_pack.EyzMPZ/_new  2026-09-02 16:58:40.379862984 +0200
@@ -1,6 +1,6 @@
 Format: 1.0
 Source: obs-service-source-validator
-Version: 0.43-0
+Version: 0.47-0
 Binary: obs-service-source-validator
 Maintainer: Hib Eris <[email protected]>
 Architecture: all

++++++ obs-service-source_validator-0.43.tar.xz -> 
obs-service-source_validator-0.47.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/20-files-present-and-referenced 
new/obs-service-source_validator-0.47/20-files-present-and-referenced
--- old/obs-service-source_validator-0.43/20-files-present-and-referenced       
2026-07-07 22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/20-files-present-and-referenced       
2026-09-02 09:01:08.000000000 +0200
@@ -5,32 +5,33 @@
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
 OSC_MODE=""
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 BASE_DIR=$(dirname $0)
 BASE_DIR=${BASE_DIR:-.}
 HELPERS_DIR="$BASE_DIR/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 . $HELPERS_DIR/functions
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && {
-       if [ -d "$DIR_TO_CHECK/.git" ]; then
-            DESTINATIONDIR="$DIR_TO_CHECK"
-       else
-            OSCLIBVER="$(<.osc/_osclib_version)"
-            case "$OSCLIBVER" in
-              1.0)
+
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && {
+    if [ -d "$DIR_TO_CHECK/.git" ]; then
+        DESTINATIONDIR="$DIR_TO_CHECK"
+    else
+        OSCLIBVER="$(<.osc/_osclib_version)"
+        case "$OSCLIBVER" in
+            1.0)
                 DESTINATIONDIR="$DIR_TO_CHECK/.osc"
                 DOTOSCDIR="$DIR_TO_CHECK/.osc"
                 ;;
-              2.0)
+            2.0)
                 DESTINATIONDIR="$DIR_TO_CHECK/.osc/sources"
                 DOTOSCDIR="$DIR_TO_CHECK/.osc"
                 ;;
-              *)
+            *)
                 echo "osclib version $OSCLIBVER not yet supported by 
source_validator" && exit 2
                 ;;
-            esac
-       fi
-       OSC_MODE="true"
+        esac
+    fi
+    OSC_MODE="true"
 }
 
 RETURN=0
@@ -40,7 +41,7 @@
 #
 cleanup_and_exit () {
     if [ -n "$TMPDIR" ];then
-       rm -rf $TMPDIR
+        rm -rf "$TMPDIR"
     fi
     exit $1
 }
@@ -49,19 +50,22 @@
 # display a warning if the file is not in the spec file sources
 #
 warn_on_unmentioned_files () {
-  grep -q -F -a -x -- $1 $TMPDIR/sources || echo "(W) Attention, \"$1\" is not 
mentioned in spec files as source or patch."
+  grep -q -F -a -x -- $1 $TMPDIR/sources || \
+  grep -q -F -a -x -- $1 $TMPDIR/dirassets || \
+  grep -q -E -- "/$1$" $TMPDIR/moveassets || \
+  echo "(W) Attention, \"$1\" is not mentioned in spec files as source or 
patch."
 }
 
-test "$VERBOSE" = true && echo -n "- checking if needed files are present and 
none stale "
+test "$VERBOSE" = true && echo "- checking if needed files are present and 
none stale "
 #
 # first make my TMPDIR
 #
-export TMPDIR=`mktemp -d -t check_if_valid_source_dir-XXXXXX 2>/dev/null || 
mktemp -d /var/tmp/check_if_valid_source_dir-XXXXXX` || cleanup_and_exit 1
+export TMPDIR=$(mktemp -d -t check_if_valid_source_dir-XXXXXX 2>/dev/null || 
mktemp -d /var/tmp/check_if_valid_source_dir-XXXXXX) || cleanup_and_exit 1
 
 #
 # now create list of Sources.
 #
-MY_ARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e 
s/sa110/arm/`
+MY_ARCH=$(uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ 
-e s/sa110/arm/)
 case $MY_ARCH in
   i386)
     MY_ARCH="%ix86"
@@ -72,61 +76,64 @@
 esac
 
 while read recipe flavor; do
-       $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" 
--print-sources --buildflavor "$flavor" \
-       --no-conditionals --keep-name-conditionals --disambiguate-sources \
+    $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" 
--print-sources --buildflavor "$flavor" \
+        --no-conditionals --keep-name-conditionals --disambiguate-sources \
         >> "$TMPDIR/sources" 2>"$TMPDIR/sources.err"
-        # ignore expand errors with macro scripts
-       sed -i "/can't expand %(...)/d" "$TMPDIR/sources.err"
-       # ignore macro nesting reported by build script
-       sed -i "/^Warning: spec file parser  line [0-9]\+: macro too deeply 
nested$/d" "$TMPDIR/sources.err"
-       if [ -s "$TMPDIR/sources.err" ]; then
-           echo "Unable to extract sources from spec - spec_query failed:"
-           cat "$TMPDIR/sources.err"
-           cleanup_and_exit 1
-       fi
-       $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" 
--print-moveassets --buildflavor "$flavor" \
-       --no-conditionals --keep-name-conditionals --disambiguate-sources \
-        | sed 's,^.*/,,' \
-        >> "$TMPDIR/moveassettargets" 2>"$TMPDIR/sources.err"
+    # ignore expand errors with macro scripts
+    sed -i "/can't expand %(...)/d" "$TMPDIR/sources.err"
+    # ignore macro nesting reported by build script
+    sed -i "/^Warning: spec file parser  line [0-9]\+: macro too deeply 
nested$/d" "$TMPDIR/sources.err"
+    if [ -s "$TMPDIR/sources.err" ]; then
+        echo "Unable to extract sources from spec - spec_query failed:"
+        cat "$TMPDIR/sources.err"
+        cleanup_and_exit 1
+    fi
+    $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" 
--print-dirassets --buildflavor "$flavor" \
+        --no-conditionals --keep-name-conditionals --disambiguate-sources \
+        >> "$TMPDIR/dirassets" 2>"$TMPDIR/sources.err"
+    $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" 
--print-moveassets --buildflavor "$flavor" \
+        --no-conditionals --keep-name-conditionals --disambiguate-sources \
+        >> "$TMPDIR/moveassets" 2>"$TMPDIR/sources.err"
 done < <(spec_build_flavors "$DIR_TO_CHECK")
+
 for i in "$DIR_TO_CHECK"/*.dsc ; do
-       test -f "$i" || continue
-       ( sed -ne '/^Files:/,$p' < "$i" | sed -e 1d | sed -e '/^[^ ]/,$d' | 
while read debchk debsize debfile ; do echo "$debfile" ; done ) >> 
$TMPDIR/sources
+    test -f "$i" || continue
+    ( sed -ne '/^Files:/,$p' < "$i" | sed -e 1d | sed -e '/^[^ ]/,$d' | while 
read debchk debsize debfile ; do echo "$debfile" ; done ) >> $TMPDIR/sources
 done
 
 # Add debian only patches to the allowed sources list.
 # but strip tailing -p1 arguments
 test -f "$DIR_TO_CHECK/debian.series" && \
-  sed -e '/^$/d' -e '/^#/d' -e 's,[ \t]*-p[0123456789]*$,,' \
-  "$DIR_TO_CHECK/debian.series" >> $TMPDIR/sources
+    sed -e '/^$/d' -e '/^#/d' -e 's,[ \t]*-p[0123456789]*$,,' \
+    "$DIR_TO_CHECK/debian.series" >> $TMPDIR/sources
 
 test -f $TMPDIR/sources || cleanup_and_exit
 
 #
 # check if all Sources, patches and the icon are present
 #
-touch $TMPDIR/sources.t
-
-for i in `cat $TMPDIR/sources` ; do
-       echo "${i##*/}" >> $TMPDIR/sources.t
-done
-mv $TMPDIR/sources.t $TMPDIR/sources
+unify_sources()
+{
+    touch "$TMPDIR/sources.t"
+    for f in sources "$@" ; do
+        for i in $(< $TMPDIR/"$f") ; do
+            echo "${i##*/}" >> "$TMPDIR/sources.t"
+        done
+    done
+    sort -u "$TMPDIR/sources.t" > "$TMPDIR/sources"
+    rm "$TMPDIR/sources.t"
+}
+sed -i -e 's,.*/,,' $TMPDIR/dirassets
+unify_sources "moveassets"
 
 # XML validate files starting with _..
-if [ -x $(type -p xmllint) ]; then
-    for i in "$DIR_TO_CHECK/_service"; do
-        test -f "$i" || continue
-        BASE="${i##*/}"
-
-        xmllint --format "$i" >/dev/null || {
-            echo "ERROR: $(basename -- $i) is not valid XML"
+if [ -x "$(type -p xmllint)" ]; then
+    if test -f "$DIR_TO_CHECK/_service"; then
+        if ! xmllint --format "$DIR_TO_CHECK/_service" >/dev/null ; then
+            echo "ERROR: _service is not valid XML"
             RETURN=2
-            continue
-        }
-
-        # Check if _service is sane
-        if [ "$BASE" = "_service" ]; then
-            xmllint --format "$i" > $TMPDIR/_service
+        else
+            xmllint --format "$DIR_TO_CHECK/_service" > $TMPDIR/_service
 
             if grep -E -q "service .*mode=." $TMPDIR/_service \
                     && ! grep -E -q "service 
.*mode=.(disabled|manual|buildtime|localonly)" \
@@ -134,8 +141,7 @@
                 echo "(W) openSUSE: projects only allow 'manual' or 
'buildtime' services (localonly/disabled are deprecated)."
             fi
         fi
-
-    done
+    fi
 fi
 
 obscpio_file_list()
@@ -157,20 +163,21 @@
     cat "$TMPDIR/obscpio_sources"
 }
 
+safe_git() {
+    local target_dir="$1"
+    shift
+
+    env GIT_CONFIG_NOSYSTEM=1 GIT_ADVICE=0 \
+        git -c core.hooksPath=/dev/null -c safe.bareRepository=explicit \
+        --git-dir="$target_dir/.git" --work-tree="$target_dir" \
+        "$@"
+}
+
 check_tracked()
 {
     local file=${1##*/}
-    if grep -q "^$file" "$TMPDIR/moveassettargets"; then
-        # it will generated at build time
-        return 0
-    fi
+    local silent=${2}
     if test "$OSC_MODE" = "true" ; then
-        if test -x "$(type -p git)" && test -d "$DIR_TO_CHECK/.git"; then
-            if git --git-dir="$DIR_TO_CHECK/.git" ls-files --error-unmatch 
"$file" > /dev/null; then
-                return 0
-            fi
-            return 1
-        fi
         if test -f "$DESTINATIONDIR/$file" && ! grep -qsFx "$file" 
"$DOTOSCDIR/_to_be_deleted"; then
             return 0
         fi
@@ -184,9 +191,22 @@
         if obscpio_file_list | grep -qFx "$file"; then
             return 0
         fi
-        echo "ERROR: $file mentioned in spec file is not tracked."
+        [ -n "$silent" ] || echo "ERROR: $file mentioned in spec file is not 
tracked."
         return 1
     fi
+
+    # working in local clone. osc may or may be not used.
+    if test -x "$(type -p git)" && test -d "$DIR_TO_CHECK/.git" && test -f 
"$DIR_TO_CHECK/.git/config" && test -f "$DIR_TO_CHECK/$file"; then
+        if safe_git "$DIR_TO_CHECK" check-ignore -q "$file"; then
+            # temporary data, marked intentionally by the packager, handle it 
as untracked
+            return 1
+        fi
+        if safe_git "$DIR_TO_CHECK" ls-files --error-unmatch "$file" > 
/dev/null; then
+            return 0
+        fi
+        return 1
+    fi
+
     if ! test -f "$DIR_TO_CHECK/$file"; then
         if test -f "$DIR_TO_CHECK/${file/\.tar*/}.obscpio"; then
             # assume it will generated on builtime based of the archive
@@ -195,17 +215,28 @@
         if obscpio_file_list | grep -qFx "$file"; then
             return 0
         fi
-        echo "ERROR: $file mentioned in spec file does not exist."
+        [ -n "$silent" ] || echo "ERROR: $file mentioned in spec file does not 
exist."
         return 1
     fi
 }
 
+# normal source files
 if ! test -f "$DIR_TO_CHECK/_service"; then
     for HASTOBETHERE in $(<$TMPDIR/sources); do
         check_tracked "$HASTOBETHERE" || RETURN=2
     done
 fi
 
+# current policy is that a remote asset needs to be committed as part of the 
git.
+# So either a directory or an archive.
+for m in $(<$TMPDIR/moveassets); do
+       check_tracked "${m##*/}" silent && continue
+       check_tracked "${m%/*}" silent && continue
+       echo "ERROR: Current policy is to submit some part of a remote asset."
+       echo "       Either archive ${m##*/} or directory ${m%/*}."
+       RETURN=2
+done
+
 for f in $(<$TMPDIR/sources); do
     if test ! -f "$DIR_TO_CHECK/$f"; then
         continue
@@ -251,7 +282,7 @@
        get_release_number.sh | \
        check-build.sh | \
        baselibs.conf )
-           if test -n "$DESTINATIONDIR" -a -f "$DESTINATIONDIR/$BASE" && cmp 
-s "$DIR_TO_CHECK/$BASE" "$DESTINATIONDIR/$BASE" ; then
+           if test -n "$DESTINATIONDIR" && test -f "$DESTINATIONDIR/$BASE" && 
cmp -s "$DIR_TO_CHECK/$BASE" "$DESTINATIONDIR/$BASE" ; then
                echo "- package has $BASE: (unchanged)"
            else
                echo "- package has $BASE: (new or modified)"
@@ -265,8 +296,8 @@
                if test "$BATCHMODE" != true ; then
                    echo -n "Is this correct? [N/y/d] (y to ignore) "
                    read ANSWER
-                   test "$ANSWER" = y -o "$ANSWER" = Y || {
-                       if test "$ANSWER" = d -o "$ANSWER" = D ; then
+                   test "$ANSWER" = y || test "$ANSWER" = Y || {
+                       if test "$ANSWER" = d || test "$ANSWER" = D ; then
                            rm -v -- "$DIR_TO_CHECK/$BASE"
                        else
                            echo ok, please fix it...
@@ -284,7 +315,7 @@
 
            ;;
        *rpmlintrc)
-           if test -n "$DESTINATIONDIR" -a -f "$DESTINATIONDIR/$BASE" && cmp 
-s "$DIR_TO_CHECK/$BASE" "$DESTINATIONDIR/$BASE" ; then
+           if test -n "$DESTINATIONDIR" && test -f "$DESTINATIONDIR/$BASE" && 
cmp -s "$DIR_TO_CHECK/$BASE" "$DESTINATIONDIR/$BASE" ; then
                echo "- package has $BASE: (unchanged)"
            else
                echo "- package has $BASE: (new or modified)"
@@ -298,8 +329,8 @@
                if test "$BATCHMODE" != true ; then
                    echo -n "Is this correct? [N/y/d] (y to ignore) "
                    read ANSWER
-                   test "$ANSWER" = y -o "$ANSWER" = Y || {
-                       if test "$ANSWER" = d -o "$ANSWER" = D ; then
+                   test "$ANSWER" = y || test "$ANSWER" = Y || {
+                       if test "$ANSWER" = d || test "$ANSWER" = D ; then
                            rm -v -- "$DIR_TO_CHECK/$BASE"
                        else
                            echo ok, please fix it...
@@ -320,7 +351,7 @@
                    echo "       $LINE"
                    echo -n "Is this correct? [N/y] (y to ignore) "
                    read ANSWER
-                   test "$ANSWER" = y -o "$ANSWER" = Y || {
+                   test "$ANSWER" = y || test "$ANSWER" = Y || {
                        echo ok, please fix it...
                        test "$RETURN" != "2" && RETURN=1
                    }
@@ -354,6 +385,7 @@
        .check_if_valid_source_dir | \
        .setup | \
        *.dsc | \
+       .obs | \
        *.obscpio | \
        *.obsinfo | \
        ready | \
@@ -367,52 +399,33 @@
        .emacs.backup | \
        PKGBUILD | \
        appimage.yml | \
-       debian.changelog | \
-       debian.compat | \
-       debian.control | \
-       debian.copyright | \
-       debian.lintian-overrides | \
-       debian.manpages | \
-       debian.postinst | \
-       debian.postrm | \
-       debian.preinst | \
-       debian.prerm | \
-       debian.rules | \
-       debian.series | \
-       debian.tar.gz | \
-       debian.triggers | \
-       debian.format | \
-       debian.*.default | \
-       debian.*.dirs | \
-       debian.*.docs | \
-       debian.*.files | \
-       debian.*.init | \
-       debian.*.install | \
-       debian.*.logrotate | \
-       debian.*.manpages | \
-       debian.*.postinst | \
-       debian.*.postrm | \
-       debian.*.preinst | \
-       debian.*.prerm | \
-       debian.*.triggers | \
-       debian.*.lintian-overrides )
+       debian.*)
            ;;
        *)
             grep -q -F -a -x -- "$BASE" $TMPDIR/sources && continue
             test -f "$DIR_TO_CHECK/_service" && grep -E -q 'mode=.remoterun' 
"$DIR_TO_CHECK/_service" && continue
             test -f "$DIR_TO_CHECK/_service" && grep -E -q 
'name=.product_converter' "$DIR_TO_CHECK/_service" && continue
-            # be a bit more relaxed for osc, it won't upload directories anyway
-            [ -d "$DIR_TO_CHECK/$BASE" ] && [ -d  "$DIR_TO_CHECK/.osc" ] && 
continue
+            # be a bit more relaxed for legacy OBS sources, osc won't upload 
directories anyway
+            [ -d "$DIR_TO_CHECK/$BASE" ] && [ -d  "$DIR_TO_CHECK/.osc" ] && [ 
! -e "$DIR_TO_CHECK/.git" ] && continue
             # and source services on server side
             [ -d "$DIR_TO_CHECK/$BASE" ] && [ -d "$DIR_TO_CHECK/.old" ] && 
continue
 
-            # ignore files that are ignored by git
-            if test -x "$(type -p git)" && test -f "$DIR_TO_CHECK/.gitignore"; 
then
-                if (cd "$DIR_TO_CHECK" && git check-ignore -q --no-index 
"$BASE"); then
+            # ignore files that are ignored by "it
+            if test -x "$(type -p git)" && test -d "$DIR_TO_CHECK/.git" && 
test -f "$DIR_TO_CHECK/.gitignore"; then
+                if safe_git "$DIR_TO_CHECK" check-ignore -q "$BASE"; then
                     continue
                 fi
             fi
 
+            # Check if either directory or resulting archive is committed 
according to current factory policy
+            if grep -q -F -a -x -- "$BASE" "$TMPDIR/dirassets" && 
check_tracked "$BASE"; then
+                # we should maybe also check if the createarchive directive is 
set?
+                continue
+            fi
+            if grep -q -E -- "/$BASE$" "$TMPDIR/moveassets" && check_tracked 
"$BASE"; then
+                continue
+            fi
+
             warn_on_unmentioned_files "$BASE"
 
             if test "$RETURN" != "2" ; then
@@ -425,12 +438,12 @@
                             echo    "ignore and continue with 'y'"
                             echo -n "Is this correct? [N/y/r] "
                             read ANSWER
-                            test "$ANSWER" = y -o "$ANSWER" = Y || {
+                            test "$ANSWER" = y || test "$ANSWER" = Y || {
                             # r for remove is also accepted, to make it 
compatible with osc itself
-                            if test "$ANSWER" = d -o "$ANSWER" = D -o 
"$ANSWER" = r -o "$ANSWER" = R; then
+                            if test "$ANSWER" = d || test "$ANSWER" = D || 
test "$ANSWER" = r || test "$ANSWER" = R; then
                                 rm -Rfv -- "$DIR_TO_CHECK/$BASE"
                             else
-                                echo ok, please fix it...
+                                echo "ok, please fix it..."
                                 test "$RETURN" != "2" && RETURN=1
                             fi
                         }
@@ -442,8 +455,8 @@
                if test "$BATCHMODE" != true ; then
                    echo -n "Is this correct? [N/y/d] (y to ignore) "
                    read ANSWER
-                   test "$ANSWER" = y -o "$ANSWER" = Y || {
-                       if test "$ANSWER" = d -o "$ANSWER" = D ; then
+                   test "$ANSWER" = y || test "$ANSWER" = Y || {
+                       if test "$ANSWER" = d || test "$ANSWER" = D ; then
                            rm -v "$DIR_TO_CHECK/$BASE"
                        else
                            echo ok, please fix it...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/30-patches-applied 
new/obs-service-source_validator-0.47/30-patches-applied
--- old/obs-service-source_validator-0.43/30-patches-applied    2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/30-patches-applied    2026-09-02 
09:01:08.000000000 +0200
@@ -6,13 +6,13 @@
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
 
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 BASE_DIR=$(dirname $0)
 BASE_DIR=${BASE_DIR:-.}
 HELPERS_DIR="$BASE_DIR/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 RETURN=0
 
 test "$VERBOSE" = true && echo -n "- checking if all metioned patches are 
being applied in specfile "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/40-sequence-changes 
new/obs-service-source_validator-0.47/40-sequence-changes
--- old/obs-service-source_validator-0.43/40-sequence-changes   2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/40-sequence-changes   2026-09-02 
09:01:08.000000000 +0200
@@ -4,11 +4,11 @@
 test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 
 test "$VERBOSE" = true && echo -n "- checking for sequence in changes files "
 FIRST_CHANGES=""
@@ -21,7 +21,7 @@
     fi
     RETURN=0
     test -n "$FIRST_CHANGES" || FIRST_CHANGES=$i
-    if test -n "$FIRST_CHANGES" -a "$FIRST_CHANGES" != "$i" ; then
+    if test -n "$FIRST_CHANGES" && test "$FIRST_CHANGES" != "$i" ; then
         if cmp -s $FIRST_CHANGES "$i" ; then
             continue
         fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/45-stale-changes 
new/obs-service-source_validator-0.47/45-stale-changes
--- old/obs-service-source_validator-0.43/45-stale-changes      2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/45-stale-changes      2026-09-02 
09:01:08.000000000 +0200
@@ -4,11 +4,11 @@
 test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 . $HELPERS_DIR/functions
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 
 RETURN=0
 test "$VERBOSE" = true && echo -n "- checking for stale or missing changes "
@@ -24,7 +24,7 @@
 done < <(spec_build_flavors "$DIR_TO_CHECK")
 }
 
-SPECLIST=`print_specs | sort -u`
+SPECLIST=$(print_specs | sort -u)
 DO_PASS=""
 
 test -n "$SPECLIST" && {
@@ -42,7 +42,7 @@
 # check for stale .changes files
 for i in "$DIR_TO_CHECK"/*.changes ; do
     test -f "$i" || continue
-    N=`basename "$i" .changes`
+    N=$(basename "$i" .changes)
     OKAY=0
     for pack in $SPECLIST ; do
         test "$pack" = "$N" && OKAY=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/50-spec-version 
new/obs-service-source_validator-0.47/50-spec-version
--- old/obs-service-source_validator-0.43/50-spec-version       2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/50-spec-version       2026-09-02 
09:01:08.000000000 +0200
@@ -4,11 +4,11 @@
 test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 RETURN=0
 
 test "$VERBOSE" = true && echo -n "- checking version in specfile "
@@ -18,7 +18,7 @@
     test "$VERBOSE" = true && echo -n "."
     RETURN=0
     grep -a ^Version: "$i" > /dev/null || {
-        echo ERROR: Can not recognize Version in `basename "$i"`.
+        echo ERROR: Can not recognize Version in $(basename "$i").
         echo Remember that Version: must be at the beginning of line.
         RETURN=1
     }
@@ -26,7 +26,7 @@
         case "$VERSION" in
           AUTO)
             test -e "$DIR_TO_CHECK"/get_version_number.sh || {
-                echo ERROR: `basename "$i"` has Version \"AUTO\" but 
get_version_number.sh does not exist.
+                echo ERROR: $(basename "$i") has Version \"AUTO\" but 
get_version_number.sh does not exist.
                 RETURN=1
             }
           ;;
@@ -43,11 +43,11 @@
                fi
           ;;
           *-*)
-            echo ERROR: `basename "$i"` has a Version with a \"-\". This is 
not allowed.
+            echo ERROR: $(basename "$i") has a Version with a \"-\". This is 
not allowed.
             RETURN=1
           ;;
           "")
-            echo ERROR: `basename "$i"` has empty  Version field. This is not 
allowed.
+            echo ERROR: $(basename "$i") has empty  Version field. This is not 
allowed.
             RETURN=1
           ;;
         esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/60-spec-filelist 
new/obs-service-source_validator-0.47/60-spec-filelist
--- old/obs-service-source_validator-0.43/60-spec-filelist      2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/60-spec-filelist      2026-09-02 
09:01:08.000000000 +0200
@@ -4,11 +4,11 @@
 test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 
 test "$VERBOSE" = true && echo -n "- checking forbidden paths in filelists "
 RETURN=0
@@ -19,7 +19,7 @@
     IS_FILE_LIST=false
     RETURN=0
 
-    if test -f "$SPECFILE" -a -s "$SPECFILE" ; then
+    if test -f "$SPECFILE" && test -s "$SPECFILE" ; then
        SEDOUT=$(sed -ne "/^%file/,\${;p;}" "$SPECFILE")
         while read -r LINE ; do
             case "$LINE" in
@@ -33,7 +33,7 @@
                     case $LINE in
                       */usr/man/*|*/usr/info/*|*/usr/bin/X11/*)
                         RETURN=1
-                        echo "ERROR: " `basename "$SPECFILE"` uses forbidden 
file path \"$LINE\".
+                        echo "ERROR: " $(basename "$SPECFILE") uses forbidden 
file path \"$LINE\".
                       ;;
                     esac
                 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/70-baselibs 
new/obs-service-source_validator-0.47/70-baselibs
--- old/obs-service-source_validator-0.43/70-baselibs   2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/70-baselibs   2026-09-02 
09:01:08.000000000 +0200
@@ -4,11 +4,11 @@
 test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
 DIR_TO_CHECK="$1"
 DESTINATIONDIR="$2"
-test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
+test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=$(pwd)
 HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
 $HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
 . $HELPERS_DIR/functions
-test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
+test -z "$DESTINATIONDIR" && test -d "$DIR_TO_CHECK/.osc" && 
DESTINATIONDIR="$DIR_TO_CHECK/.osc"
 
 containsElement () {
   local e
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/Makefile 
new/obs-service-source_validator-0.47/Makefile
--- old/obs-service-source_validator-0.43/Makefile      2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/Makefile      2026-09-02 
09:01:08.000000000 +0200
@@ -34,11 +34,14 @@
        ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/coreutils.spec
        ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/continue-line.spec
        ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/cross-aarch64-gcc7.spec
-       ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/glibc.spec
+       ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/glibc.spec --print-sources > 
t/data/glibc.sources.stdout
+       cmp -s t/data/glibc.sources.stdout t/data/glibc.sources.expected || 
echo "mismatched sources"
        ./helpers/spec_query --no-conditionals --keep-name-conditionals 
--disambiguate-sources --specfile t/data/glibc.spec --buildflavor testsuite
        ./30-patches-applied t/data/declarative/
        ./20-files-present-and-referenced t/data/x2d/
        ./t/test_gitignore.sh
+       ./t/test_remoteasset.sh
+       ./t/test_files_referenced.sh
 
 
 .PHONY: all install package test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/helpers/check_dates_in_changes 
new/obs-service-source_validator-0.47/helpers/check_dates_in_changes
--- old/obs-service-source_validator-0.43/helpers/check_dates_in_changes        
2026-07-07 22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/helpers/check_dates_in_changes        
2026-09-02 09:01:08.000000000 +0200
@@ -67,10 +67,11 @@
                 TROUBLE_FOUND=true
                 continue
             fi
-            test $? -gt 0 -o -z "$DATE" -o "$LAST_IS_YEAR" != true -o "$DATE" 
-gt "$now" && {
+            STATUS=$?
+            if test "$STATUS" -gt 0 || test -z "$DATE" || test "$LAST_IS_YEAR" 
!= true || test "$DATE" -gt "$now"; then
                 echo "ERROR: INVALID DATE \"$DATESTR\" ($CHANGES:$lineno)"
                 TROUBLE_FOUND=true
-            }
+            fi
     done < "$CHANGES"
 done
 if test $TROUBLE_FOUND = false ; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/helpers/spec_query 
new/obs-service-source_validator-0.47/helpers/spec_query
--- old/obs-service-source_validator-0.43/helpers/spec_query    2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/helpers/spec_query    2026-09-02 
09:01:08.000000000 +0200
@@ -150,10 +150,15 @@
   print "\n";
 }
 
+sub print_dirassets {
+  my ($descr) = @_;
+  print "@{$descr->{'dirassets'}} " if @{$descr->{'dirassets'}};
+  print "\n";
+}
+
 sub print_sources {
   my ($descr) = @_;
   print "@{$descr->{'sources'}} " if @{$descr->{'sources'}};
-  print "@{$descr->{'dirassets'}} " if $descr->{'dirassets'};
   print "@{$descr->{'patches'}} " if @{$descr->{'patches'}};
   print "@{$descr->{'icons'}}" if @{$descr->{'icons'}};
   print "\n";
@@ -185,6 +190,7 @@
 
 my $specfile;
 my $arch = 'noarch';
+my $print_dirassets;
 my $print_moveassets;
 my $print_subpacks;
 my $print_sources;
@@ -206,6 +212,8 @@
     $buildflavor = shift @ARGV;
   } elsif ($opt eq '--print-subpacks') {
     $print_subpacks = 1;
+  } elsif ($opt eq '--print-dirassets') {
+    $print_dirassets = 1;
   } elsif ($opt eq '--print-moveassets') {
     $print_moveassets = 1;
   } elsif ($opt eq '--print-sources') {
@@ -229,4 +237,5 @@
                   $unique_sources, $disambiguate_sources, $buildflavor);
 print_subpacks($descr) if $print_subpacks;
 print_sources($descr) if $print_sources;
+print_dirassets($descr) if $print_dirassets;
 print_moveassets($descr) if $print_moveassets;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/data/declarative/gnome-calendar.spec 
new/obs-service-source_validator-0.47/t/data/declarative/gnome-calendar.spec
--- 
old/obs-service-source_validator-0.43/t/data/declarative/gnome-calendar.spec    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/obs-service-source_validator-0.47/t/data/declarative/gnome-calendar.spec    
    2026-09-02 09:01:08.000000000 +0200
@@ -0,0 +1,92 @@
+#
+# spec file for package gnome-calendar
+#
+# Copyright (c) 2026 SUSE LLC and contributors
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
+
+
+Name:           gnome-calendar
+Version:        50.0
+Release:        0
+Summary:        A calendar application for GNOME
+License:        GPL-3.0-or-later
+Group:          Productivity/Office/Organizers
+URL:            https://wiki.gnome.org/Design/Apps/Calendar
+Source0:        %{name}-%{version}.tar.xz
+Patch0:         testpatch.patch
+
+BuildRequires:  blueprint-compiler
+BuildRequires:  fdupes
+BuildRequires:  meson
+BuildRequires:  pkgconfig
+BuildRequires:  pkgconfig(fribidi)
+BuildRequires:  pkgconfig(geocode-glib-2.0) >= 3.26.2
+BuildRequires:  pkgconfig(gio-2.0) >= 2.80.0
+BuildRequires:  pkgconfig(glib-2.0) >= 2.80.0
+BuildRequires:  pkgconfig(goa-1.0) >= 3.2.0
+BuildRequires:  pkgconfig(gsettings-desktop-schemas) >= 3.21.2
+BuildRequires:  pkgconfig(gtk4) >= 4.21.2
+BuildRequires:  pkgconfig(gweather4)
+BuildRequires:  pkgconfig(libadwaita-1) >= 1.8.alpha
+BuildRequires:  pkgconfig(libecal-2.0) >= 3.45.1
+BuildRequires:  pkgconfig(libedataserver-1.2) >= 3.45.1
+BuildRequires:  pkgconfig(libedataserverui4-1.0) >= 3.45.1
+BuildRequires:  pkgconfig(libgeoclue-2.0) >= 2.4
+BuildRequires:  pkgconfig(libical) >= 3.0.5
+BuildRequires:  pkgconfig(libsoup-3.0)
+
+BuildSystem:       meson
+BuildOption(conf): -Dtracing=false
+
+%description
+Calendar is a calendar application for GNOME.
+
+%package -n gnome-shell-search-provider-gnome-calendar
+Summary:        GNOME Shell search provider to return results from the GNOME 
Calendar
+Group:          Productivity/Office/Organizers
+Requires:       %{name} = %{version}
+Supplements:    (gnome-shell and %{name})
+BuildArch:      noarch
+
+%description -n gnome-shell-search-provider-gnome-calendar
+This package contains a search provider to enable GNOME Shell to get
+search results from GNOME Calendar.
+
+%lang_package
+
+%install -a
+%find_lang %{name} %{?no_lang_C}
+%fdupes %{buildroot}/%{_prefix}
+
+%files
+%license COPYING
+%doc NEWS README.md
+%{_bindir}/gnome-calendar
+%{_datadir}/applications/org.gnome.Calendar.desktop
+# Own dir for openSUSE Leap 42.1
+%dir %{_datadir}/metainfo
+%{_datadir}/metainfo/org.gnome.Calendar.metainfo.xml
+%{_datadir}/dbus-1/services/org.gnome.Calendar.service
+%{_datadir}/glib-2.0/schemas/org.gnome.calendar.enums.xml
+%{_datadir}/glib-2.0/schemas/org.gnome.calendar.gschema.xml
+%{_datadir}/icons/hicolor/*/apps/*.*
+
+%files -n gnome-shell-search-provider-gnome-calendar
+%dir %{_datadir}/gnome-shell
+%dir %{_datadir}/gnome-shell/search-providers
+%{_datadir}/gnome-shell/search-providers/org.gnome.Calendar.search-provider.ini
+
+%files lang -f %{name}.lang
+
+%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/data/glibc.sources.expected 
new/obs-service-source_validator-0.47/t/data/glibc.sources.expected
--- old/obs-service-source_validator-0.43/t/data/glibc.sources.expected 
1970-01-01 01:00:00.000000000 +0100
+++ new/obs-service-source_validator-0.47/t/data/glibc.sources.expected 
2026-09-02 09:01:08.000000000 +0200
@@ -0,0 +1 @@
+glibc-2.26.tar.xz http://ftp.gnu.org/pub/gnu/glibc/glibc-2.26.tar.xz.sig 
baselibs.conf 
http://savannah.gnu.org/project/memberlist-gpgkeys.php?group=libc&download=1#/glibc.keyring
 nscd.conf nscd.service manpages.tar.bz2 nsswitch.conf 
http://www.openwall.com/crypt/crypt_blowfish-1.3.tar.gz bindresvport.blacklist 
glibc_post_upgrade.c glibc.rpmlintrc glibc-2.14-crypt.diff glibc-version.diff 
add-locales.patch resolv-context-leak.patch 
dl-runtime-resolve-opt-avx512f.patch libpthread-compat-wrappers.patch 
math-c++-compat.patch remove-nss-nis-compat.patch 
eh-frame-zero-terminator.patch ld-so-hwcap-x86-64.patch assert-pedantic.patch 
getaddrinfo-errno.patch resolv-conf-oom.patch dynarray-allocation.patch 
nearbyint-inexact.patch nss-compat.patch nscd-libnsl.patch 
malloc-tcache-leak.patch falkor-memcpy-memmove.patch aarch64-cpu-features.patch 
nss-files-large-buffers.patch sysconf-uio-maxiov.patch 
glob-tilde-overflow.patch glibc-2.4.90-no_NO.diff 
dl-runtime-resolve-xsave.patch spawni-assert.patc
 h x86-64-dl-platform.patch glob64-s390.patch tst-tlsopt-powerpc.patch 
powerpc-hwcap-bits.patch malloc-tcache-check-overflow.patch 
dl-init-paths-overflow.patch fillin-rpath-empty-tokens.patch 
getcwd-absolute.patch glibc-2.4-china.diff glibc-c-utf8-locale.patch 
glibc-disable-gettext-for-c-utf8.patch glibc-2.3.2.no_archive.diff 
glibc-bindresvport-blacklist.diff glibc-2.3.90-langpackdir.diff 
nscd-server-user.patch crypt_blowfish-const.patch 
fix-locking-in-_IO_cleanup.patch ldd-system-interp.patch abort-no-flush.patch 
fnmatch-collating-elements.patch nss-files-long-lines-2.patch 
iconv-reset-input-buffer.patch powerpc-elision-enable-envvar.patch 
s390-elision-enable-envvar.patch crypt_blowfish-1.2-sha.diff manpages.patch 
glibc-resolv-mdnshint.diff glibc-fix-double-loopback.diff 
crypt_blowfish-gensalt.patch crypt_blowfish-1.2-hack_around_arm.diff 
glibc-2.3.3-nscd-db-path.diff nss-db-path.patch glibc-nscd.conf.patch 
glibc-nodate.patch 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/data/libksba/libksba.spec 
new/obs-service-source_validator-0.47/t/data/libksba/libksba.spec
--- old/obs-service-source_validator-0.43/t/data/libksba/libksba.spec   
1970-01-01 01:00:00.000000000 +0100
+++ new/obs-service-source_validator-0.47/t/data/libksba/libksba.spec   
2026-09-02 09:01:08.000000000 +0200
@@ -0,0 +1,98 @@
+#
+# spec file for package libksba
+#
+# Copyright (c) 2026 SUSE LLC and contributors
+# Copyright (c) 2026 Andreas Stieger <[email protected]>
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
+
+
+%define soname 8
+Name:           libksba
+Version:        1.8.1
+Release:        0
+Summary:        A X.509 Library
+License:        (GPL-2.0-or-later OR LGPL-3.0-or-later) AND GPL-3.0-or-later 
AND MIT
+Group:          Development/Libraries/C and C++
+URL:            https://www.gnupg.org
+Source:         https://gnupg.org/ftp/gcrypt/libksba/%{name}-%{version}.tar.bz2
+Source2:        
https://gnupg.org/ftp/gcrypt/libksba/%{name}-%{version}.tar.bz2.sig
+# https://www.gnupg.org/signature_key.html
+Source3:        %{name}.keyring
+Source4:        libksba.changes
+BuildRequires:  pkgconfig
+BuildRequires:  pkgconfig(gpg-error) >= 1.28
+
+%description
+KSBA is a library to simplify the task of working with X.509
+certificates, CMS data, and related data.
+
+%package -n %{name}%{soname}
+Summary:        A X.509 Library
+Group:          Development/Libraries/C and C++
+Provides:       %{name} = %{version}
+Obsoletes:      %{name} < %{version}
+
+%description -n %{name}%{soname}
+KSBA is a library to simplify the task of working with X.509
+certificates, CMS data, and related data.
+
+%package devel
+Summary:        A X.509 Library
+Group:          Development/Libraries/C and C++
+Requires:       libksba%{soname} = %{version}
+Provides:       libksba:%{_includedir}/ksba.h
+
+%description devel
+KSBA is a library to simplify the task of working with X.509
+certificates, CMS data, and related data.
+
+This package contains the needed files to compile and link against the
+libksba.
+
+%prep
+%autosetup -p1
+
+%build
+build_timestamp=$(date -u +%{Y}-%{m}-%{dT}%{H}:%{M}+0000 -r %{SOURCE4})
+%configure \
+       --disable-static \
+       --with-pic \
+       --enable-build-timestamp="${build_timestamp}" \
+       %{nil}
+%make_build
+
+%check
+%make_build check
+
+%install
+%make_install
+find %{buildroot} -type f -name "*.la" -delete -print
+
+%ldconfig_scriptlets -n %{name}%{soname}
+
+%files -n %{name}%{soname}
+%license COPYING*
+%doc README AUTHORS ChangeLog NEWS THANKS TODO
+%{_libdir}/libksba.so.%{soname}{,.*}
+
+%files devel
+%license COPYING*
+%{_bindir}/ksba-config
+%{_libdir}/libksba.so
+%{_libdir}/pkgconfig/ksba.pc
+%{_includedir}/ksba.h
+%{_datadir}/aclocal/ksba.m4
+%{_infodir}/ksba.info%{?ext_info}
+
+%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/obs-service-source_validator-0.43/t/data/ollama.spec 
new/obs-service-source_validator-0.47/t/data/ollama.spec
--- old/obs-service-source_validator-0.43/t/data/ollama.spec    1970-01-01 
01:00:00.000000000 +0100
+++ new/obs-service-source_validator-0.47/t/data/ollama.spec    2026-09-02 
09:01:08.000000000 +0200
@@ -0,0 +1,461 @@
+#
+# spec file for package ollama
+#
+# Copyright (c) 2026 SUSE LLC and contributors
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
+
+#!BcntSyncTag: ollama
+
+# We require too much memory atm.
+# these jobs work on all supported
+%ifarch x86_64
+%global jobs 3
+%else
+%global jobs 4
+%endif
+
+%global llama_cpp_version b10630
+%global mlx_version c793734eb715dbcfdb1ced58e348ec53c2d7ed85
+%global mlx_c_version fba4470b89073180056c9ea46c443051375f7399
+
+%{bcond_with rocm}
+%{bcond_with cuda}
+%if 0%{?suse_version} >= 1610
+%{bcond_without vulkan}
+%else
+%{bcond_with vulkan}
+%endif
+
+%global flavor @BUILD_FLAVOR@%{nil}
+%global preset_flavor %flavor
+
+%if "%{flavor}" == "cuda"
+%global preset_flavor cuda-v13
+%if %{with cuda}
+ExclusiveArch:  x86_64
+%else
+ExclusiveArch:  SKIP_IT
+%endif
+%endif
+
+%if "%{flavor}" == "rocm"
+%global preset_flavor rocm_v7_2_linux
+%if %{with rocm}
+ExclusiveArch:  x86_64
+%else
+ExclusiveArch:  SKIP_IT
+%endif
+%endif
+
+%ifarch aarch64
+%if 0%{?suse_version} <= 1600
+# the compiler is too old for aarch64 here
+ExclusiveArch:  SKIP_IT
+%endif
+%endif
+
+%if 0%{?sle_version} && 0%{?sle_version} >= 150600
+%global force_gcc_version 12
+%endif
+
+%if 0%{?suse_version} >= 1601
+%global force_gcc_version 15
+%endif
+
+%define cuda_version_major 13
+%define cuda_version_minor 0
+%define cuda_version %{cuda_version_major}-%{cuda_version_minor}
+
+Name:           ollama
+Version:        0.33.1
+Release:        0
+Summary:        Tool for running AI models on-premise
+License:        MIT
+URL:            https://ollama.com
+# The archive name after #/ is the local filename used by the package.
+Source:         
https://github.com/ollama/ollama/archive/refs/tags/v%{version}.tar.gz#/ollama-%{version}.tar.gz
+Source1:        vendor.tar.gz
+Source2:        %{name}.service
+Source3:        %{name}-user.conf
+Source4:        sysconfig.%{name}
+Source5:        %{name}-rpmlintrc
+
+#!RemoteAsset: git+https://github.com/ggml-org/llama.cpp#%{llama_cpp_version}
+#!CreateArchive
+Source10:       llama.cpp-main.tar.xz
+
+#!RemoteAsset: git+https://github.com/ml-explore/mlx#%{mlx_version}
+#!CreateArchive
+Source11:       mlx-main.tar.xz
+
+# Pinned vendored revision.
+#!RemoteAsset: git+https://github.com/ml-explore/mlx-c#%{mlx_c_version}
+#!CreateArchive
+Source12:       mlx-c-main.tar.xz
+
+Patch0:         fix-mlxrunner-tests.diff
+Patch1:         disable-llama.cpp-ui.patch
+BuildRequires:  ccache
+BuildRequires:  cmake >= 3.24
+BuildRequires:  git-core
+BuildRequires:  ninja
+BuildRequires:  patchelf
+BuildRequires:  pkgconfig
+BuildRequires:  shaderc
+BuildRequires:  sysuser-tools
+BuildRequires:  zstd
+BuildRequires:  golang(API) >= 1.26
+BuildRequires:  group(render)
+BuildRequires:  group(video)
+Requires:       group(render)
+Requires:       group(video)
+Recommends:     ( %{name}-vulkan or %{name}-cuda or %{name}-rocm )
+
+%if "%{flavor}" == "test"
+%global debug_package %{nil}
+BuildRequires:  ollama
+%if %{with vulkan}
+BuildRequires:  ollama-vulkan
+%endif
+%if %{with rocm}
+BuildRequires:  ollama-rocm
+%endif
+%if %{with cuda}
+BuildRequires:  ollama-cuda
+%endif
+%endif
+
+%if "%{flavor}" == "vulkan"
+BuildRequires:  glslang-devel
+BuildRequires:  spirv-headers
+BuildRequires:  pkgconfig(vulkan)
+%endif
+
+%if "%{flavor}" == "cuda" || "%{flavor}" == "mlx_cuda"
+# requires cuda-toolkit*-config-common, cuda-cudart, cuda-cccl
+BuildRequires:  cuda-cudart-devel-%{cuda_version}
+BuildRequires:  cuda-driver-devel-%{cuda_version}
+# requires cuda-crt, cuda-nvvm
+BuildRequires:  cuda-nvcc-%{cuda_version}
+# requires libcublas
+BuildRequires:  libcublas-devel-%{cuda_version}
+%endif
+
+%if "%{flavor}" == "rocm"
+BuildRequires:  hipblas-common-devel
+BuildRequires:  hipblas-devel
+BuildRequires:  rocblas-devel
+BuildRequires:  rocm-comgr-devel
+BuildRequires:  rocm-compilersupport-macros
+BuildRequires:  rocm-hip-devel
+BuildRequires:  rocm-rpm-macros
+BuildRequires:  rocm-runtime-devel
+BuildRequires:  rocminfo
+%endif
+
+%systemd_ordering
+# 32bit seems not to be supported anymore while riscv isn't yet.
+ExcludeArch:    %{ix86} %{arm} riscv64
+%sysusers_requires
+%if 0%{?force_gcc_version}
+BuildRequires:  gcc%{force_gcc_version}-c++
+%endif
+%if 0%{?suse_version} >= 1600
+BuildRequires:  gcc-c++ >= 11.4.0
+%else
+BuildRequires:  gcc14-c++
+%endif
+
+%description
+Ollama is a tool for running AI models on one's own hardware.
+It offers a command-line interface and a RESTful API.
+New models can be created or existing ones modified in the
+Ollama library using the Modelfile syntax.
+Source model weights found on Hugging Face and similar sites
+can be imported.
+
+%package vulkan
+Summary:        Ollama Module using Vulkan
+Requires:       %{name} = %{version}-%{release}
+
+%description vulkan
+Ollama plugin module using Vulkan.
+
+%package cuda
+Summary:        Ollama Module using CUDA
+Requires:       %{name} = %{version}-%{release}
+
+%description cuda
+Ollama plugin module using NVIDIA CUDA.
+
+%package rocm
+Summary:        Ollama Module using AMD ROCm
+Requires:       %{name} = %{version}-%{release}
+
+%description rocm
+Ollama plugin module for ROCm.
+
+%prep
+%autosetup -a1 -p1 -n %{name}-%{version}
+mkdir git-modules
+pushd git-modules
+mkdir llama.cpp mlx mlx-c
+tar xf %{S:10} --strip-components=1 -C llama.cpp
+tar xf %{S:11} --strip-components=1 -C mlx
+tar xf %{S:12} --strip-components=1 -C mlx-c
+popd
+
+# 2. Patch cmake/local.cmake to skip git-dependent compat patch checks 
(submodules are extracted from tarballs, not git)
+sed -i 's/git submodule update --init --recursive/# git submodule update 
skipped — sources from tarballs/' CMakeLists.txt || true
+sed -i '/message(FATAL_ERROR.*Failed to apply Ollama/s/FATAL_ERROR/WARNING/g' 
cmake/local.cmake
+
+%build
+%if "%{?flavor}" == "test"
+exit 0
+%endif
+
+# ninja has built-in defaults, but it also calls gnu make again what is not 
caring about ninja values either
+%define __builder ninja
+
+%sysusers_generate_pre %{SOURCE3} %{name} %{name}-user.conf
+
+# fix install dir
+sed -i -e 's@OLLAMA_BUILD_DIR .*lib/ollama@OLLAMA_BUILD_DIR 
${CMAKE_BINARY_DIR}/%{_lib}/ollama@' CMakeLists.txt
+sed -i -e 's@OLLAMA_LIB_DIR "lib/ollama"@OLLAMA_LIB_DIR "%{_lib}/ollama"@' 
CMakeLists.txt
+sed -i -e 's@ "lib/ollama"@ "%{_lib}/ollama"@' llama/server/CMakeLists.txt
+
+# fix rpath
+find . -name CMakeLists.txt -type f -exec sed -i 
's/@loader_path/\/usr\/%_lib\/ollama/g' {} +
+find . -name CMakeLists.txt -type f -exec sed -i '/PROPERTIES INSTALL_RPATH/d' 
{} +
+
+# overwrite ml/path.go so LibOllamaPath is set to our path
+echo -e 'package ml\nvar LibOllamaPath string = "/usr/%{_lib}/ollama"' > 
ml/path.go
+export GOFLAGS="-buildmode=pie -mod=vendor"
+#export GOFLAGS="-mod=vendor -v"
+export CXX="g++%{?force_gcc_version:-%force_gcc_version}"
+export CC="gcc%{?force_gcc_version:-%force_gcc_version}"
+
+%if "%{flavor}" == "cuda"
+export 
PATH=/usr/local/cuda-%{cuda_version_major}.%{cuda_version_minor}/bin:$PATH
+export LIBRARY_PATH=/usr/local/cuda/lib64/stubs
+export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
+export LDFLAGS=-s
+export GOFLAGS="${GOFLAGS} '-ldflags=-w -s 
-X=github.com/ollama/ollama/version.Version=%{version} 
-X=github.com/ollama/ollama/server.mode=release\'"
+export CGO_ENABLED=1
+# NOTE: NVIDIA compiler (nvcc) will look for the default g++ so we
+# have to set it to g++12 explicitly
+export CUDAHOSTCXX=/usr/bin/g++%{?force_gcc_version:-%{force_gcc_version}}
+%endif
+
+# fix CMAKE_BINARY_DIR / OLLAMA_INSTALL_DIR location
+sed -i -e 's@\(${CMAKE_BINARY_DIR}\)/lib/ollama@\1/%{_lib}/ollama@' 
CMakeLists.txt
+sed -i -e 's@CMAKE_LIB_DIR "lib/ollama"@CMAKE_LIB_DIR "%{_lib}/ollama"@' 
CMakeLists.txt
+# overwrite ml/path.go so LibOllamaPath is set to our path
+echo -e 'package ml\nvar LibOllamaPath string = "/usr/%{_lib}/ollama"' > 
ml/path.go
+
+# and also the local copy of MLX sources
+export OLLAMA_MLX_SOURCE=$PWD/git-modules/mlx
+export OLLAMA_MLX_C_SOURCE=$PWD/git-modules/mlx-c
+
+%cmake \
+    -UOLLAMA_INSTALL_DIR -DOLLAMA_INSTALL_DIR=%{_libdir}/ollama \
+    -UCMAKE_INSTALL_BINDIR -DCMAKE_INSTALL_BINDIR=%{_libdir}/ollama \
+    -DGGML_BACKEND_DIR=%{_libdir}/ollama \
+    -DCMAKE_SKIP_BUILD_RPATH=ON \
+    -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
+    -DCMAKE_INSTALL_RPATH='$ORIGIN' \
+    -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \
+    -DFETCHCONTENT_SOURCE_DIR_LLAMA_CPP=$PWD/../git-modules/llama.cpp \
+    -DOLLAMA_MLX_BACKENDS="" \
+%if "%{?flavor}" == "cuda"
+    
-DCMAKE_CUDA_COMPILER=/usr/local/cuda-%{cuda_version_major}.%{cuda_version_minor}/bin/nvcc
 \
+    -DOLLAMA_MLX_BACKENDS=cuda_v13 \
+%endif
+%if "%{?flavor}" == "rocm"
+    -DCMAKE_HIP_COMPILER=%rocmllvm_bindir/clang++ \
+    -DAMDGPU_TARGETS=%{rocm_gpu_list_default} \
+    -DCMAKE_HIP_FLAGS=--offload-compress \
+%endif
+%if "%{?flavor}" != ""
+    -DARG_RUNNER_DIR=%preset_flavor \
+%endif
+    %{nil}
+
+#
+# Flavor package (vulkan/cuda/rocm)
+#
+%if "%{?flavor}" != ""
+cd ..
+export OLLAMA_SKIP_CPU_GENERATE="1"
+cmake -S llama/server --preset %preset_flavor \
+    -DCMAKE_SKIP_BUILD_RPATH=ON \
+    -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
+    -DCMAKE_INSTALL_RPATH='$ORIGIN' \
+    -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \
+    -DFETCHCONTENT_SOURCE_DIR_LLAMA_CPP=$PWD/git-modules/llama.cpp \
+
+local_directory=build/llama-server-%preset_flavor
+cmake --build ${local_directory%_linux} -- -l %{jobs}
+exit 0
+%endif
+
+#
+# Main package
+#
+exit 1
+%cmake_build -j %jobs
+
+cd ..
+go build -trimpath -o %{name} .
+
+%install
+%if "%{?flavor}" == "test"
+exit 0
+%endif
+export DESTDIR=%buildroot
+
+%if "%{?flavor}" != ""
+#
+# Flavor package
+#
+local_directory=%preset_flavor
+local_directory=${local_directory%_linux}
+%if "%{?flavor}" == "mlx_cuda"
+cmake --install build/mlx_cuda_v13 --component MLX --prefix %{_prefix}
+cmake --install build/mlx_cuda_v13 --component MLX_VENDOR --prefix %{_prefix}
+%else
+cmake --install build/llama-server-${local_directory} --component llama-server 
--prefix %{_prefix}
+%endif
+mv %buildroot/usr/%_lib/ollama/${local_directory}/* 
%buildroot/usr/%_lib/ollama/
+rmdir %buildroot/usr/%_lib/ollama/${local_directory}
+%else
+#
+# Main package
+#
+cmake --install build/llama-server-local --component llama-server --prefix 
%{_prefix}
+
+install -D -m 0755 %{name} %{buildroot}/%{_bindir}/%{name}
+
+install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/%{name}.service
+install -D -m 0644 %{SOURCE3} %{buildroot}%{_sysusersdir}/%{name}-user.conf
+install -D -m 0644 %{SOURCE4} %{buildroot}%{_fillupdir}/sysconfig.%{name}
+install -d %{buildroot}%{_localstatedir}/lib/%{name}
+mkdir -p %{buildroot}%{_sbindir}
+ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rc%{name}
+
+mkdir -p "%{buildroot}/%{_docdir}/%{name}"
+cp -Ra docs/* "%{buildroot}/%{_docdir}/%{name}"
+%endif
+
+# remove copies of system libraries
+shopt -s nullglob
+rm -rf 
%{buildroot}%{_libdir}/%{name}/lib{vulkan,drm,amd,hip,cu,hsa,roc,numa,elf}*
+
+# fixup the rpath
+for lib in %{buildroot}%{_libdir}/ollama/*.so; do
+    patchelf --set-rpath '$ORIGIN' "$lib" || true
+done
+
+patchelf --set-rpath '%{_libdir}/ollama' "%{buildroot}%{_bindir}/%{name}" || 
true
+
+%check
+%if "%{?flavor}" == "test"
+  export LD_LIBRARY_PATH=%_libdir/ollama
+  for f in \
+%ifarch aarch64
+     cpu-armv8.0_1 \
+     cpu-armv8.2_1 \
+     cpu-armv8.2_2 \
+     cpu-armv8.2_3 \
+     cpu-armv8.6_1 \
+     cpu-armv8.6_2 \
+     cpu-armv9.2_1 \
+     cpu-armv9.2_2 \
+%endif
+%ifarch x86_64
+     cpu-alderlake \
+     cpu-haswell \
+     cpu-icelake \
+     cpu-sandybridge \
+     cpu-skylakex \
+     cpu-sse42 \
+     cpu-x64 \
+%endif
+%if %{with vulkan}
+    vulkan \
+%endif
+%if %{with rocm}
+    hip \
+%endif
+%if %{with cuda}
+    cuda \
+%endif
+  ; do
+    file=%_libdir/ollama/libggml-${f}.so
+    test -e "$file" || exit 1
+    ldd -r "$file" | grep "undefined symbol:" && exit 1
+  done
+  exit 0
+%else
+# Validate installed unit file syntax (safe fallback if tools missing)
+systemd-analyze verify %{buildroot}%{_unitdir}/%{name}.service || true
+exit 0
+%endif
+
+%pre -f %{name}.pre
+%service_add_pre %{name}.service
+
+%post
+%service_add_post %{name}.service
+
+%preun
+%service_del_preun %{name}.service
+
+%postun
+%service_del_postun %{name}.service
+
+%if "%{flavor}" == "cuda"
+%files cuda
+%dir %{_libdir}/ollama
+%{_libdir}/ollama/libggml-cuda.so
+%endif
+
+%if "%{flavor}" == "vulkan"
+%files vulkan
+%dir %{_libdir}/ollama
+%{_libdir}/ollama/libggml-vulkan.so
+%endif
+
+%if "%{flavor}" == "rocm"
+%files rocm
+%dir %{_libdir}/ollama
+%{_libdir}/ollama/rocblas
+%{_libdir}/ollama/libggml-hip.so
+%endif
+
+%if "%{flavor}" == "" && "%{flavor}" != "test"
+%files
+%doc README.md
+%license LICENSE
+%{_docdir}/%{name}
+%{_bindir}/%{name}
+%{_libdir}/%{name}
+%{_sbindir}/rc%{name}
+%{_unitdir}/%{name}.service
+%{_sysusersdir}/%{name}-user.conf
+%{_fillupdir}/sysconfig.%{name}
+%attr(-, ollama, ollama) %{_localstatedir}/lib/%{name}
+%endif
+
+%changelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/test_files_referenced.sh 
new/obs-service-source_validator-0.47/t/test_files_referenced.sh
--- old/obs-service-source_validator-0.43/t/test_files_referenced.sh    
1970-01-01 01:00:00.000000000 +0100
+++ new/obs-service-source_validator-0.47/t/test_files_referenced.sh    
2026-09-02 09:01:08.000000000 +0200
@@ -0,0 +1,26 @@
+#!/bin/bash
+# Test source references handling in 20-files-present-and-referenced
+
+set -e
+
+# Path to the script to test
+VALIDATOR="./20-files-present-and-referenced"
+TEST_DATA_DIR="t/data/libksba_test"
+
+# Create test data directory if it doesn't exist
+rm -rf "$TEST_DATA_DIR"
+mkdir -p "$TEST_DATA_DIR"
+
+cp t/data/libksba/libksba.spec $TEST_DATA_DIR
+
+touch "$TEST_DATA_DIR"/libksba-1.8.1.tar.bz2
+touch "$TEST_DATA_DIR"/libksba-1.8.1.tar.bz2.sig
+touch "$TEST_DATA_DIR"/libksba.keyring
+touch "$TEST_DATA_DIR"/libksba.changes
+
+echo "Running validator on $TEST_DATA_DIR..."
+./20-files-present-and-referenced --batchmode "$TEST_DATA_DIR" || exit 1
+
+exit 0
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/test_gitignore.sh 
new/obs-service-source_validator-0.47/t/test_gitignore.sh
--- old/obs-service-source_validator-0.43/t/test_gitignore.sh   2026-07-07 
22:56:28.000000000 +0200
+++ new/obs-service-source_validator-0.47/t/test_gitignore.sh   2026-09-02 
09:01:08.000000000 +0200
@@ -10,6 +10,7 @@
 # Create test data directory if it doesn't exist
 mkdir -p "$TEST_DATA_DIR"
 trap 'rm -rf "$TEST_DATA_DIR"' EXIT
+git -C "$TEST_DATA_DIR" init -q
 
 # Create a dummy spec file
 cat > "$TEST_DATA_DIR/test.spec" <<EOF
@@ -29,6 +30,7 @@
 EOF
 
 touch "$TEST_DATA_DIR/test.tar.gz"
+git -C "$TEST_DATA_DIR" add test.tar.gz
 
 # Create a .gitignore and an ignored file
 echo "ignored.txt" > "$TEST_DATA_DIR/.gitignore"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-source_validator-0.43/t/test_remoteasset.sh 
new/obs-service-source_validator-0.47/t/test_remoteasset.sh
--- old/obs-service-source_validator-0.43/t/test_remoteasset.sh 1970-01-01 
01:00:00.000000000 +0100
+++ new/obs-service-source_validator-0.47/t/test_remoteasset.sh 2026-09-02 
09:01:08.000000000 +0200
@@ -0,0 +1,49 @@
+#!/bin/bash
+# Test for .gitignore integration in 20-files-present-and-referenced
+
+set -e
+
+# Path to the script to test
+VALIDATOR="./20-files-present-and-referenced"
+TEST_DATA_DIR="t/data/remoteasset_test"
+
+# Create test data directory if it doesn't exist
+rm -rf "$TEST_DATA_DIR"
+mkdir -p "$TEST_DATA_DIR"
+
+# Create a dummy spec file
+cat > "$TEST_DATA_DIR/test.spec" <<EOF
+%define llama_cpp_version main
+Name: test
+Version: 1.0
+Release: 0
+Summary: test
+License: MIT
+#!RemoteAsset: git+https://github.com/ggml-org/llama.cpp#%{llama_cpp_version}
+#!CreateArchive
+Source10:       llama.cpp-main.tar.xz
+%description
+test
+%prep
+%setup -q
+%build
+%install
+%files
+EOF
+
+# to be obsoleted, the current policy of factory requires that the remoteasset
+# is also committed together wit the sources
+touch "$TEST_DATA_DIR/llama.cpp-main.tar.xz"
+
+# additional sources not needed for re-building the source rpm
+touch "$TEST_DATA_DIR/build.obscpio"
+
+echo "Running validator on $TEST_DATA_DIR..."
+./20-files-present-and-referenced --batchmode "$TEST_DATA_DIR" || exit 1
+
+rm "$TEST_DATA_DIR/llama.cpp-main.tar.xz"
+./20-files-present-and-referenced --batchmode "$TEST_DATA_DIR" 2>/dev/null | 
grep -q "ERROR: Current policy is to submit some part of a remote asset" || 
exit 1
+
+exit 0
+
+

Reply via email to