Files
guru/scripts/check-duplicates.sh
Andrew Ammerlaan 292e03dc22 .github/workflows/repoman.yml: Use script to auto run the latest rm
By using a seperate script instead of running everything in the yml
file, we gain the ability to use and manipulate variables. This
means that we can now automatically run the latest version of
repoman, which should make this more hands-off by removing the
need to update this every now and then.

Signed-off-by: Andrew Ammerlaan <andrewammerlaan@riseup.net>
2021-04-02 11:52:30 +02:00

77 lines
3.0 KiB
Bash
Executable File

#! /usr/bin/env bash
# Maintainer: Andrew Ammerlaan <andrewammerlaan@riseup.net>
# Maintainer: Theo Anderson <telans@posteo.de>
#
# This checks for potential and exact package matches within an overlay & ::gentoo
# Note that this is not going to be 100% accurate
GENTOO_DIR="/var/db/repos/gentoo"
GENTOO_PACKAGES=(
$(find ${GENTOO_DIR} -mindepth 2 -maxdepth 2 -printf "%P\n" \
| sort | grep -Ev "^(.git|.github|metadata|profiles|scripts)/|metadata.xml"
)
)
REPO_PACKAGES=(
$(find . -mindepth 2 -maxdepth 2 -printf "%P\n" \
| sort | grep -Ev "^(.git|.github|metadata|profiles|scripts)/|metadata.xml"
)
)
REPO_NAME="$(cat profiles/repo_name)"
printf "\nChecking for duplicates...\n"
for GENTOO_PKG in ${GENTOO_PACKAGES[@]}; do
GENTOO_CATEGORIES+=( ${GENTOO_PKG%%/*} ) # Separate category
GENTOO_PKG_NAME=${GENTOO_PKG##*/} # Separate name
GENTOO_PKG_NAME=${GENTOO_PKG_NAME,,} # Force lower case, e.g. to match foobar and FooBar
GENTOO_PKG_NAME=${GENTOO_PKG_NAME/[-_]} # Remove underscores and dashes, e.g. to match foo-bar and foo_bar
GENTOO_PKG_NAMES+=( ${GENTOO_PKG_NAME} )
done
printf "Testing ${#REPO_PACKAGES[@]} ${REPO_NAME^} packages against ${#GENTOO_PKG_NAMES[@]} Gentoo packages\n"
for REPO_PKG in ${REPO_PACKAGES[@]}; do
REPO_PKG_CATEGORY=${REPO_PKG%%/*}
REPO_PKG_NAME=${REPO_PKG##*/}
REPO_PKG_NAME=${REPO_PKG_NAME,,}
REPO_PKG_NAME=${REPO_PKG_NAME/[-_]}
if [[ ${GENTOO_PKG_NAMES[@]} =~ " ${REPO_PKG_NAME} " ]]; then # Check for a matcing name in the Gentoo tree,
for (( i=0; i<${#GENTOO_PKG_NAMES[@]}; i++ )); do # otherwise there is no need to continue
[[ ${GENTOO_PKG_NAMES[$i]} == ${REPO_PKG_NAME} ]] && index+=( $i ) # Find the category/index for multiple matching names
done
for i in ${index[@]}; do # For each possible match
if [[ ${GENTOO_PACKAGES[$i]} == ${REPO_PKG} ]]; then
PKG_EXACT_MATCH+="\t${REPO_PKG}::${REPO_NAME} exact match of ${GENTOO_PACKAGES[$i]}::gentoo\n"
break # An exact match is fatal, no need to continue
elif [[ ${GENTOO_CATEGORIES[$i]} == ${REPO_PKG_CATEGORY} ]]; then # Possible match within the same category
PKG_CATEGORY_MATCH+="\t${REPO_PKG}::${REPO_NAME} possible duplicate of ${GENTOO_PACKAGES[$i]}::gentoo\n"
else # Possible match in a different category
PKG_SPECULATIVE_MATCH+="\t${REPO_PKG}::${REPO_NAME} possible duplicate of ${GENTOO_PACKAGES[$i]}::gentoo\n"
fi
done
unset index
fi
done
if [[ -n ${PKG_SPECULATIVE_MATCH} ]]; then
printf "\nWARNING: The following packages closely match packages in the main Gentoo repository:\n"
printf "${PKG_SPECULATIVE_MATCH}"
printf "Please check these manually.\n"
fi
if [[ -n ${PKG_CATEGORY_MATCH} ]]; then
printf "\nWARNING: The following packages closely match packages in the main Gentoo repository, in the same category:\n"
printf "${PKG_CATEGORY_MATCH}"
printf "Please check these manually.\n"
fi
if [[ -n ${PKG_EXACT_MATCH} ]]; then
printf "\nERROR: The following packages override packages in the main Gentoo repository:\n"
printf "${PKG_EXACT_MATCH}"
printf "Please remove these packages.\n"
exit 1
fi