# This file is part of shellfire core. It is subject to the licence terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/shellfire-dev/core/master/COPYRIGHT. No part of shellfire core, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file.
# Copyright © 2014-2015 The developers of shellfire core. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/shellfire-dev/core/master/COPYRIGHT.


core_dependency_check_CentOS_checkFunction()
{
	core_dependency_check_releaseFile centos-release CentOS
}
core_functions_register _core_dependency_check_functions core_dependency_check_CentOS_checkFunction

_core_dependency_check_CentOS_parsePackageName()
{
	repositoryName=''
	packageName=''
	IFS='/' read -r repositoryName packageName <<-EOF
		${fullyQualifiedPackageName}
	EOF
	
	if [ -z "$packageName" ]; then
		repositoryName=''
		packageName="$repositoryName"
	fi
}

core_dependency_check_CentOS_extractUnqualifiedPackageName()
{
	local fullyQualifiedPackageName="$1"

	local repositoryName
	local packageName
	_core_dependency_check_CentOS_parsePackageName
	
	printf '%s' "$packageName"
}

core_dependency_requires CentOS sudo yum
core_dependency_requires Fedora sudo yum
core_dependency_requires RedHat sudo yum
core_dependency_check_CentOS_packageManager()
{
	if [ $(core_init_verbosity) -gt 0 ]; then
		local yumVerbosity=""
	else
		local yumVerbosity="--quiet"
	fi

	local ourCurrentId="$(id -u)"
	if [ "$ourCurrentId" = 0 ]; then
		yum ${yumVerbosity} makecache
	elif core_compatibility_whichNoOutput sudo; then
		sudo -p "Please enter the password for %p for sudo to update yum: " yum ${yumVerbosity} makecache
	else
		core_message INFO "Not running as root and sudo not found, so not installing packages '$@'"
		return 0
	fi
	
	local repositoryName
	local packageName
	local fullyQualifiedPackageName
	local functionName
	for fullyQualifiedPackageName in "$@"
	do
		_core_dependency_check_CentOS_parsePackageName
		if [ -z "$repositoryName" ]; then

			if [ "$ourCurrentId" = 0 ]; then
				yum ${yumVerbosity} -y install "$packageName"
			else
				sudo -p "Please enter the password for %p for sudo to run yum install $packageName: " yum ${yumVerbosity} -y install "$packageName"
			fi
		else
			functionName=_core_dependency_check_CentOS_installRepository_${repositoryName}
			if ! core_functions_exists "$functionName"; then
				core_exitError "Package '$packageName' is in an unsupported repository '$repositoryName'"
			else
				${functionName}
			fi
			if [ "$repositoryName" = 'repoforge' ]; then
				repositoryName=rpmforge
			fi
			
			if [ "$ourCurrentId" = 0 ]; then
				yum ${yumVerbosity} -y --disablerepo="*" --enablerepo="$repositoryName" install "$packageName"
			else
				sudo -p "Please enter the password for %p for sudo to run yum install $packageName: " yum ${yumVerbosity} -y --disablerepo="*" --enablerepo="$repositoryName" install "$packageName"
			fi
		fi
	
	done
}

core_dependency_requires CentOS yum head
core_dependency_requires Fedora yum head
core_dependency_requires RedHat yum head
_core_dependency_check_CentOS_detectIfYumSupportsAssumeYes()
{
	yum --version | head -n 1
}

core_dependency_requires CentOS rpm grep
core_dependency_requires Fedora rpm grep
core_dependency_requires RedHat rpm grep
_core_dependency_check_CentOS_checkPackageInstalled()
{
	# doesn't work for packages installed by rpm (eg rpmforge)
	#  yum --quiet list installed "$1" 1>/dev/null 2>/dev/null; then
	# might work
	#  yum list | grep "$1"
	
	local packageName="$1"
	rpm -qa | grep -q "^${packageName}-"
}

core_dependency_requires CentOS sudo yum
core_dependency_requires Fedora sudo yum
core_dependency_requires RedHat sudo yum
_core_dependency_check_CentOS_installRepository_epel()
{
	if _core_dependency_check_CentOS_checkPackageInstalled 'epel-release'; then
		return 0
	fi
	
	sudo -p "Please enter the password for %p for sudo to run yum install epel-release: " yum ${yumVerbosity} -y install epel-release
}

core_dependency_requires CentOS sed uname sudo rpm curl yum
core_dependency_requires Fedora sed uname sudo rpm curl yum
core_dependency_requires RedHat sed uname sudo rpm curl yum
_core_dependency_check_CentOS_installRepository_repoforge()
{
	if _core_dependency_check_CentOS_checkPackageInstalled 'rpmforge-release'; then
		return 0
	fi
	local TMP_FILE
	core_temporaryFiles_newFileToRemoveOnExit
	local temporaryFile="$TMP_FILE"
	
	# We're supposed to use lsb_release -r, but it isn't installed by default on CentOS 6 or 7 (and the install pulls in 156 packages for the redhat-lsb package it's in)
	sed -e 's/release /release./g' -e 's/.* release\.//g' -e 's/ .*$//g' /etc/redhat-release >"$temporaryFile"
	local release
	local garbage
	IFS='.' read -r release garbage <"$temporaryFile"
	
	local downloadUrl="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el${release}.rf.$(uname -m).rpm"
	
	local repoForgeReleaseRpmFilePath="$temporaryFile"
	
	sudo -p "Please enter the password for %p for sudo to import repoforge repository's key (please note this is only available over _HTTP_): " rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt 2>/dev/null || true	
	
	curl --silent --location --url "$downloadUrl" >"$repoForgeReleaseRpmFilePath"
	
	rpm -K "$repoForgeReleaseRpmFilePath" 1>/dev/null 2>/dev/null || core_exitError $core_commandLine_exitCode_IOERR "Downloaded repoforge package corrupt or tampered with"
	
	sudo -p "Please enter the password for %p for sudo to add the repoforge repository" rpm --quiet -ivh "$repoForgeReleaseRpmFilePath"

	sudo -p "Please enter the password for %p for sudo to update yum: " yum --quiet makecache
}
