#!/usr/bin/bash
# Add packages from current directory to a given repository

readonly scriptname='delpkg'

# default options
declare -a files
declare -a opts
declare -a sigfiles
clean_cachedir=0
compression='xz'

# Error messages
readonly no_compression_entered='No compression type entered.'
readonly nosuchdir='No such directory'

printHelp() {
cat << EOF
Usage: ${scriptname} [options] [repository] -- [additional repo-add opts]
Options:
    -C, --compression-type      the compression algorithm the db is using
    -c, --clean-cachedir        use paccache to clean the cache directory
    -R, --remove                remove old package files
    -s, --sign                  sign repository file
EOF
}

while true; do
    case "${1}" in
        '-c'|'--clean-cachedir')
            clean_cachedir=1
            shift
            continue
            ;;
        '-C'|'--compression-type')
            case "${2}" in
                "")
                    printf '%s\n' "${no_compression_entered}" >&2
                    exit 1
                    ;;
                *)
                    compression="${2}"
                    ;;
            esac
            shift 2
            continue
            ;;
        --compression-type=*)
            compression="${1#*=}"
            [[ -z "${compression}" ]] &&\\
                printf '%s\n' "${no_compression_entered}" >&2 && exit 1
            shift
            continue
            ;;
        '-h'|'--help')
            printHelp
            exit 0
            ;;
        '-r'|'--remove')
            opts+=('--remove')
            shift
            continue
            ;;
        '-s'|'--sign')
            opts+=('--sign')
            shift
            continue
            ;;
        --)
            shift
            break
            ;;
        -*)
            printf '%s\n' "Unknown option: ${1}"
            exit 1
            ;;
        *)
            break
            ;;
    esac
done

repo="${1}" && shift
repo_dir="/var/cache/pacman/${repo}"
repo_db="${repo_dir}/${repo}.db.tar.${compression}"
pkgnames=("${@}")

[[ ! -d "${repo_dir}" ]] && printf '%s\n' "${repo_dir}: ${nosuchdir}" >&2

files=("${repo_dir}/${name}"*'.pkg.tar.xz')
sigfiles=("${repo_dir}/${name}"*'*.pkg.tar.xz.sig')

# run repo-remove before removing files
repo-remove "${opts[@]}" "${repo_db}" "${pkgnames[@]}"

# move package files and sig files into repository directory
mv "${files[@]}" "${sigfiles[@]}" "${repo_dir}"

if [[ "${clean_cachedir}" == 1 ]]; then
    [[ ! -x '/usr/bin/paccache' ]] && echo 'paccache is not present, skipping'
    paccache --verbose --remove --keep 1 --cachedir "${repo_dir}"
fi