public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Vadim A. Misbakh-Soloviov" <mva@mva.name>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/zsh-completion:master commit in: /
Date: Tue, 26 Aug 2014 04:46:35 +0000 (UTC)	[thread overview]
Message-ID: <1409028294.9ccf71ce6ccd3dc3e9c1028da4d9b9247553a0e9.mva@gentoo> (raw)

commit:     9ccf71ce6ccd3dc3e9c1028da4d9b9247553a0e9
Author:     Vadim A. Misbakh-Soloviov <mva <AT> mva <DOT> name>
AuthorDate: Tue Aug 26 04:44:54 2014 +0000
Commit:     Vadim A. Misbakh-Soloviov <mva <AT> mva <DOT> name>
CommitDate: Tue Aug 26 04:44:54 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/zsh-completion.git;a=commit;h=9ccf71ce

_gentoo_packages: repos.conf support

Signed-off-by: Vadim A. Misbakh-Soloviov <mva <AT> mva.name>

---
 _gentoo_packages | 237 +++++++++++++++++++++++++++++++++----------------------
 _portage_utils   |  91 +++++++++++++++++++--
 2 files changed, 227 insertions(+), 101 deletions(-)

diff --git a/_gentoo_packages b/_gentoo_packages
index 767d592..f991cfb 100644
--- a/_gentoo_packages
+++ b/_gentoo_packages
@@ -5,58 +5,131 @@
 # inspired by _deb_packages
 #Usage: _gentoo_packages installed|available|installed_versions|available_versions|binary|category|useflag
 
+
+_portdir() {
+    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})
+
+            # strip out duplicates
+            overlaypath=($(printf "%s\n" "${overlaypath[@]}" | sort -u))
+
+            echo "${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
+
+        echo "${PORTDIR}"
+
+        if [[ ${1} == -o ]]; then⋅
+            echo "${PORTDIR_OVERLAY}"
+        fi⋅⋅⋅
+    fi
+}
+
+_parsereposconf() {
+    local f insection line section v value var
+
+    for f in /usr/share/portage/config/repos.conf \
+        /etc/portage/repos.conf \
+        /etc/portage/repos.conf/*.conf; do
+
+        [[ -f ${f} ]] || continue
+        insection=0
+
+        while read -r line; do
+            # skip comments and blank lines
+            [[ -z ${line} || ${line} == '#'* ]] && continue
+
+            if [[ ${insection} == 1 && ${line} == '['*']' ]]; then
+                # End of the section we were interested in so stop
+                secname+=(${line//[(\[|\])]/}) # record name for -l
+                break
+            elif [[ ${line} == '['*']' ]]; then
+                # Entering a new section, check if it's the one we want
+                section=${line//[(\[|\])]/}
+                [[ ${section} == "${1}" ]] && insection=1
+                secname+=(${section}) # record name for -l
+            elif [[ ${insection} == 1 ]]; then
+                # We're in the section we want, grab the values
+                var=${line%%=*}
+                var=${var// /}
+                value=${line#*=}
+                value=${value# }
+                [[ ${var} == ${2} ]] && v=${value}
+            fi
+            continue
+        done < "${f}"
+    done
+
+    if [[ ${1} == -l ]]; then
+        echo "${secname[@]}"
+    else
+        echo "${v}"
+    fi
+}
+
 # Completion function to show useflags.
 _gentoo_packages_update_useflag(){
-    local flags PORTDIR
-	var=PORTDIR
-	[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	    local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
-
-    flags=( ${${(M)${(f)"$(<$PORTDIR/profiles/use.desc)"}:#* - *}%% - *}
-    ${${${(M)${(f)"$(<$PORTDIR/profiles/use.local.desc)"}#* - *}%% - *}#*:} )
+    local flags trees
+
+    flags=()
+    trees=( $(_portdir) $(_portdir -o) )
+
+    for PORTDIR in ${trees[@]}; do
+       [[ -r ${PORTDIR}/profiles/use.desc ]] &&
+        flags+=( ${${(M)${(f)"$(<$PORTDIR/profiles/use.desc)"}:#* - *}%% - *} )
+       [[ -r ${PORTDIR}/profiles/use.local.desc ]] &&
+        flags+=( ${${${(M)${(f)"$(<$PORTDIR/profiles/use.local.desc)"}#* - *}%% - *}#*:} )
+    done
+
     compadd $flags
 }
 
 _gentoo_packages_update_active_useflag(){
-  local flags USE
-  var=USE
-  [[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-  [[ -z ${(P)var} && -r /etc/make.conf ]] &&
-    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-  flags=(${${${=USE}%-*}%\\*})
-  compadd $flags
+    local flags USE
+    var=USE
+    [[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
+      local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
+    [[ -z ${(P)var} && -r /etc/make.conf ]] &&
+      local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
+    flags=(${${${=USE}%-*}%\\*})
+    compadd $flags
 }
 _gentoo_packages_update_category(){
-    local var trees category
-    for var in PORTDIR PORTDIR_OVERLAY ; do
-	[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	    local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
-    done
-    trees=($PORTDIR $=PORTDIR_OVERLAY)
+    local trees category
+
+    trees=( $(_portdir) $(_portdir -o) )
     category=( $trees/*-*(/:t) )
     _wanted cat_packages expl 'category' compadd "$@" $category
 }
 
 _gentoo_packages_update_installed(){
- local installed_dir installed_portage installed_list expl
-    installed_dir="/var/db/pkg"
-    installed_portage=($installed_dir/*-*/*)
-
-    installed_pkgname=( ${${installed_portage:t}%%-[0-9]*} )
-    _wanted packages expl 'category/package' compadd "$@" ${installed_pkgname}
+   local installed_dir installed_portage installed_list expl
+   installed_dir="/var/db/pkg"
+   installed_portage=($installed_dir/*-*/*)
 
-    installed_list=( ${${installed_portage#$installed_dir/}%%-[0-9]*} )
-    _wanted cat_packages expl 'category/package' _multi_parts "$@" / installed_list
+   installed_pkgname=( ${${installed_portage:t}%%-[0-9]*} )
+   _wanted packages expl 'category/package' compadd "$@" ${installed_pkgname}
 
+   installed_list=( ${${installed_portage#$installed_dir/}%%-[0-9]*} )
+   _wanted cat_packages expl 'category/package' _multi_parts "$@" / installed_list
 }
 
 _gentoo_packages_update_installed_versions(){
@@ -70,34 +143,18 @@ _gentoo_packages_update_installed_versions(){
 }
 
 _gentoo_packages_update_available_pkgnames_only(){
-    local var trees packages
-
-    for var in PORTDIR PORTDIR_OVERLAY ; do
-	[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	    local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
-    done
-    trees=( $PORTDIR $=PORTDIR_OVERLAY)
+    local trees packages
+
+    trees=( $(_portdir) $(_portdir -o) )
 
     packages=( $trees/*-*/*(:t) )
     _wanted packages expl 'package' compadd  - "${(@)packages}"
 }
 
 _gentoo_packages_update_available(){
-    local var trees category packages pkg expl
-
-    for var in PORTDIR PORTDIR_OVERLAY ; do
-	[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	    local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
-    done
-    trees=( $PORTDIR $=PORTDIR_OVERLAY)
+    local trees category packages pkg expl
+
+    trees=( $(_portdir) $(_portdir -o) )
     category=( $trees/*-*(/:t) )
 
     packages=( $trees/*-*/*(:t) )
@@ -108,33 +165,28 @@ _gentoo_packages_update_available(){
     # complete cat/pkg/files (if "files" is ignored with -F, miscfiles, etc...
     # don't get completed).
     if [[ $PREFIX != */* ]] ; then
-	_wanted cat_packages expl 'category/package' compadd -S '/' $category
+        _wanted cat_packages expl 'category/package' compadd -S '/' $category
     else
-	compset -P '*/'
-	pkg=( $trees/$IPREFIX/*(:t) )
-	_wanted cat_packages expl 'category/package' compadd $pkg
+        compset -P '*/'
+        pkg=( $trees/$IPREFIX/*(:t) )
+        _wanted cat_packages expl 'category/package' compadd $pkg
     fi
 }
 
 _gentoo_packages_update_available_versions(){
     local var overlay_ebuilds portage_ebuilds expl trees category
 
-    for var in PORTDIR PORTDIR_OVERLAY ; do
-	[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	    local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	    local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-	[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	    local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
-    done
-    trees=($PORTDIR $=PORTDIR_OVERLAY)
+    PORTDIR=$(_portdir)
+    PORTDIR_OVERLAY=$(_portdir -o);
+
+    trees=( $PORTDIR $=PORTDIR_OVERLAY )
     category=( $trees/*-*(/:t) )
     typeset -U category
 
     if [[  $#PREFIX -ge 1  &&  -z $words[(r)(--inject|-i)]  ]] ; then
-	overlay_ebuilds=($=PORTDIR_OVERLAY/*-*/${PREFIX%%-[0-9]#*}*/*.ebuild(:t:r) )
-	portage_ebuilds=($PORTDIR/metadata/cache/*-*/${PREFIX%%-[0-9]#*}*(:t))
-	_wanted packages expl 'package'  compadd  $portage_ebuilds $overlay_ebuilds
+        overlay_ebuilds=($=PORTDIR_OVERLAY/*-*/${PREFIX%%-[0-9]#*}*/*.ebuild(:t:r) )
+        portage_ebuilds=($PORTDIR/metadata/cache/*-*/${PREFIX%%-[0-9]#*}*(:t))
+        _wanted packages expl 'package'  compadd  $portage_ebuilds $overlay_ebuilds
     fi
     pkg=( $trees/${PREFIX%%/*}/*/*.ebuild(:t:r) )
     _wanted cat_packages expl 'category/package' _sep_parts category / pkg
@@ -143,11 +195,11 @@ _gentoo_packages_update_available_versions(){
 #Function to show tbz2 files available
 _gentoo_packages_update_binary() {
     [[ -z $PKGDIR && -r /etc/portage/make.conf ]] &&
-	local PKGDIR="`. /etc/portage/make.conf 2>/dev/null; echo $PKGDIR`"
+        local PKGDIR="`. /etc/portage/make.conf 2>/dev/null; echo $PKGDIR`"
     [[ -z $PKGDIR && -r /etc/make.conf ]] &&
-	local PKGDIR="`. /etc/make.conf 2>/dev/null; echo $PKGDIR`"
+        local PKGDIR="`. /etc/make.conf 2>/dev/null; echo $PKGDIR`"
     [[ -z $PKGDIR && -r /usr/share/portage/config/make.globals ]] &&
-	local PKGDIR="`. /usr/share/portage/config/make.globals 2>/dev/null; echo $PKGDIR`"
+        local PKGDIR="`. /usr/share/portage/config/make.globals 2>/dev/null; echo $PKGDIR`"
 
     # this doesn't take care of ${PORTAGE_BINHOST}. If Gentoo official
     # binary mirror will be available we should rewrite it accordingly.
@@ -155,21 +207,20 @@ _gentoo_packages_update_binary() {
 }
 
 _gentoo_packages () {
-	local command="$argv[$#]" expl cachevar pkgset update_policy
-	zstyle -s ":completion:*:*:$service:*" cache-policy update_policy
-	if [[ -z "$update_policy" ]]; then
-		zstyle ":completion:*:*:$service:*" cache-policy _gentoo_cache_policy
-	fi
-	[[ "$command" == (installed(_versions|)|available(_versions|)|binary|category|(active_|)useflag|available_pkgnames_only) ]] || {
-		_message "unknown command: $command"
-		return
-	}
-	[[ "$pkgset" ==  (installed(_versions|)|available(_versions|)|binary|category|(active_|)useflag|available_pkgnames_only) ]] || {
-		pkgset="$command"
-	}
-	expl=("${(@)argv[1,-2]}")
-	_gentoo_packages_update_$pkgset
-
+    local command="$argv[$#]" expl cachevar pkgset update_policy
+    zstyle -s ":completion:*:*:$service:*" cache-policy update_policy
+    if [[ -z "$update_policy" ]]; then
+        zstyle ":completion:*:*:$service:*" cache-policy _gentoo_cache_policy
+    fi
+    [[ "$command" == (installed(_versions|)|available(_versions|)|binary|category|(active_|)useflag|available_pkgnames_only) ]] || {
+        _message "unknown command: $command"
+        return
+    }
+    [[ "$pkgset" ==  (installed(_versions|)|available(_versions|)|binary|category|(active_|)useflag|available_pkgnames_only) ]] || {
+        pkgset="$command"
+    }
+    expl=("${(@)argv[1,-2]}")
+    _gentoo_packages_update_$pkgset
 }
 
 _gentoo_cache_policy () {

diff --git a/_portage_utils b/_portage_utils
index dc0d918..dbb45d6 100644
--- a/_portage_utils
+++ b/_portage_utils
@@ -2,15 +2,90 @@
 
 # portage-utils-0.53
 
+
+_portdir() {
+    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})
+
+            # strip out duplicates
+            overlaypath=($(printf "%s\n" "${overlaypath[@]}" | sort -u))
+
+            echo "${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
+
+        echo "${PORTDIR}"
+
+        if [[ ${1} == -o ]]; then⋅
+            echo "${PORTDIR_OVERLAY}"
+        fi⋅⋅⋅
+    fi
+}
+
+_parsereposconf() {
+    local f insection line section v value var
+
+    for f in /usr/share/portage/config/repos.conf \
+        /etc/portage/repos.conf \
+        /etc/portage/repos.conf/*.conf; do
+
+        [[ -f ${f} ]] || continue
+        insection=0
+
+        while read -r line; do
+            # skip comments and blank lines
+            [[ -z ${line} || ${line} == '#'* ]] && continue
+
+            if [[ ${insection} == 1 && ${line} == '['*']' ]]; then
+                # End of the section we were interested in so stop
+                secname+=(${line//[(\[|\])]/}) # record name for -l
+                break
+            elif [[ ${line} == '['*']' ]]; then
+                # Entering a new section, check if it's the one we want
+                section=${line//[(\[|\])]/}
+                [[ ${section} == "${1}" ]] && insection=1
+                secname+=(${section}) # record name for -l
+            elif [[ ${insection} == 1 ]]; then
+                # We're in the section we want, grab the values
+                var=${line%%=*}
+                var=${var// /}
+                value=${line#*=}
+                value=${value# }
+                [[ ${var} == ${2} ]] && v=${value}
+            fi
+            continue
+        done < "${f}"
+    done
+
+    if [[ ${1} == -l ]]; then
+        echo "${secname[@]}"
+    else
+        echo "${v}"
+    fi
+}
+
+
 local common_args PORTDIR
-var=PORTDIR
-
-[[ -z ${(P)var} && -r /etc/portage/make.conf ]] &&
-	local $var="`. /etc/portage/make.conf 2>/dev/null; echo ${(P)var}`"
-[[ -z ${(P)var} && -r /etc/make.conf ]] &&
-	local $var="`. /etc/make.conf 2>/dev/null; echo ${(P)var}`"
-[[ -z ${(P)var} && -r /usr/share/portage/config/make.globals ]] &&
-	local $var="`. /usr/share/portage/config/make.globals 2>/dev/null; echo ${(P)var}`"
+
+PORTDIR="$(_portdir)"
 
 common_args=(
 	'--root[Set the ROOT env var]:root directory:_files -/' \


             reply	other threads:[~2014-08-26  4:46 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-26  4:46 Vadim A. Misbakh-Soloviov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-01-17 14:48 [gentoo-commits] proj/zsh-completion:master commit in: / Vadim Misbakh-Soloviov
2015-04-28 12:07 Vadim A. Misbakh-Soloviov
2014-12-20 23:39 Tim Harder
2014-12-18 16:59 Tim Harder
2014-11-23 21:35 Vadim A. Misbakh-Soloviov
2014-11-15  9:03 Tim Harder
2014-11-15  8:40 Tim Harder
2014-08-30 10:19 Vadim A. Misbakh-Soloviov
2014-08-30 10:19 Vadim A. Misbakh-Soloviov
2014-08-26 18:51 Vadim A. Misbakh-Soloviov
2014-08-25 16:13 Vadim A. Misbakh-Soloviov
2014-08-25 12:41 Vadim A. Misbakh-Soloviov
2014-08-25 12:41 Vadim A. Misbakh-Soloviov
2014-08-25 11:26 Vadim A. Misbakh-Soloviov
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-30 11:00 Tim Harder
2014-03-29  8:38 Tim Harder
2014-03-29  2:35 Tim Harder
2014-03-29  1:41 Tim Harder
2014-03-29  1:41 Tim Harder
2014-03-29  1:41 Tim Harder
2014-03-28 19:46 Tim Harder
2014-03-28 18:59 Tim Harder
2014-03-28 18:59 Tim Harder
2014-03-28 18:59 Tim Harder
2014-03-28 18:42 Tim Harder
2014-03-28 18:36 Tim Harder
2014-03-28 18:18 Tim Harder
2014-03-28 18:18 Tim Harder
2014-01-24  1:29 Tim Harder
2014-01-24  1:05 Tim Harder
2014-01-24  1:05 Tim Harder
2014-01-24  1:05 Tim Harder
2013-02-07 20:15 Tim Harder
2013-02-07 20:15 Tim Harder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1409028294.9ccf71ce6ccd3dc3e9c1028da4d9b9247553a0e9.mva@gentoo \
    --to=mva@mva.name \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox