#!/bin/sh -efu
#
# Copyright (c) 2020-2021 Vladimir D. Seleznev <vseleznv@altlinux.org>
#
# Calculate package identity.
#
# SPDX-License-Identifier: GPL-3.0-or-later
#

. shell-error
. shell-getopt
. shell-args

show_help()
{
	cat <<-EOF
	Usage: $PROG [options] <package> [<package> ...]

	Options:
	  --dbpath=DIRECTORY	use database in DIRECTORY;
	  -p, --package		calculate identity of package file;
	  -h, --help		show this text and exit.

	Report bugs to http://bugzilla.altlinux.org/
	EOF
	exit "$@"
}

PROG=rpmidentity
TEMP="$(getopt -n "$PROG" -o h,p -l dbpath:,help,package -- "$@")" ||
        show_usage 1 >&2
eval set -- "$TEMP"

opts=
while :; do
        case "$1" in
		--dbpath) shift; opts="${opts:+$opts }--dbpath=$1" ;;
		-p|--package) opts="${opts:+$opts }-p" ;;
		-h|--help) show_help ;;
		--) shift; break ;;
        esac
	shift
done

if [ "$#" -eq 0 ]; then
	show_help 1 >&2
fi

TAGLIST=/usr/share/rpmidentity/taglist
# construct a query format string in the following form: "[tag:%{tag:shescape}\n]"
qf="$(sed -n -E 's/^([^#].*)$/[\1:%{\1:shescape}\\n]/p' "$TAGLIST")"

tmpfile=
cleanups()
{
	[ -z "$tmpfile" ] || rm "$tmpfile"
	exit "$@"
}
trap 'cleanups $?' EXIT
trap 'cleanups 143' HUP INT TERM QUIT
tmpfile="$(mktemp --suffix=rpmidentity)"

ret=0
for pkg; do
	if ! rpmquery $opts --qf "$qf" -- "$pkg" >"$tmpfile"; then
		message "Cannot calculate package identity of $pkg"
		ret=1
		continue
	fi

	sed -i '/^$/d' "$tmpfile"

	disttag="$(rpmquery $opts --qf '%|disttag?{%{disttag}}|' -- "$pkg")"
	if [ -n "$disttag" ]; then
		quote_sed_regexp_variable sed_disttag "$disttag"
		sed -i "/^[[:alpha:]]\+VERSION/{s/:$sed_disttag//}" "$tmpfile"
	fi

	printf '%s\t%s\n' \
		"$pkg" \
		"$(set -- $(md5sum "$tmpfile"); echo "$1")"
done

exit "$ret"
