#!/bin/bash

if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
    set -x
fi
set -eu
set -o pipefail

rm -rf /tmp/ironic-python-agent
# In Centos Stream, /lib is linked to /lib/firmware, so the first
# loop will likely go ahead and remove everything, but the || true
# below will keep it from erroring.
KNOWN_FIRMWARE_PATH="/lib/firmware/ /usr/lib/firmware/"
for folder in $KNOWN_FIRMWARE_PATH; do
    if [[ ! -d $folder ]]; then
        echo "Skipping firmware removal for $folder as it is not found."
    fi
    for item in ${IPA_REMOVE_FIRMWARE//,/ }; do
        # NOTE(TheJulia): The original idea here has been delete whole folders
        # but the patterns have shifted and evolved, and it we need to remove
        # files in the main folder as well, or subsections their of. Also, due
        # to perception of risk on the build process, the code is intended
        # to be *very* defensive here.

        # tl;dr Attempt removal of item, but don't error
        # if it is not present already.
        if [[ "$item" != "" ]]; then
            if [[ "$item" =~ "/" ]]; then
                # We're deleting targetted contents in a folder,
                # and not an entire folder. Since we're checking for an
                # an empty string, we should be fine letting it do the
                # expansion.
                rm -r -f $folder$item*
            elif [[ -d "$folder$item" ]]; then
                # This was the original deletion code path where we
                # are attempting to delete a folder.
                # This is normally not handled with the glob expansion
                # expansion even though it could be due to management
                # the host's contents as it is constructed.
                rm -rf $folder$item || true
            elif [[ $(ls $folder$item* | wc -l) -gt 0 ]]; then
                # In this case, we have to use glob expansion because we
                # have objects which are only available via glob expansion.
                # NOTE(TheJulia): Fun factoid, these folders can have
		# subfolders as well, and recursive is thus required becuase
		# otherwise rm errors and aborts the deletion.
                rm -rf $folder$item*
            fi
        fi
    done
done

# TODO(dtantsur): implement the same for debian-based systems
case "$DISTRO_NAME" in
    fedora|centos|rhel)
        ${YUM:-yum} remove -y postfix gcc make
        # Remove webkit... Save ~26MB. This is a ramdisk, not a web browser.
        ${YUM:-yum} remove -y webkit2gtk3-jsc libproxy-webkitgtk4 || true
        # Remove polkit... Save ~23 MB. This is a ramdisk, not a desktop.
        ${YUM:-yum} remove -y polkit polkit-libs PackageKit polkit-pkla-compat || true

        ${YUM:-yum} clean all
        # Rebuilding the rpm database after removing packages will reduce
        # its size
        rpm --rebuilddb
        ;;
esac

# NOTE(TheJulia): remove any excess temporary files from /var/tmp
# In particular, dracut may leave some items we don't need/want.
rm -r -f /var/tmp/*
