mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-10 07:33:19 -04:00
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>
77 lines
3.0 KiB
Bash
Executable File
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
|