[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 1.90-48-g8278412

Igor Murzov e-mail at date.by
Thu Nov 17 00:10:09 UTC 2011


The following commit has been merged in the master branch:
commit 82784121d863bede6b40433a52cceaabb79d7df6
Author: Igor Murzov <e-mail at date.by>
Date:   Thu Nov 17 04:02:35 2011 +0300

    upgradepkg: Support oldpackage%newpackage notation.

diff --git a/completions/upgradepkg b/completions/upgradepkg
index 06dbe57..59a27ca 100644
--- a/completions/upgradepkg
+++ b/completions/upgradepkg
@@ -11,6 +11,18 @@ _upgradepkg()
         return 0
     fi
 
+    if [[ "$cur" == ?*%* ]]; then
+        prev="${cur%%?(\\)%*}"
+        cur="${cur#*%}"
+        local nofiles IFS=$'\n'
+        compopt -o filenames
+        COMPREPLY=( $( compgen -P "$prev%" -f -X "!*.@(t[bgxl]z)" -- "$cur" ) )
+        [[ $COMPREPLY ]] || nofiles=1
+        COMPREPLY+=( $( compgen -P "$prev%" -S '/' -d  -- "$cur" ) )
+        [[ $nofiles ]] && compopt -o nospace
+        return 0
+    fi
+
     _filedir "t[bglx]z"
 } && complete -F _upgradepkg upgradepkg
 
diff --git a/test/lib/completions/upgradepkg.exp b/test/lib/completions/upgradepkg.exp
index 860dde9..4783aec 100644
--- a/test/lib/completions/upgradepkg.exp
+++ b/test/lib/completions/upgradepkg.exp
@@ -36,4 +36,16 @@ assert_complete_dir $files "upgradepkg " $dir $test
 sync_after_int
 
 
+set test "should complete *.t\[gbxl\]z files and dirs after % sign"
+set oldpkg "xx-2.0-i486-2"
+set dir $::srcdir/fixtures/slackware/home
+set files [split [exec bash -c "cd $dir && find . -mindepth 1 -maxdepth 1 \
+           \\( -type d -printf '$oldpkg%%%P/\\n' \\) -o \
+           \\( -type f -name '*.t\[bglx\]z' -printf '$oldpkg%%%P\\n' \\)"] "\n"]
+assert_complete_dir $files "upgradepkg $oldpkg%" $dir $test
+
+
+sync_after_int
+
+
 teardown

-- 
bash-completion



More information about the Bash-completion-commits mailing list