#!/bin/sh
# 2005-2006, 2009, 2015 (c) Etersoft www.etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain
#
# Open package Url in BROWSER
#

# TODO: use only for repo packages. add option -t for print url

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod rpm web

PAGEURL="http://packages.altlinux.org/en/Sisyphus/srpms"

#############################

Usage="Usage: $name [-c -f -p -s] [spec]"
function mygetopts()
{
name=${0##*/}
Descr="$name - open package Url in the default browser"

phelp()
{
	echog "$Descr"
	echog "$Usage"
	echog "Options:"
	echog "   -p  open package page on http://packages.altlinux.org"
	echog "   -c  check if package URL is accessible"
	echog "   -t  just print URL"
	echog "   -s  open package source dir in the default browser (for spec / git repo only"
	echo
	echog "Ext. options:"
	echog "   -f  print failed URL only"
}

while getopts :hcfstp opt; do
    case $opt in
	h) phelp; exit 0;;
	c) CHECKONLY=1 ;;
	f) FAILEDONLY=1; CHECKONLY=1 ;;
	s) ABOUTDIR=1 ;;
	t) PRINTONLY=1 ;;
	p) SISYPHUSRU=1 ;;
	+?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;;
#	?)  echog "$name: $OPTARG: bad option.  Use -h for help." 1>&2 ; exit 2;;
	?) OPTIND=$((OPTIND-1)); break;
    esac
done

# remove args that were options
if [ $# -gt 0 ]; then 
	[ "$OPTIND" -gt 0 ] && shift $(($OPTIND - 1))
fi

# pass other options to RPM:
LISTRPMARGS=$@
}

parse_cmd_pre_spec "$@"

mygetopts $LISTARGS

check_spec()
{
	local SPEC="$1"
	rhas "$SPEC" "\.spec$" || fatal "Use only for git repo or with spec. Use $ epm site for packages."

	if [ -n "$SISYPHUSRU" ] ; then
		PKGNAME=$(eval_spec $SPEC | get_var "Name")
		# epm site -p $PKGNAME
		RPM_URL=$PAGEURL/$PKGNAME
		if [ -n "$ABOUTDIR" ] ; then
			RPM_URL=$RPM_URL/get
		fi
	else
		RPM_URL=$(eval_spec $SPEC | get_var "Url")
		if [ -n "$ABOUTDIR" ] ; then
			# hack: FIXME
			#cat $SPEC | sed -e "s|^# Source-\(.*\):\([ \t]\)|%define rpmurl_source_\1\2|g" > $SPEC.rpmurl
			#local NEWSOURCE=
			#eval_spec $SPEC.rpmurl >$SPEC.rpmuuu
			#if eval_spec $SPEC.rpmurl | egrep -q "%define rpmurl_source_(git|url)" ; then
			#	NEWSOURCE=$(eval_spec $SPEC.rpmurl | egrep "%define rpmurl_source_(git|url)" | sed -e "s/.*[ \t]\(.*\)/\1/g")
			#	echo $NEWSOURCE
			#fi
			#rm -f $SPEC.rpmurl
			if [ -n "$NEWSOURCE" ] ; then
				SOURCE="$NEWSOURCE"
			else
				SOURCE=$(eval_spec $SPEC | get_var "Source")
			fi
			RPM_URL=$(dirname $SOURCE)
		fi

		[ "$RPM_URL" = "(none)" ] && RPM_URL=""
		[ -z "${RPM_URL}" ] && fatal "Cannot get package URL"
	fi

	if [ -n "$PRINTONLY" ] ; then
		echo "$RPM_URL"
		return
	fi

	if [ -n "$CHECKONLY" ] ; then
		# Check package URL
		echog -n "Checking URL $RPM_URL ..."
		docmd $GET $RPM_URL -s -d
		return
	fi

	echog "Opening URL '$RPM_URL' with browser '$BROWSER'"
	$BROWSER $RPM_URL
}

check_spec $LISTNAMES
