#!/usr/local/bin/cbsd
#v11.1.16
MYARG="ver"
MYOPTARG="arch platform target_arch source basename baseupdate"
MYDESC="Register basedir for jails in CBSD CB"
CBSDMODULE="jail,sys"
ADDHELP="

${H3_COLOR}Description${N0_COLOR}:

Register basedir for jails in CBSD CB

${H3_COLOR}Options${N0_COLOR}:

 ${N2_COLOR}basename${N0_COLOR}       - <path> - alternative DESTDIR= path instead of ~cbsd/basejail/;

${H3_COLOR}Examples${N0_COLOR}:

 # cbsd register_base arch=amd64 ver=14.2 target_arch=amd64 platform=FreeBSD source=\"My private repo\"
 # cbsd register_base arch=amd64 ver=empty basename="ca10502801e3b89a4d4f94f3a4dcc0d7"

${H3_COLOR}See also${N0_COLOR}:

  cbsd unregister_base --help
  cbsd bases --help

"

. ${subrdir}/nc.subr

source=
basename=
auto_baseupdate=
oauto_baseupdate=
obasename=
basename=
arch=
oarch=
. ${cbsdinit}

[ -z "${arch}" ] && arch=$( ${UNAME_CMD} -m )
[ -n "${basename}" ] && obasename="${basename}"
[ -n "${auto_baseupdate}" ] && oauto_baseupdate="${baseupdate}"
[ -z "${source}" ] && source="unknown"

. ${tools}
. ${strings}
. ${system}

[ -n "${oarch}" ] && arch="${oarch}"
[ -z "${target_arch}" ] && target_arch="${arch}"

. ${subrdir}/universe.subr

strpos --str="${ver}" --search="."
# auto-detect for stable/release
pos=$?
if [ ${pos} -eq 0 ]; then
	stable=1
	ostable=1
else
	stable=0
	ostable=0
fi

basename=
if [ -n "${obasename}" ]; then
	basename="${obasename}"
fi

case "${platform}" in
	DragonFly)
		[ "${target_arch}" = "amd64" ] && target_arch="x86_64"
		;;
esac

init_basedir -b "${basename}"

[ -z "${BASE_DIR}" ] && err 1 "${N1_COLOR}${CBSD_APP}: empty BASE_DIR: init_basedir${N0_COLOR}"
[ ! -d "${BASE_DIR}" ] && err 1 "${N1_COLOR}${CBSD_APP}: no such directory: ${N2_COLOR}${BASE_DIR}${N0_COLOR}"
if [ ! -x "${BASE_DIR}/bin/sh" ]; then
	${ECHO} "${N1_COLOR}register_base: no /bin/sh, skip ELF test: ${N2_COLOR}${BASE_DIR}${N0_COLOR}"
	baseelf="0"
else
	baseelf=$( ${miscdir}/elf_tables --ver ${BASE_DIR}/bin/sh 2>/dev/null )
fi

if [ -n "${basename}" ]; then
	_basename_args="-b ${basename}"
else
	_basename_args=
fi

idx=$( get_baseidx -a ${arch} -p ${platform} -s ${stable} -t ${target_arch} -v ${ver} ${_basename_args} )

if [ -n "${idx}" ]; then
	cbsdsqlrw local "UPDATE bsdbase SET elf='${baseelf}',date=datetime('now','localtime'),source='${source}' WHERE idx='${idx}'"
	dt=$( cbsdsqlro local "SELECT date FROM bsdbase WHERE elf='${baseelf}' AND idx='${idx}'" 2>/dev/null )
	date=$( ${DATE_CMD} -j -f "%Y-%m-%d %H:%M:%S" "${dt}" "+%s" )
	${ECHO} "${N1_COLOR}Bases updated: ${N2_COLOR}${BASE_DIR}${N0_COLOR}"
else
	if [ -n "${basename}" ]; then
		cbsdsqlrw local "INSERT INTO bsdbase ( platform,name,arch,targetarch,ver,stable,elf,source,basename ) VALUES ( '${platform}', 'base', '${arch}', '${target_arch}', '${ver}', '${stable}', '${baseelf}', '${source}', '${basename}' )"
	else
		cbsdsqlrw local "INSERT INTO bsdbase ( platform,name,arch,targetarch,ver,stable,elf,source ) VALUES ( '${platform}', 'base', '${arch}', '${target_arch}', '${ver}', '${stable}', '${baseelf}', '${source}' )"
	fi
	${ECHO} "${N1_COLOR}Bases registered: ${N2_COLOR}${BASE_DIR}${N0_COLOR}"
fi

# not for DflyBSD platform
if [ "${platform}" != "DragonFly" ]; then
	# auto baseupdate? for stable=0 only
	if [ "${stable}" = "0" ]; then
		readconf ${platform}-bases.conf
		[ -n "${oauto_baseupdate}" ] && auto_baseupdate="${oauto_baseupdate}"
		if [ "${auto_baseupdate}" = "1" ]; then
			${ECHO} "${N1_COLOR}register_base: ${H5_COLOR}auto_baseupdate=1${N1_COLOR} via ${platform}-bases.conf, trying to perform baseupdate, please wait...${N0_COLOR}"
			if [ -n "${basename}" ]; then
				baseupdate arch=${arch} ver=${ver} target_arch=${TARGET_ARCH} basename="${basename}"
			else
				baseupdate arch=${arch} ver=${ver} target_arch=${TARGET_ARCH}
			fi
		else
			[ -z "${oauto_baseupdate}" ] && ${ECHO} "${N1_COLOR}register_base: ${H5_COLOR}auto_baseupdate=0${N1_COLOR} via ${platform}-bases.conf, updates disabled${N0_COLOR}"
			[ -z "${oauto_baseupdate}" ] && ${ECHO} "${N1_COLOR}register_base: you might want to do ${N2_COLOR}cbsd baseupdate${N1_COLOR} by hand to fetch latest patches${N0_COLOR}"
		fi
	fi
fi

exit 0
