[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 1.90-141-g98f90eb

Igor Murzov e-mail at date.by
Fri Jan 20 01:15:36 UTC 2012


The following commit has been merged in the master branch:
commit 98f90ebdf8b7ccf49e7854640712af1ff4a47871
Author: Igor Murzov <e-mail at date.by>
Date:   Fri Jan 20 04:58:37 2012 +0400

    _filedir: Properly quote paths to avoid unexpected expansion.

diff --git a/bash_completion b/bash_completion
index b9585ac..a080b1c 100644
--- a/bash_completion
+++ b/bash_completion
@@ -562,33 +562,32 @@ _filedir()
     _tilde "$cur" || return 0
 
     local -a toks
-    local quoted tmp
+    local quoted x tmp
 
     _quote_readline_by_ref "$cur" quoted
-    toks=( $(
-        compgen -d -- "$quoted" | {
-            while read -r tmp; do
-                # TODO: I have removed a "[ -n $tmp ] &&" before 'printf ..',
-                #       and everything works again. If this bug suddenly
-                #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),
-                #       remember to check for other similar conditionals (here
-                #       and _filedir_xspec()). --David
-                printf '%s\n' $tmp
-            done
-        }
-    ))
+    x=$( compgen -d -- "$quoted" ) &&
+    while read -r tmp; do
+        toks+=( "$tmp" )
+    done <<< "$x"
 
     if [[ "$1" != -d ]]; then
         # Munge xspec to contain uppercase version too
         # http://thread.gmane.org/gmane.comp.shells.bash.bugs/15294/focus=15306
         xspec=${1:+"!*.@($1|${1^^})"}
-        toks+=( $( compgen -f -X "$xspec" -- $quoted ) )
+        x=$( compgen -f -X "$xspec" -- $quoted ) &&
+        while read -r tmp; do
+            toks+=( "$tmp" )
+        done <<< "$x"
     fi
 
     # If the filter failed to produce anything, try without it if configured to
     [[ -n ${COMP_FILEDIR_FALLBACK:-} && \
         -n "$1" && "$1" != -d && ${#toks[@]} -lt 1 ]] && \
-        toks+=( $( compgen -f -- $quoted ) )
+        x=$( compgen -f -- $quoted ) &&
+        while read -r tmp; do
+            toks+=( "$tmp" )
+        done <<< "$x"
+
 
     if [[ ${#toks[@]} -ne 0 ]]; then
         # 2>/dev/null for direct invocation, e.g. in the _filedir unit test
@@ -1806,7 +1805,6 @@ _filedir_xspec()
     toks=( $(
         compgen -d -- "$(quote_readline "$cur")" | {
         while read -r tmp; do
-            # see long TODO comment in _filedir() --David
             printf '%s\n' $tmp
         done
         }
diff --git a/test/fixtures/slackware/home/abc-4-i686-1.txz b/test/fixtures/_filedir/brackets/[x]
similarity index 100%
copy from test/fixtures/slackware/home/abc-4-i686-1.txz
copy to test/fixtures/_filedir/brackets/[x]
diff --git a/test/fixtures/slackware/home/abc-4-i686-1.txz b/test/fixtures/_filedir/brackets/x
similarity index 100%
copy from test/fixtures/slackware/home/abc-4-i686-1.txz
copy to test/fixtures/_filedir/brackets/x
diff --git a/test/unit/_filedir.exp b/test/unit/_filedir.exp
index 0bba831..b8cc200 100644
--- a/test/unit/_filedir.exp
+++ b/test/unit/_filedir.exp
@@ -226,6 +226,12 @@ foreach name {f f2} {
     sync_after_int
 
 
+    set cmd "$name \\\[x"
+    assert_complete_dir {\[x\]} $cmd "$::srcdir/fixtures/_filedir/brackets"
+
+
+    sync_after_int
+
 }; # foreach
 
 

-- 
bash-completion



More information about the Bash-completion-commits mailing list