diff --git a/build.sh b/build.sh index 45db800..495bfc8 100755 --- a/build.sh +++ b/build.sh @@ -12,6 +12,8 @@ readonly GREEN='\033[0;32m' readonly YELLOW='\033[1;33m' readonly NC='\033[0m' # No Color +all_packages=() + trap 'echo -e "${RED}Error on line $LINENO${NC}"' ERR . .util.sh @@ -84,6 +86,9 @@ build() { [[ "${upd}" == true ]] && update_pkg fi + mapfile -t pkgnames < <(awk -F ' = ' '/^pkgname/ {print $2}' .SRCINFO) + all_packages+=("${pkgnames[@]}") + name=$(grep -m1 'pkgname' .SRCINFO | cut -d'=' -f2 | tr -d ' ') ver=$(grep -m1 'pkgver' .SRCINFO | cut -d'=' -f2 | tr -d ' ') rel=$(grep -m1 'pkgrel' .SRCINFO | cut -d'=' -f2 | tr -d ' ') @@ -161,26 +166,26 @@ process_directories() { } find_and_remove_deleted_packages() { - local last_commit del=() - if git cat-file -e "${CI_PREV_COMMIT_SHA:-}" 2>/dev/null; then - last_commit=${CI_PREV_COMMIT_SHA} - else - last_commit=$(git --no-pager log --oneline | grep -v 'CI SKIP' | cut -d' ' -f1 | sed -n '5p') || { - log "ERROR" "Failed to determine last commit" - return 1 - } - fi + log "INFO" "Finding removed packages" - log "INFO" "Finding removed packages from ${last_commit}" - mapfile -t del < <( - { - git --no-pager diff "${last_commit}"..HEAD aur.txt | tail -n +4 | grep -E '^-' | cut -c2- - git --no-pager diff --name-status "${last_commit}"..HEAD | grep -Po 'D\s+(\K.*)(?=/PKGBUILD)' - } | sort -u + mapfile -t repo_packages < <( + find "${REPO_DIR}" -type f -name "*.pkg.tar.zst" -exec basename {} \; | + awk -F'-' '{ + name = $1; + for (i = 2; i <= NF - 3; i++) { + name = name "-" $i + } + print name + }' | sort -u ) - if [[ ${#del[@]} -gt 0 ]]; then - for pkg in "${del[@]}"; do + mapfile -t removed_packages < <( + comm -23 <(printf "%s\n" "${repo_packages[@]}" | sort) <(printf "%s\n" "${all_packages[@]}" | sort) + ) + + log "INFO" "Removed packages: ${removed_packages[*]}" + if [[ ${#removed_packages[@]} -gt 0 ]]; then + for pkg in "${removed_packages[@]}"; do log "INFO" "Removing package ${pkg}" if ! repo-remove -s "${REPO_DIR}/nyyu.db.tar.zst" "${pkg}"; then log "WARN" "Failed to remove ${pkg} from repo" @@ -189,8 +194,6 @@ find_and_remove_deleted_packages() { log "WARN" "No files found for ${pkg} in ${REPO_DIR}/" fi done - else - log "INFO" "No packages to remove" fi } @@ -201,7 +204,7 @@ setup_git() { git remote set-url origin "${CI_REPO_CLONE_URL}" local forge_url="${CI_FORGE_URL#https://}" - cat > "${HOME}/.netrc" <"${HOME}/.netrc" <