#!/bin/sh
#
# Copyright (c) 2003,2004 ALT Linux Ltd.
# Copyright (c) 2003,2004 Stanislav Ievlev <inger@altlinux.org>
#
# alternatives-update - utility from alternatives subsystem
# sets some alternative to manual mode
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
#

if [ "$0" = ./alternatives-manual ]; then
	. ./functions
	lib_dir="$(/bin/pwd)"
else
	. /usr/share/alternatives/functions
fi

#check are alternative valid: return 0 on success and 1 on error
is_valid()
{
    ls -1 $package_dir/* &>/dev/null #check are some files in autodir available
    [ $? -ne 0 ] && return 0
    cat $package_dir/*|grep -qs "^$1[[:space:]]\+$2" || return 1
    return 0
}

show_help()
{
	cat <<EOF
Usage: $PROG [options] <alternative> <candidate>

The alternatives-manual utility turns some alternative into manual mode.
Alternative in manual mode always points to candidate that was selected.
Alternative in automatic mode points to  location calculated using weight 
values of candidates.
					  
All  changes  will  be made only in alternatives database.
The alternatives-update program should be run for changes to take effect.

Valid options are:
  -h, --help	display help screen
  -v, --version	display version information
				     
Report bugs to <inger@altlinux.org>
EOF
	exit
}

TEMP=`getopt -n $PROG -o h,v -l help,version -- "$@"` || show_usage
eval set -- "$TEMP"

while :; do
	case "$1" in
		--) shift; break ;;
		*) parse_common_option "$1" ;;
	esac
	shift
done

if [ $# -lt 2 ] ;then
    message "invalid arguments"
    show_usage
fi

from=${1:?alternative name null or not set}
to=${2:?candidate name  null or not set}

is_valid $from $to || fatal "$from:$to - invalid alternative"
[ -w $manual_file ] || fatal "$manual_file is not writable for me"

if grep -qs "^$from	" $manual_file; then
    ed -s $manual_file 2>/dev/null <<EOF
%s|^$from	.*|$from	$to	manual|g
wq
EOF
else
    echo "$from	$to	manual">>$manual_file
fi

message "don't forget to run alternatives-update to apply changes"
