commit: 17d7a4564177b1985e4b7e8f23a8efbc4d5c32ae Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Sat Nov 18 09:14:31 2017 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Tue Nov 28 09:14:47 2017 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=17d7a456
git-r3.eclass: Support more flexible EGIT_OVERRIDE_* APIs for user Introduce a new, more flexible override API in git-r3, in replacement of the LIVE_* API that was pretty much a legacy of git-2. This means to solve the two major limitations of the old API: 1. The variables were based on package names without categories. Therefore, they weren't suitable whenever two packages had the same category. This is quite common when dealing with various programming language bindings/reimplementations, and we can't really rely on every new programming language inventing its own VCS. 2. The overrides weren't suitable for packages checking out multiple repositories (LLVM, wine, glibc). The new mode for overrides uses the repository name (as guessed by git-r3) transformed into correct variable name. The specifically defined variables are: - EGIT_OVERRIDE_REPO_${NAME} -- to override the repository URI, - EGIT_OVERRIDE_BRANCH_${NAME} -- to override the branch, - EGIT_OVERRIDE_COMMIT_${NAME} -- to override the commit id or tag, - EGIT_OVERRIDE_COMMIT_DATE_${NAME} -- to request last commit older than the specified date. eclass/git-r3.eclass | 55 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/eclass/git-r3.eclass b/eclass/git-r3.eclass index caf4e8d003e..55a987b7954 100644 --- a/eclass/git-r3.eclass +++ b/eclass/git-r3.eclass @@ -553,6 +553,7 @@ _git-r3_is_local_repo() { git-r3_fetch() { debug-print-function ${FUNCNAME} "$@" + # process repos first since we create repo_name from it local repos if [[ ${1} ]]; then repos=( ${1} ) @@ -562,12 +563,6 @@ git-r3_fetch() { repos=( ${EGIT_REPO_URI} ) fi - local branch=${EGIT_BRANCH:+refs/heads/${EGIT_BRANCH}} - local remote_ref=${2:-${EGIT_COMMIT:-${branch:-HEAD}}} - local local_id=${3:-${CATEGORY}/${PN}/${SLOT%/*}} - local local_ref=refs/git-r3/${local_id}/__main__ - local commit_date=${4:-${EGIT_COMMIT_DATE}} - [[ ${repos[@]} ]] || die "No URI provided and EGIT_REPO_URI unset" local r @@ -591,6 +586,54 @@ git-r3_fetch() { ) fi + # get the default values for the common variables and override them + local branch_name=${EGIT_BRANCH} + local commit_id=${2:-${EGIT_COMMIT}} + local commit_date=${4:-${EGIT_COMMIT_DATE}} + + # support new override API for EAPI 6+ + if ! has "${EAPI:-0}" 0 1 2 3 4 5; then + # get the name and do some more processing: + # 1) kill .git suffix, + # 2) underscore (remaining) non-variable characters, + # 3) add preceding underscore if it starts with a digit, + # 4) uppercase. + local override_name=${GIT_DIR##*/} + override_name=${override_name%.git} + override_name=${override_name//[^a-zA-Z0-9_]/_} + override_name=${override_name^^} + + local varmap=( + REPO:repos + BRANCH:branch_name + COMMIT:commit_id + COMMIT_DATE:commit_date + ) + + local localvar livevar live_warn= + for localvar in "${varmap[@]}"; do + livevar=EGIT_OVERRIDE_${localvar%:*}_${override_name} + localvar=${localvar#*:} + + if [[ -n ${!livevar} ]]; then + [[ ${localvar} == repos ]] && repos=() + live_warn=1 + ewarn "Using ${livevar}=${!livevar}" + declare "${localvar}=${!livevar}" + fi + done + + if [[ ${live_warn} ]]; then + ewarn "No support will be provided." + fi + fi + + # set final variables after applying overrides + local branch=${branch_name:+refs/heads/${branch_name}} + local remote_ref=${commit_id:-${branch:-HEAD}} + local local_id=${3:-${CATEGORY}/${PN}/${SLOT%/*}} + local local_ref=refs/git-r3/${local_id}/__main__ + # try to fetch from the remote local success saved_umask if [[ ${EVCS_UMASK} ]]; then