aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gentoo.org>2014-12-19 17:47:00 -0800
committerTim Harder <radhermit@gentoo.org>2014-12-19 17:47:55 -0800
commit6a8e0ecd0c8ff254df250bd2f6f8dd4166795219 (patch)
tree2171a2eef59a6a64e01090e390b4fb4512de472d /src/_gentoo_repos
parent_gentoo_packages: replace backtick usage with $() (diff)
downloadzsh-completion-6a8e0ecd0c8ff254df250bd2f6f8dd4166795219.tar.gz
zsh-completion-6a8e0ecd0c8ff254df250bd2f6f8dd4166795219.tar.bz2
zsh-completion-6a8e0ecd0c8ff254df250bd2f6f8dd4166795219.zip
move duplicated repos functionality to _gentoo_repos
For dependent scripts, it only requires renaming `_portdir` calls to use `_gentoo_repos` instead, optional arguments (-o) remain the same for now.
Diffstat (limited to 'src/_gentoo_repos')
-rw-r--r--src/_gentoo_repos85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/_gentoo_repos b/src/_gentoo_repos
new file mode 100644
index 0000000..27e98dd
--- /dev/null
+++ b/src/_gentoo_repos
@@ -0,0 +1,85 @@
+#autoload
+
+# Usage:
+# _gentoo_repos -> returns the main repo (with PORTDIR fallback)
+# _gentoo_repos -o -> returns the list of non-main repos (with PORTDIR_OVERLAY fallback)
+
+_gentoo_repos() {
+ local mainreponame mainrepopath overlayname overlaypath
+
+ if [[ -e /usr/share/portage/config/repos.conf ]]; then
+ if [[ ${1} == "-o" ]]; then
+ for overlayname in $(_parsereposconf -l); do
+ overlaypath+=($(_parsereposconf ${overlayname} location))
+ done
+
+ source /etc/make.conf 2>/dev/null
+ source /etc/portage/make.conf 2>/dev/null
+
+ overlaypath+=(${(@)PORTDIR_OVERLAY})
+
+ echo "${(@u)overlaypath}"
+ else
+ mainreponame=$(_parsereposconf DEFAULT main-repo)
+ mainrepopath=$(_parsereposconf ${mainreponame} location)
+
+ echo "${mainrepopath}"
+ fi
+ else
+ source /usr/share/portage/config/make.globals 2>/dev/null
+ source /etc/make.conf 2>/dev/null
+ source /etc/portage/make.conf 2>/dev/null
+
+ if [[ ${1} == "-o" ]]; then
+ echo "${(@u)PORTDIR_OVERLAY}"
+ else
+ echo "${PORTDIR}"
+ fi
+ fi
+}
+
+_parsereposconf() {
+ local v f insection section arr
+
+ for f in /usr/share/portage/config/repos.conf \
+ /etc/portage/repos.conf \
+ /etc/portage/repos.conf/*.conf; do
+
+ [[ -f ${f} ]] || continue
+ insection=0
+ declare -A arr
+ IFS='= '
+
+ while read -r name value; do
+ [[ -z ${name} || ${name} == '#'* ]] && continue
+
+ if [[ (${name} == '['*']') && (-z ${value}) ]]; then
+ value=${name//(\]|\[)}
+ name="section"
+ fi
+ arr[${name}]=${value}
+
+ if [[ ${insection} == 1 && ${name} == "section" ]]; then
+ break
+ elif [[ ${name} == "section" ]]; then
+ [[ ${value} == ${1} ]] && insection=1
+ secname+=(${value})
+ elif [[ ${insection} == 1 ]]; then
+ if [[ ${name} == ${2} ]]; then
+ v=${value}
+ fi
+ fi
+ continue
+ done < ${f}
+ done
+
+ if [[ ${1} == "-l" ]]; then
+ echo "${(@)secname}"
+ else
+ echo "${v}"
+ fi
+}
+
+_gentoo_repos "$@"
+
+# vim: set et sw=2 sts=2 ts=2 ft=zsh: