2
1
forked from adamm/autogits
Files
autogits/devel-importer/devel_update.sh
2025-04-25 16:55:24 +02:00

128 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/bash
#
# Updates devel_packages in https://src.opensuse.org/openSUSE/Factory/src/branch/main/pkgs/_meta/devel_packages
#
# syntax:
# get <pkg>
# set <prj> <pkg>
# rm <prj> <pkg>
# sync
#
# DEVEL_PACKAGES env should point to the devel_packages clone from
# repo above, otherwise will look in CWD
#
set +e
function getdevel {
local pkg="$1"
awk "{ if ( \$1 == \"$pkg\" ) print \$2 }" "$DEVEL_PACKAGES"
}
function setdevel {
local prj="$1"
local pkg="$2"
if [ x"$prj" == "x" ] || [ x"$pkg" == "x" ]; then
echo "devel_update set <prj> <pkg>"
exit 10
fi
cat <(awk "{ if ( \$1 != \"$pkg\" ) print }" "$DEVEL_PACKAGES") <(echo $pkg $prj) | sort -d > "$DEVEL_PACKAGES".$$
mv "$DEVEL_PACKAGES".$$ "$DEVEL_PACKAGES"
}
function rmdevel {
local prj="$1"
local pkg="$2"
if [ x"$prj" == "x" ] || [ x"$pkg" == "x" ]; then
echo "devel_update rm <prj> <pkg>"
exit 10
fi
awk "{ if ( ! ( \$1 == \"$pkg\" && \$2 == \"$prj\" ) ) print }" "$DEVEL_PACKAGES" > "$DEVEL_PACKAGES".$$
mv "$DEVEL_PACKAGES".$$ "$DEVEL_PACKAGES"
}
if [ -z "$DEVEL_PACKAGES" ]; then
DEVEL_PACKAGES=./devel_packages
fi
if ! [ -w "$DEVEL_PACKAGES" ] || ! [ -e "$DEVEL_PACKAGES" ] ; then
echo "The DEVEL_PACKAGES ($DEVEL_PACKAGES) file is not writable or doesn't exist"
exit 0
fi
case "$1" in
get)
shift
getdevel "$@"
;;
set)
shift
setdevel "$@"
;;
rm)
shift
rmdevel "$@"
;;
sync)
warning=0
badpkgs=""
pkgs=$(osc ls openSUSE:Factory)
# add new packages
for pkg in $pkgs; do
if [ "${pkg/*:*/IGNORE}" == "IGNORE" ]; then
continue
fi
grep -q "^$pkg\( \|\$\)" "$DEVEL_PACKAGES"
if [ $? -ne 0 ]; then
echo -n "$pkg -> "
devel=$(osc develproject openSUSE:Factory $pkg 2> /dev/null)
devel=${devel/\/*/}
if [ -z "$devel" ]; then
devel=$(osc rq list -s accepted -P openSUSE:Factory -p $pkg -t submit | grep "^\s*submit:.* -> openSUSE:Factory\$" | sed -e "s,^\s*submit:\s*\([^/]\+\)/${pkg}@.*,\1," | uniq)
c=$(echo "$devel" | grep -c .)
if [ $c -ne 1 ]; then
badpkgs="$badpkgs $pkg"
warning=1
devel="***** UNKNOWN"
fi
fi
setdevel "$devel" "$pkg"
echo "$devel"
fi
done
# remove deleted packages
for pkg in $(awk '{ print $1 }' < "$DEVEL_PACKAGES"); do
if [[ " $pkgs " != *[[:space:]]"$pkg"[[:space:]]* ]]; then
echo "removing $pkg"
d=$(getdevel "$pkg")
if [ -n "$d" ]; then
rmdevel "$d" "$pkg"
fi
fi
done
# set devel change in last 10 days
osc rq list -t change_devel -D 10 -P openSUSE:Factory -s accepted |
grep 'change_devel:\s\+openSUSE:Factory/' |
sed -e 's,^\s*change_devel:\s*openSUSE:Factory/\([a-zA-Z0-9_+-]\+\)\s*developed in \([a-zA-Z0-9_+:-]\+\)/\1\s*$,\2 \1,' |
while read line; do
setdevel ${line/ */} ${line/* /};
done
if [ $warning -ne 0 ]; then
echo " **** WARNING ****" > /dev/stderr
echo "Could not fix some packages. Manual intervention required:$badpkgs" > /dev/stderr
fi
;;
*)
echo " devel_update (get,set,rm,sync) ...."
esac