[58784] trunk/dports/sysutils/bash-completion

raimue at macports.org raimue at macports.org
Mon Oct 5 01:05:13 PDT 2009


Revision: 58784
          http://trac.macports.org/changeset/58784
Author:   raimue at macports.org
Date:     2009-10-05 01:05:08 -0700 (Mon, 05 Oct 2009)
Log Message:
-----------
sysutils/bash-completion:
Rewritten completion for the port command. It is much faster now by directly
passing glob expressions with the port commands.
Fixes #11441 and #21630

Modified Paths:
--------------
    trunk/dports/sysutils/bash-completion/Portfile
    trunk/dports/sysutils/bash-completion/files/port

Modified: trunk/dports/sysutils/bash-completion/Portfile
===================================================================
--- trunk/dports/sysutils/bash-completion/Portfile	2009-10-05 08:02:06 UTC (rev 58783)
+++ trunk/dports/sysutils/bash-completion/Portfile	2009-10-05 08:05:08 UTC (rev 58784)
@@ -4,7 +4,7 @@
 
 name            bash-completion
 version         1.0
-revision        2
+revision        3
 epoch           1
 categories      sysutils
 platforms       darwin

Modified: trunk/dports/sysutils/bash-completion/files/port
===================================================================
--- trunk/dports/sysutils/bash-completion/files/port	2009-10-05 08:02:06 UTC (rev 58783)
+++ trunk/dports/sysutils/bash-completion/files/port	2009-10-05 08:05:08 UTC (rev 58784)
@@ -6,135 +6,141 @@
 # 
 _port()
 {
-        local cur prev mode count portdir portdiropt i port
-		
-	COMPREPLY=()
-	cur=${COMP_WORDS[COMP_CWORD]}
-	prev=${COMP_WORDS[COMP_CWORD-1]}
+        local cur prev mode count portdir cmdfile i port
 
-	count=0
-	for i in ${COMP_WORDS[@]}; do
-	    [ $count -eq $COMP_CWORD ] && break
-	    # Last parameter was the portdir, now go back to mode selection
-	    if [ "${COMP_WORDS[((count))]}" == "$portdir" -a "$mode" == "portdir" ]; then
-		mode=""
-	    fi
-	    if [ -z "$mode" ]; then
-		case $i in
-		    -D)
-			mode=portdir
-			portdir=${COMP_WORDS[((count+1))]}
-			portdiropt="-D $portdir"
-			;;
-                    activate|archive|build|cat|cd|checksum|clean|compact|configure|\
-                        contents|deactivate|dependents|deps|destroot|dir|distcheck|dmg|\
+        COMPREPLY=()
+        cur=${COMP_WORDS[COMP_CWORD]}
+        prev=${COMP_WORDS[COMP_CWORD-1]}
+
+        count=0
+        for i in ${COMP_WORDS[@]}; do
+            [ $count -eq $COMP_CWORD ] && break
+            # Last parameter was a required parameter, now go back to mode selection
+            if [ "${COMP_WORDS[((count))]}" == "$portdir" -a "$mode" == "portdir" ] \
+                    || [ "${COMP_WORDS[((count))]}" == "$cmdfile" -a "$mode" == "cmdfile" ]; then
+                mode=""
+            fi
+            if [ -z "$mode" ]; then
+                case $i in
+                    -D)
+                        mode=portdir
+                        portdir=${COMP_WORDS[((count+1))]}
+                        ;;
+                    -F)
+                        mode=cmdfile
+                        cmdfile=${COMP_WORDS[((count+1))]}
+                        ;;
+                    activate|archive|build|cat|cd|checksum|clean|configure|contents|\
+                        deactivate|dependents|deps|destroot|dir|distcheck|distfiles|dmg|\
                         dpkg|echo|ed|edit|exit|extract|fetch|file|gohome|help|info|\
                         install|installed|lint|list|livecheck|load|location|mdmg|mirror|\
-                        mpkg|outdated|patch|pkg|platform|provides|quit|rpm|search|selfupdate|\
-                        srpm|submit|sync|test|trace|unarchive|uncompact|uninstall|unload|\
-                        upgrade|url|usage|variants|version|work)
+                        mpkg|notes|outdated|patch|pkg|platform|portpkg|provides|quit|\
+                        rpm|search|select|selfupdate|srpm|submit|sync|test|trace|unarchive|\
+                        uninstall|unload|upgrade|url|usage|variants|version|work)
                         mode=$i
-			;;
-		esac
-	    elif [  -z "$port" ]; then
-	    case $mode in
-		uninstall|upgrade|contents)
-		    if [ $( port installed | awk ' !/The following ports/ {print $1}' \
-			| uniq | grep '^'$i'$') ]; then
-			port=$i
-		    fi
-		    ;;
-		*)
-		    if [ $(port $portdiropt list | awk '{ print $1 }' | grep '^'$i'$') ]; then
-			port=$i
-		    fi
-		    ;;
-	    esac
-	    fi
-	    count=$((++count))
-	done
+                        ;;
+                esac
+            elif [ -z "$port" ]; then
+                case $mode in
+                    contents|uninstall|upgrade)
+                        if port -q installed "$i" | awk '{print $1}' | grep -q '^'$i'$'; then
+                            port=$i
+                        fi
+                        ;;
+                    *)
+                        if port -q search --exact "$i" | grep -q '^'$i'$'; then
+                            port=$i
+                        fi
+                        ;;
+                esac
+            fi
+            count=$((++count))
+        done
 
-	if [ -n "$port" ]; then
+        if [ -n "$port" ]; then
             # complete variants
-	    case $mode in
-		contents|uninstall)
-		    # installed variants
-		    COMPREPLY=( $( port installed \
-			| awk '/'$port'/ { print $2 }' | tr '\r' ' ' 2> /dev/null ) )
-		    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
-		    return 0
-		    ;;
-		activate)
-		    # inactive variants
-		    COMPREPLY=( $( port installed | grep -v '(active)' \
-			| awk '/'$port'/ { print $2 }' | tr '\r' ' ' 2> /dev/null ) )
-		    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
-		    return 0
-		    ;;
-		deactivate)
-		    # active variants
-		    COMPREPLY=( $( port installed | grep '(active)' \
-			| awk '/'$port'/ { print $2 }' | tr '\r' ' ' 2> /dev/null ) )
-		    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
-		    return 0
-		    ;;
-		*)
-		    # all variants
-		    COMPREPLY=( $(port $portdiropt variants $port | tr '\r' ' ' | grep -v "has no variants") )
-		    COMPREPLY=( $( compgen -P'+' -W '${COMPREPLY[@]}' -- $cur ) )
-		    return 0
-		    ;;
-	    esac
+            case $mode in
+                contents|uninstall)
+                    # installed variants
+                    COMPREPLY=( $( port -q installed "$port" \
+                        | awk '{print $2}' | tr '\r' ' ' 2>/dev/null ) )
+                    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
+                    return 0
+                    ;;
+                activate)
+                    # inactive variants
+                    COMPREPLY=( $( port -q installed "$port" | grep -v '(active)' \
+                        | awk '{print $2}' | tr '\r' ' ' 2>/dev/null ) )
+                    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
+                    return 0
+                    ;;
+                deactivate)
+                    # active variants
+                    COMPREPLY=( $( port -q installed "$port" | grep '(active)' \
+                        | awk '{print $2}' | tr '\r' ' ' 2>/dev/null ) )
+                    COMPREPLY=( $( compgen -W '${COMPREPLY[@]}' -- $cur ) )
+                    return 0
+                    ;;
+                *)
+                    # all variants
+                    COMPREPLY=( $( port -q info --line --variants "$port" | tr '\r,' '  ' ) )
+                    COMPREPLY=( $( compgen -P'+' -W '${COMPREPLY[@]}' -- $cur ) )
+                    return 0
+                    ;;
+            esac
 
-	fi
+        fi
 
-	if [ -n "$mode" ]; then
-	    # complete port names
-	    case $mode in
-                uninstall|upgrade|contents)
-		    # installed ports
-		    COMPREPLY=( $( port installed \
-			| sed -ne 's|^  \('$cur'[^ ]*\).*$|\1|p' | uniq ) )
-		    return 0
-		    ;;
-		activate)
-		    # inactive ports
-		    COMPREPLY=( $( port installed | grep -v '(active)' \
-			| sed -ne 's|^  \('$cur'[^ ]*\).*$|\1|p' | uniq ) )
-		    return 0
-		    ;;
-		deactivate)
-		    # active ports
-		    COMPREPLY=( $( port installed | grep '(active)' \
-			| sed -ne 's|^  \('$cur'[^ ]*\).*$|\1|p' | uniq ) )
-		    return 0
-		    ;;
-		provides|portdir)
-		    _filedir
-		    return 0
-		    ;;
-		installed|outdated|list|sync|selfupdate)
-		    # no port
-		    return 0
-		    ;;
-		*)
-    		    # all ports
-		    COMPREPLY=( $( port $portdiropt list \
-			| awk '/^'$cur'/ { print $1 }' | sort 2> /dev/null ) )
-		    return 0
-		    ;;
-		esac
-	fi
+        if [ -n "$mode" ]; then
+            # complete port names
+            case $mode in
+                contents|installed|outdated|uninstall|upgrade)
+                    # installed ports
+                    COMPREPLY=( $( port -q installed "$cur*" \
+                        | awk '{print $1}' | uniq ) )
+                    return 0
+                    ;;
+                activate)
+                    # inactive ports
+                    COMPREPLY=( $( port -q installed "$cur*" | grep -v '(active)' \
+                        | awk '{print $1}' | uniq ) )
+                    return 0
+                    ;;
+                deactivate)
+                    # active ports
+                    COMPREPLY=( $( port -q installed "$cur*" | grep '(active)' \
+                        | awk '{print $1}' | uniq ) )
+                    return 0
+                    ;;
+                provides|cmdfile)
+                    _filedir
+                    return 0
+                    ;;
+                portdir)
+                    _filedir -d
+                    return 0
+                    ;;
+                selfupdate|search|sync)
+                    # no port
+                    return 0
+                    ;;
+                *)
+                    # all ports
+                    COMPREPLY=( $( port -q search --glob "$cur*" 2>/dev/null | uniq ) )
+                    return 0
+                    ;;
+                esac
+        fi
 
-	COMPREPLY=( $( compgen -W '-b -c -d -f -i -k -n -o -p -q -R -s -t -u -v -x \
-                                activate archive build cat cd checksum clean compact configure \
-                                contents deactivate dependents deps destroot dir distcheck dmg \
+        COMPREPLY=( $( compgen -W '-b -c -d -f -k -n -o -p -q -R -s -t -u -v -y \
+                                activate archive build cat cd checksum clean configure contents \
+                                deactivate dependents deps destroot dir distcheck distfiles dmg \
                                 dpkg echo ed edit exit extract fetch file gohome help info \
                                 install installed lint list livecheck load location mdmg mirror \
-                                mpkg outdated patch pkg platform provides quit rpm search selfupdate \
-                                srpm submit sync test trace unarchive uncompact uninstall unload \
-                                upgrade url usage variants version work' -- $cur ) )
-	return 0
+                                mpkg notes outdated patch pkg platform portpkg provides quit \
+                                rpm search select selfupdate srpm submit sync test trace unarchive \
+                                uninstall unload upgrade url usage variants version work' -- $cur ) )
+        return 0
 }
 complete -F _port $filenames port
 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20091005/0b6063e9/attachment-0001.html>


More information about the macports-changes mailing list