Package: bash
Version: 4.1-3
Severity: important
Bash 4.0 changed the rules for completion word splitting so that
they are incompatible with 3.x. I think some Breaks: will be needed
to ensure smooth upgrades.
The closest to a hint NEWS provides is:
i. The programmable completion code now uses the same set of characters as
readline when breaking the command line into a list of words.
but the problem is something else --- with exactly the same
COMP_WORDBREAKS, earlier and later versions show different behavior.
Example:
. /etc/bash_completion.d/git
git log --pretty=<tab><tab>
lists medium, full, etc with bash 3.0 but falls back to completing on
files in the cwd in bash 4.0.
The bash_completion project works around this by introducing a
_get_cword function abstracting the differences away:
| commit f733e71e1f8d63c072a402346d8162f9c6b63ae2
| Date: Sun Sep 20 14:11:26 2009 +0200
|
| Split _get_cword into bash-3/4 versions
[...]
| Bash-4 splits COMP_WORDS using characters from COMP_WORDBREAKS, but has
| a bug where quoted words are also splitted, see:
| http://www.mail-archive.com/[email protected]/msg06095.html
|
| __get_cword3 is used for bash-2/3 and __get_cword4 is used for bash-4.
and has refined this over time to a _get_comp_words_by_ref function
using only functionality that works correctly with both bash versions.
The upshot:
1. bash-completion versions before 1.1 are broken by bash 4.
2. All known versions of git's completion script are broken by bash 4.
There is a patch cooking on the git mailing list to get it working
again.
3. Other completion scripts might need changes, too. There are about
74 packages to check :(, based on
zgrep bash_completion.d Contents-i386.gz |
sed -e 's/.* *//' |
cut -d'/' -f2 |
uniq |
wc -l
Any ideas for reducing the work of finding versions to Breaks:?
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]