* [gentoo-dev] [PATCH] git-r3.eclass: Make EGIT_LIVE_* associative arrays
@ 2016-06-22 23:22 99% Dan Douglas
0 siblings, 0 replies; 1+ results
From: Dan Douglas @ 2016-06-22 23:22 UTC (permalink / raw
To: gentoo-dev
[-- Attachment #1.1: Type: text/plain, Size: 4508 bytes --]
This creates new associative arrays for each "live" variable if bash4 /
eapi6 is available. Mainly for user convenience in a bashrc as an
alternative to magic variable names.
---
eclass/git-r3.eclass | 68 ++++++++++++++++++++++++++++++----------------------
1 file changed, 39 insertions(+), 29 deletions(-)
diff --git a/eclass/git-r3.eclass b/eclass/git-r3.eclass
index 0ac9d90..220054e 100644
--- a/eclass/git-r3.eclass
+++ b/eclass/git-r3.eclass
@@ -112,14 +112,19 @@ fi
# @ECLASS-VARIABLE: EGIT_REPO_URI
# @REQUIRED
# @DESCRIPTION:
-# URIs to the repository, e.g. git://foo, https://foo. If multiple URIs
-# are provided, the eclass will consider them as fallback URIs to try
-# if the first URI does not work. For supported URI syntaxes, read up
-# the manpage for git-clone(1).
+# URIs to the repository, e.g. git://foo, https://foo. If multiple URIs are
+# provided, the eclass will consider them as fallback URIs to try if the first
+# URI does not work. For supported URI syntaxes, read up the manpage for
+# git-clone(1). EGIT_REPO_URI can also be a whitespace-separated list or an
+# array.
#
-# It can be overriden via env using ${PN}_LIVE_REPO variable.
-#
-# Can be a whitespace-separated list or an array.
+# It can be overriden via env using the ${PN}_LIVE_REPO variable. Hyphens and
+# pluses in ${PN} must be substituted for underscores to form a valid variable
+# name.
+
+# Additionally, a .bashrc or hook function can use the EGIT_LIVE_REPO[${PN}]
+# associative array (bash 4 only). Its value can be a whitespace-spearated
+# list. EGIT_LIVE_REPO takes precedence over ${PN}_LIVE_REPO.
#
# Example:
# @CODE
@@ -148,7 +153,8 @@ fi
# The branch name to check out. If unset, the upstream default (HEAD)
# will be used.
#
-# It can be overridden via env using ${PN}_LIVE_BRANCH variable.
+# It can be overridden via env using ${PN}_LIVE_BRANCH variable or via
+# EGIT_LIVE_BRANCH[${PN}] associative array.
# @ECLASS-VARIABLE: EGIT_COMMIT
# @DEFAULT_UNSET
@@ -157,7 +163,8 @@ fi
# commit from the branch will be used. If set, EGIT_BRANCH will
# be ignored.
#
-# It can be overridden via env using ${PN}_LIVE_COMMIT variable.
+# It can be overridden via env using ${PN}_LIVE_COMMIT variable or via
+# EGIT_LIVE_COMMIT[${PN}] associative array.
# @ECLASS-VARIABLE: EGIT_COMMIT_DATE
# @DEFAULT_UNSET
@@ -172,7 +179,8 @@ fi
# will be considered alike a single commit with date corresponding
# to the merge commit date.
#
-# It can be overridden via env using ${PN}_LIVE_COMMIT_DATE variable.
+# It can be overridden via env using ${PN}_LIVE_COMMIT_DATE variable or via
+# EGIT_LIVE_COMMIT_DATE[${PN}] associative array.
# @ECLASS-VARIABLE: EGIT_CHECKOUT_DIR
# @DESCRIPTION:
@@ -251,28 +259,30 @@ _git-r3_env_setup() {
die 'EGIT_SUBMODULES must be an array.'
fi
- local esc_pn livevar
- esc_pn=${PN//[-+]/_}
-
- livevar=${esc_pn}_LIVE_REPO
- EGIT_REPO_URI=${!livevar-${EGIT_REPO_URI}}
- [[ ${!livevar} ]] \
- && ewarn "Using ${livevar}, no support will be provided"
+ # Pairs of variable names associating eclass variables with the
+ # user-configurable variables for overriding them.
+ local -a livevars=(
+ EGIT_REPO_URI LIVE_REPO
+ {EGIT,LIVE}_BRANCH
+ {EGIT,LIVE}_COMMIT
+ {EGIT,LIVE}_COMMIT_DATE
+ )
- livevar=${esc_pn}_LIVE_BRANCH
- EGIT_BRANCH=${!livevar-${EGIT_BRANCH}}
- [[ ${!livevar} ]] \
- && ewarn "Using ${livevar}, no support will be provided"
+ local idx ref esc_pn=${PN//[-+]/_}
+ for ((idx = 0; idx <= ${#livevars[@]}; idx += 2)); do
+ [[
+ ( BASH_VERSINFO[0] -ge 4 || EAPI -ge 6 ) &&
+ $(declare -p "EGIT_${livevars[idx+1]}" 2>/dev/null) == 'declare -A'*
+ ]] && ref=EGIT_${livevars[idx+1]}[\$PN]
- livevar=${esc_pn}_LIVE_COMMIT
- EGIT_COMMIT=${!livevar-${EGIT_COMMIT}}
- [[ ${!livevar} ]] \
- && ewarn "Using ${livevar}, no support will be provided"
+ [[ ${!ref} ]] || ref=${esc_pn}_${livevars[idx+1]}
- livevar=${esc_pn}_LIVE_COMMIT_DATE
- EGIT_COMMIT_DATE=${!livevar-${EGIT_COMMIT_DATE}}
- [[ ${!livevar} ]] \
- && ewarn "Using ${livevar}, no support will be provided"
+ if [[ ${!ref} ]]; then
+ ewarn "Using ${livevars[idx]} = ${!ref}. This build is unsupported."
+ printf -v "${livevars[idx]}" -- %s "${!ref}"
+ fi
+ unset -v ref
+ done
if [[ ${EGIT_COMMIT} && ${EGIT_COMMIT_DATE} ]]; then
die "EGIT_COMMIT and EGIT_COMMIT_DATE can not be specified simultaneously"
--
2.9.0
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
^ permalink raw reply related [relevance 99%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-06-22 23:22 99% [gentoo-dev] [PATCH] git-r3.eclass: Make EGIT_LIVE_* associative arrays Dan Douglas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox