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
+
+