public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/proj/guru:dev commit in: eclass/, eclass/tests/
@ 2024-01-24 18:44 Anna Vyalkova
  0 siblings, 0 replies; only message in thread
From: Anna Vyalkova @ 2024-01-24 18:44 UTC (permalink / raw
  To: gentoo-commits

commit:     586a56440594d8cde2ceb75e90cc0f4a19d8a8f5
Author:     Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq <DOT> in>
AuthorDate: Tue Jan 23 15:24:35 2024 +0000
Commit:     Anna Vyalkova <cyber+gentoo <AT> sysrq <DOT> in>
CommitDate: Wed Jan 24 18:43:00 2024 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=586a5644

databases.eclass: new --add-deps helper

Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq.in>

 eclass/databases.eclass   | 101 +++++++++++++++++++++++++++++-----------------
 eclass/tests/databases.sh |  86 ++++++++++++++++++++++++++++++---------
 2 files changed, 131 insertions(+), 56 deletions(-)

diff --git a/eclass/databases.eclass b/eclass/databases.eclass
index 9c2457e93e..1c640d3ee9 100644
--- a/eclass/databases.eclass
+++ b/eclass/databases.eclass
@@ -28,6 +28,11 @@
 #
 # @SUBSECTION Helper usage
 #
+# --add-deps <use>
+#
+# 	Adds the server package to build-time dependencies under the given USE flag
+# 	(IUSE will be set automatically).
+#
 # --die [msg]
 #
 #	Prints the path to the server's log file to the console and aborts the
@@ -79,10 +84,10 @@
 #
 # ...
 #
-# BDEPEND="test? ( ${DATABASES_DEPEND[postgres]} )"
-#
 # distutils_enable_tests pytest
 #
+# epostgres --add-deps test
+#
 # src_test() {
 # 	epostgres --start 65432
 # 	distutils-r1_src_test
@@ -118,39 +123,41 @@ declare -Ag DATABASES_DEPEND=()
 
 # @FUNCTION: _databases_set_globals
 # @INTERNAL
+# @DESCRIPTION:
+# Set the DATABASES_DEPEND variable.
 _databases_set_globals() {
-		local -A db_pkgs=(
-				[memcached]="net-misc/memcached"
-				[mongod]="dev-db/mongodb"
-				[mysql]="virtual/mysql"
-				[postgres]="dev-db/postgresql"
-				[redis]="dev-db/redis"
-		)
-
-		local -A db_useflags=(
-				[mysql]="server"
-				[postgres]="server"
-		)
-		
-		if declare -p DATABASES_REQ_USE &>/dev/null; then
-				[[ $(declare -p DATABASES_REQ_USE) == "declare -A"* ]] || \
-						die "DATABASES_REQ_USE must be declared as an associative array"
-		fi
-
-		local name dep usestr
-		for name in "${!db_pkgs[@]}"; do
-				dep=${db_pkgs[${name}]?}
-				usestr=${db_useflags[${name}]}
-				usestr+=",${DATABASES_REQ_USE[${name}]}"
-				# strip leading/trailing commas
-				usestr=${usestr#,}
-				usestr=${usestr%,}
-
-				[[ ${usestr} ]] && usestr="[${usestr}]"
-				DATABASES_DEPEND[${name?}]="${dep?}${usestr}"
-		done
-
-		readonly DATABASES_DEPEND
+	local -A db_pkgs=(
+		[memcached]="net-misc/memcached"
+		[mongod]="dev-db/mongodb"
+		[mysql]="virtual/mysql"
+		[postgres]="dev-db/postgresql"
+		[redis]="dev-db/redis"
+	)
+
+	local -A db_useflags=(
+		[mysql]="server"
+		[postgres]="server"
+	)
+
+	if declare -p DATABASES_REQ_USE &>/dev/null; then
+		[[ $(declare -p DATABASES_REQ_USE) == "declare -A"* ]] || \
+			die "DATABASES_REQ_USE must be declared as an associative array"
+	fi
+
+	local name dep usestr
+	for name in "${!db_pkgs[@]}"; do
+		dep=${db_pkgs[${name}]?}
+		usestr=${db_useflags[${name}]}
+		usestr+=",${DATABASES_REQ_USE[${name}]}"
+		# strip leading/trailing commas
+		usestr=${usestr#,}
+		usestr=${usestr%,}
+
+		[[ ${usestr} ]] && usestr="[${usestr}]"
+		DATABASES_DEPEND[${name?}]="${dep?}${usestr}"
+	done
+
+	readonly DATABASES_DEPEND
 }
 _databases_set_globals
 unset -f _databases_set_globals
@@ -176,6 +183,23 @@ _databases_die() {
 	die -n "${@}"
 }
 
+# @FUNCTION: _databases_add_deps
+# @USAGE: <funcname> <use>
+# @INTERNAL
+# @DESCRIPTION:
+# Set the BDEPEND, IUSE and RESTRICT variables.
+_databases_add_deps() {
+	local funcname=${1?}
+	local useflag=${2?}
+
+	BDEPEND="${useflag}? ( ${DATABASES_DEPEND[${funcname:1}]} )"
+	IUSE="${useflag}"
+	[[ ${useflag} == "test" ]] &&
+		RESTRICT="!test? ( test )"
+
+	return 0
+}
+
 # @FUNCTION: _databases_stop_service
 # @USAGE: <funcname>
 # @INTERNAL
@@ -200,19 +224,22 @@ _databases_stop_service() {
 # @DESCRIPTION:
 # Process the given command with its options.
 #
-# If "--start" command is used, `_${funcname}_start` function must be defined.
+# If "--start" command is used, "_${funcname}_start" function must be defined.
 # Note that directories will be created automatically.
 #
-# If `_${funcname}_stop` function is not declared, the internal
+# If "_${funcname}_stop" function is not declared, the internal
 # `_databases_stop_service` function will be used instead.
 #
-# No `--get` function can be overloaded.
+# "--get-*" and "-add-deps" helpers cannot be overloaded.
 _databases_dispatch() {
 	local funcname=${1?}
 	local cmd=${2?}
 	shift; shift
 
 	case ${cmd} in
+		--add-deps)
+			_databases_add_deps ${funcname} "${@}"
+			;;
 		--die)
 			_databases_die ${funcname} "${@}"
 			;;

diff --git a/eclass/tests/databases.sh b/eclass/tests/databases.sh
index 92cbbd13bf..08dd75472f 100755
--- a/eclass/tests/databases.sh
+++ b/eclass/tests/databases.sh
@@ -9,36 +9,70 @@ source "${GENTOO_REPO}"/eclass/tests/tests-common.sh || exit
 TESTS_ECLASS_SEARCH_PATHS+=( "${GENTOO_REPO}"/eclass )
 
 declare -A DATABASES_REQ_USE=(
-		[mongod]="ssl"
-		[postgres]="xml"
+	[mongod]="ssl"
+	[postgres]="xml"
 )
 
 inherit databases
 
+HELPERS=( ememcached emongod emysql epostgres eredis )
+
 test_depend() {
-		tbegin "if \${DATABASES_DEPEND} is defined"
-		declare -p DATABASES_DEPEND &>/dev/null
-		tend $?
+	tbegin "if \${DATABASES_DEPEND} is defined"
+	declare -p DATABASES_DEPEND &>/dev/null
+	tend $?
 
-		tbegin "\${DATABASES_DEPEND[memcached]}"
-		test "${DATABASES_DEPEND[memcached]}" == "net-misc/memcached"
-		tend $?
+	tbegin "\${DATABASES_DEPEND[memcached]}"
+	test "${DATABASES_DEPEND[memcached]}" == "net-misc/memcached"
+	tend $?
 
-		tbegin "\${DATABASES_DEPEND[mongod]}"
-		test "${DATABASES_DEPEND[mongod]}" == "dev-db/mongodb[ssl]"
-		tend $?
+	tbegin "\${DATABASES_DEPEND[mongod]}"
+	test "${DATABASES_DEPEND[mongod]}" == "dev-db/mongodb[ssl]"
+	tend $?
 
-		tbegin "\${DATABASES_DEPEND[mysql]}"
-		test "${DATABASES_DEPEND[mysql]}" == "virtual/mysql[server]"
-		tend $?
+	tbegin "\${DATABASES_DEPEND[mysql]}"
+	test "${DATABASES_DEPEND[mysql]}" == "virtual/mysql[server]"
+	tend $?
 
-		tbegin "\${DATABASES_DEPEND[postgres]}"
-		test "${DATABASES_DEPEND[postgres]}" == "dev-db/postgresql[server,xml]"
-		tend $?
+	tbegin "\${DATABASES_DEPEND[postgres]}"
+	test "${DATABASES_DEPEND[postgres]}" == "dev-db/postgresql[server,xml]"
+	tend $?
+
+	tbegin "\${DATABASES_DEPEND[redis]}"
+	test "${DATABASES_DEPEND[redis]}" == "dev-db/redis"
+	tend $?
+}
+
+test_add_deps() {
+	local IUSE= RESTRICT= BDEPEND=
+	local helper=${1?}
+
+	IUSE= RESTRICT= BDEPEND=
+	tbegin "'${helper} --add-deps test'"
+	${helper} --add-deps test && [[ ${BDEPEND} && ${IUSE} && ${RESTRICT} ]]
+	tend $?
 
-		tbegin "\${DATABASES_DEPEND[redis]}"
-		test "${DATABASES_DEPEND[redis]}" == "dev-db/redis"
+	IUSE= RESTRICT= BDEPEND=
+	tbegin "'${helper} --add-deps test-db'"
+	${helper} --add-deps test-db && [[ ${BDEPEND} && ${IUSE} && ! ${RESTRICT} ]]
+	tend $?
+}
+
+test_getters() {
+	local helper=${1?}
+	local getters=(
+		--get-dbpath
+		--get-logfile
+		--get-pidfile
+		--get-sockdir
+		--get-sockfile
+	)
+
+	for getter in "${getters[@]}"; do
+		tbegin "'${helper} ${getter}'"
+		test -n "$(${helper} ${getter})"
 		tend $?
+	done
 }
 
 einfo "Testing dependency strings"
@@ -46,4 +80,18 @@ eindent
 test_depend
 eoutdent
 
+einfo "Testing --add-deps helper"
+eindent
+for helper in "${HELPERS[@]}"; do
+	test_add_deps ${helper}
+done
+eoutdent
+
+einfo "Testing --get-* helpers"
+eindent
+for helper in "${HELPERS[@]}"; do
+	test_getters ${helper}
+done
+eoutdent
+
 texit


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2024-01-24 18:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-24 18:44 [gentoo-commits] repo/proj/guru:dev commit in: eclass/, eclass/tests/ Anna Vyalkova

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox