Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package bash-completion for openSUSE:Factory
checked in at 2026-09-30 16:22:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bash-completion (Old)
and /work/SRC/openSUSE:Factory/.bash-completion.new.1465845 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bash-completion"
Wed Sep 30 16:22:46 2026 rev:65 rq:1381669 version:2.18.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/bash-completion/bash-completion.changes
2026-09-15 17:09:38.380399993 +0200
+++
/work/SRC/openSUSE:Factory/.bash-completion.new.1465845/bash-completion.changes
2026-09-30 16:23:57.192606752 +0200
@@ -1,0 +2,193 @@
+Wed Sep 30 11:58:58 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Update to 2.18.0:
+ This release comes with notable changes to the directories used
+ for looking up and sourcing completion recipes and helpers,
+ allowing for more flexibility and customization and fewer
+ conflicts between things shipping with bash-completion and third
+ party/upstream/origin packages.
+
+ Files that come with bash-completion itself are located in
+ directories reserved for that use, their names ending with -core
+ and -fallback. Packages should continue install their files in
+ the same completions and helpers dirs like before; these
+ directories precede the bash-completion "core" ones in lookup order.
+
+ A new concept of startup dirs has been introduced. Files from
+ these directories are sourced eagerly on bash-completion startup.
+ This replaces and allows for more flexibility than using the
+ deprecated /etc/bash_completion.d directory for this purpose.
+
+ * Features
+ _comp__init: source system startup files earlier (b09700d)
+ _comp_compgen_filedir: automatically add -f on _comp_compgen -C or -P
(#1552) (6d5fca6)
+ _comp_compgen_filedir: support "filedir -X" (ce28419)
+ _comp_compgen_sysv_services: factorize SysV service generation (c4c8c4b)
+ aclocal,automake: support versioned 1.17 executables (94bbb3a)
+ aclocal,automake: support versioned 1.18 executables (9287b4b)
+ apt-*: update known options up to apt 3.2.0 (c421d50)
+ apt-cache: update known options up to apt 3.2.0 (0ab85c5)
+ apt-get: update known options up to apt 3.2.0 (6a18e0c)
+ apt-mark: update known options up to apt 3.2.0 (644a026)
+ codex: 3rd party fallback completion loader (0f425bd)
+ copilot: 3rd party fallback completion loader (744602a)
+ curlie: alias to curl (dd8f6e0)
+ curl: more option argument (non-)completions (5099cef)
+ dive: add 3rd party fallback completion loader (f817cca)
+ doas: add new completion (f047b70)
+ doas: generate completions as if we're root (a705713)
+ encore: 3rd party fallback completion loader (1e54d02)
+ etcdctl,etcdutl: 3rd party fallback completion loaders (39f8ddf)
+ helium: alias to chromium-browser (8600af0)
+ inotifywait2: generate exclude filenames prefixed by @ (c1e2f1b)
+ inotifywait: generate exclude filenames prefixed by @ (0a2c165)
+ ip: Check /usr/share config path (45530b0)
+ jq: --rawfile arg (non-)completion (4f454d8)
+ jreleaser: add 3rd party fallback completion loader (e1c2815)
+ mago: add 3rd party fallback completion loader (97c4c49)
+ ogg123: associate opus extension (7d3ea33)
+ opencode: add 3rd party fallback completion loader (dbcea18)
+ pnpm: add 3rd party fallback completion loader (44804ae)
+ pydoc: support versioned 3.13..15 executables (bd60b26)
+ python,pyvenv: support versioned 3.14 and .15 executables (72a2e47)
+ release-plz: add 3rd party fallback completion loader (c3c4066)
+ rumdl: add 3rd party fallback completion loader (5ef9790)
+ skupper: add 3rd-party fallback completion loader (4237c9c)
+ ssh-keygen: -M arg completion (b13bf99)
+ ssh-keygen: -Z argument completion (c763d52)
+ ssh-keygen: update -t arg completions (4269a90)
+ ssh-keygen: update -Y arg completions (a73bcaf)
+ ssh: do not complete -P arg (tag) (7d26a86)
+ ssh: include proxy in -O arg completions (fc1df1f)
+ ssh: more option arg (non-)completions (33f789c)
+ sudo-rs,sudo.ws: alias to sudo (084cc68)
+ sudo: more option argument (non-)completions (216135e)
+ support the "startup{,-core}" directory (d6169af)
+ syncthing: add 3rd party fallback completion loader (bc5dfff)
+ tmux: complete src/target session arguments (18b6da4)
+ tmux: complete target-session arguments (ced59c3)
+ ty: add 3rd party fallback completion loader (57a2b31)
+ waydroid: add 3rd party fallback completion loader (acc800f)
+ xrdb: misc improvements (#1669) (461f90c)
+ zed: 3rd party fallback completion loader (83532fa)
+ * Bug Fixes
+ _comp_compgen_services: fix no completions without sysvdir (a2e2659)
+ _comp_compgen_services: skip service status marks (1ac9169)
+ _comp_compgen_sysv_services: do not generate names in subdirs (5557fbe)
+ _comp_compgen: clear the variable when no completions are generated
(c07bd66)
+ _comp_complete_service: fix init-script-action parsing (#1499) (91e075a)
+ _comp_complete_user_at_host: care about $cur starting with "-" (277da58)
+ _comp_load: deprecate unsuffixed "completions/<cmd>" w/o ".bash" (06910da)
+ _comp_load: drop support for "_<cmd>" (f245356)
+ _known_hosts: fix spacing of an error message (0463570)
+ _known_hosts: work around custom IFS (8171929)
+ _variable_assignments: exclude invalid timezones for "TZ" (d405a1d)
+ add compatibility wrapper for tail (f6fee8a)
+ alternatives: work around localvar_inherit (360192a)
+ apt-get,ebtables,iptables,mplayer,service: avoid | and | in sed (ed64c30)
+ apt-get,gpg{,2},ipmitool,screen: avoid \t, \r, \w in POSIX sed (da40e7a)
+ ccache: fix a wrong AWK condition (c300c0f)
+ cd: Complete from . on empty CDPATH entry (#1527) (6f1eba6)
+ cd: fix cdable_vars overwritten by another generator (24bd420)
+ cd: work around bash-4.2 nounset (45d1c93)
+ compatdir: shadow compat files of the same name (ff1bf72)
+ completion load precedence more (0a15408)
+ export: complete options not at $1 (832822d)
+ export: suffix "=" only when unique and already complete (76f980c)
+ export: work around custom IFS (2617d26)
+ fbgs,fbi: add mandatory semicolons before "}" in POSIX sed (288e77e)
+ fix non-POSIX sed expressions (e999091)
+ gnokii: use double \ in [...] for POSIX.1-2024 recommendation (ab0483a)
+ inotifywait: add -t in noargopts (0295129)
+ interdiff: move to fallback for the upstream completion (11987a4)
+ invoke-rc.d: avoid using non-POSIX | in sed (db928dd)
+ invoke-rc.d: fix a bug of generating existing words (dfb903b)
+ ipstables,ebtables: fix filtering of chain names (213a1d2)
+ iscsiadm: separate merged options (--logoutall--show → --logoutall --show)
(#1612) (0a7ca44)
+ jq: --indent arg range (d02e405)
+ jq: missing hyphen in --monochrome-output (ef69198)
+ lilo,mutt: remove unnecessary escaping " in sed regexp (b8f6ef2)
+ lintian: fix variable leaks (e0e916a)
+ lintian: use compgen -X instead of sed with non-POSIX <> (b6f34ef)
+ load from more new style completion dirs (10377fc)
+ miscellaneous fixes after separation of directories (c4a8fd0)
+ nsupdate: fix typo "_comp_com{tp => pg}en" (3b1ade2)
+ pkg-get: avoid double expansions (fb5e32c)
+ pkg-get: do not check the command name as arguments (a86175d)
+ pkg-get: localize variable "file" properly (c37bed1)
+ pkg-get: work around localvar_inherit (7881795)
+ pkg-get: work around nounset (cd5c28d)
+ povray: work around bash-4.3 nounset (8f85887)
+ service,{invoke,update}-rc.d: fix regressions and refactor (1ee269f)
+ shellcheck: avoid non-POSIX > in sed regular expressions (c0b3620)
+ tox: move completion to fallback directory (be397c2)
+ tshark: rename "cmp_cmd_tshark_{ => mut_}{prefs,protocols}" (dfacd2b)
+ update-rc.d: fix the usage of the X optarg (0f47959)
+ xrandr: remove wrong \ from character range (cc75da2)
+ * Performance Improvements
+ _comp_compgen_filedir_xspec: avoid double negation !(!(...)) (b24305d)
+ filedir_xspec: avoid double negation !(!(...)) in extglob (c53259a)
+ nmcli: reduce uses of the "tail" command (e3760c2)
+ povray: use glob matching instead of grep (25f3bb5)
+- Port patches
+ * LVM-completion-bsc946875.patch
+ * bash-completion-2.4.patch
+ * bash-completion-2.7-unRAR-remove.patch
+ * boo1190929-9af4afd0.patch
+ * boo1221414-scp.patch
+ * bsc1199724-modules.patch
+ * dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
+ * ls-completion-boo889319.patch
+ * qdbus-qt5.patch
+ * rm-completion-smart-boo958462.patch
+
+
+-------------------------------------------------------------------
+Wed Sep 30 08:23:25 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Change timings in test boo905348
+
+-------------------------------------------------------------------
+Tue Sep 29 11:56:20 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Merge the patches
+ * FOO-dir-completion-boo905348.patch
+ * backtick-completion-boo940835.patch
+ * backticks-bsc963140.patch
+ * respect-variables-boo940837.patch
+ to new patch dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
+
+-------------------------------------------------------------------
+Tue Sep 29 09:55:13 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add a test case to test_scp.py for patch boo1221414-scp.patch
+ also mock scp and ssh if not exists as commands
+
+-------------------------------------------------------------------
+Tue Sep 29 08:53:56 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Extend test case in FOO-dir-completion-boo905348.patch
+ for the patches backtick-completion-boo940835.patch,
+ backticks-bsc963140.patch, and respect-variables-boo940837.patch
+ Sidemark, before submitting this to upstream, merge the
+ patches to get one commit
+
+-------------------------------------------------------------------
+Tue Sep 29 06:54:06 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add test case for patch FOO-dir-completion-boo905348.patch
+
+-------------------------------------------------------------------
+Mon Sep 28 14:00:53 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add test case for patch bash-completion-2.4.patch
+
+-------------------------------------------------------------------
+Mon Sep 28 08:29:23 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- First steps to add test cases for our patches to be able
+ to submit them upstream ... first patch is ls-completion-boo889319.patch
+- Enable Tests in %check section but disable tests which always
+ fails duwe e.g. missing network
+
+-------------------------------------------------------------------
Old:
----
FOO-dir-completion-boo905348.patch
backtick-completion-boo940835.patch
backticks-bsc963140.patch
bash-completion-2.17.0.tar.xz
respect-variables-boo940837.patch
New:
----
bash-completion-2.18.0.tar.xz
dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
----------(Old B)----------
Old:- Merge the patches
* FOO-dir-completion-boo905348.patch
* backtick-completion-boo940835.patch
Old: * FOO-dir-completion-boo905348.patch
* backtick-completion-boo940835.patch
* backticks-bsc963140.patch
Old: * backtick-completion-boo940835.patch
* backticks-bsc963140.patch
* respect-variables-boo940837.patch
Old: * backticks-bsc963140.patch
* respect-variables-boo940837.patch
to new patch dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
----------(Old E)----------
----------(New B)----------
New: * bsc1199724-modules.patch
* dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
* ls-completion-boo889319.patch
----------(New E)----------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ bash-completion.spec ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.114645144 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.117645269 +0200
@@ -17,6 +17,7 @@
%global flavor @BUILD_FLAVOR@%{nil}
+%bcond_without debug
%if "%{flavor}" == "doc"
%define build_core 0
@@ -26,10 +27,11 @@
%define build_core 1
%define build_doc 0
%endif
+%bcond_with checks
%global _name bash-completion
Name: %{_name}%{?nsuffix}
-Version: 2.17.0
+Version: 2.18.0
Release: 0
%if %{build_core}
Summary: Programmable Completion for Bash
@@ -45,21 +47,18 @@
# PATCH-FIX-UPSTREAM bnc#717151 -- Terminal tab autocompletion error
Patch0: %{_name}-2.4.patch
# PATCH-FIX-SUSE boo#905348 -- tab completion with shell variable changes
command line with backslash
-Patch3: FOO-dir-completion-boo905348.patch
+# PATCH-FIX-SUSE boo#940835
+# PATCH-FIX-SUSE boo#963140
+# PATCH-FIX-SUSE boo#940837, bsc#959299
+Patch3: dollar-completion-boo905348-boo940835-boo963140-boo940837.patch
# PATCH-FIX-SUSE
Patch4: qdbus-qt5.patch
# PATCH-FIX-SUSE boo#889319
Patch5: ls-completion-boo889319.patch
-# PATCH-FIX-SUSE boo#940835
-Patch6: backtick-completion-boo940835.patch
# PATCH-FIX-SUSE bsc#946875
Patch7: LVM-completion-bsc946875.patch
-# PATCH-FIX-SUSE boo#940837, bsc#959299
-Patch8: respect-variables-boo940837.patch
# PATCH-FIX-SUSE boo#958462
Patch9: rm-completion-smart-boo958462.patch
-# PATCH-FIX-SUSE boo#963140
-Patch10: backticks-bsc963140.patch
# PATCH-FIX-SUSE boo#1090515
Patch11: bash-completion-2.7-unRAR-remove.patch
# PATCH-FIX-SUSE boo#1190929
@@ -74,9 +73,19 @@
%if %{build_doc}
BuildRequires: cmark
BuildRequires: libxslt-tools
+%else
+%if %{with checks}
+BuildRequires: procps
+BuildRequires: psmisc
+BuildRequires: python3-base
+BuildRequires: python3-pexpect
+BuildRequires: python3-pytest
+%endif
%endif
%if %{build_core}
-Requires: bash >= 5.1.16
+BuildRequires: bash
+BuildRequires: bash-sh
+Requires: bash
%endif
%description
@@ -97,7 +106,17 @@
%endif
%prep
+%if %{without debug}
%autosetup -p1 -n %{_name}-%{version}
+%else
+%setup -q -n %{_name}-%{version}
+typeset -i i=0
+for p_file in %{patches}; do
+ : $((i++))
+ echo "Apply patch $p_file with suffix .p$i ..."
+ %{__patch} -p1 -b -z .p${i} --fuzz=%{_default_patch_fuzz}
%{_default_patch_flags} < "$p_file"
+done
+%endif
%build
autoreconf -fiv
@@ -149,6 +168,24 @@
install -m 0644 README.md %{buildroot}%{_defaultdocdir}/%{_name}/README
%endif
+%if ! %{build_doc}
+%if %{with checks}
+%check
+make check
+export NETWORK=none
+export PYTEST_ADDOPTS="-v -k 'not test_rpm and not test_remote_path_with and
not test_remote_path_ending and not test_rsync and not test_unit_compgen' \
+ --deselect=t/test_curl.py::TestCurl::test_interface_ipv6 \
+ --deselect=t/test_ifstat.py::TestIfstat::test_2 \
+ --deselect=t/test_iperf.py::TestIperf::test_2 \
+ --deselect=t/test_iperf3.py::TestIperf3::test_2 \
+ --deselect=t/test_nethogs.py::TestNethogs::test_1 \
+ --deselect=t/test_nload.py::TestNload::test_basic \
+ --deselect=t/test_service.py::TestService::test_1 \
+ --deselect=t/test_wget.py::TestWget::test_3"
+make installcheck DESTDIR=%{buildroot}
+%endif
+%endif
+
%files
%if "%{flavor}" == "doc"
%dir %{_defaultdocdir}/%{_name}
@@ -157,8 +194,6 @@
%{_defaultdocdir}/%{_name}/html/
%else
%license COPYING
-%dir %{_sysconfdir}/bash_completion.d/
-%{_sysconfdir}/bash_completion.d/000_bash_completion_compat.bash
%{_datadir}/bash-completion
%config %{_sysconfdir}/profile.d/bash_completion.sh
++++++ LVM-completion-bsc946875.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.143646352 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.145646435 +0200
@@ -25,11 +25,11 @@
Index: bash-completion-2.11/completions/lvm
===================================================================
---
- bash-completion-2.12.0/completions/lvm | 26 ++++++++++++++++++++------
+ bash-completion-2.18.0/completions-core/lvm.bash | 26
+++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
---- bash-completion-2.12.0/completions/lvm
-+++ bash-completion-2.12.0/completions/lvm 2024-02-23 08:05:52.542682924
+0000
+--- bash-completion-2.18.0/completions-core/lvm.bash
++++ bash-completion-2.18.0/completions-core/lvm.bash 2026-09-30
11:08:17.763334263 +0000
@@ -5,27 +5,41 @@ _comp_cmd_lvm__filedir()
_comp_compgen -c "${cur:-/dev/}" filedir
}
@@ -75,8 +75,8 @@
+ _comp_compgen_split -- "$(lvscan $verbose 2>/dev/null |
command sed -n -e "s|^.*'\(.*\)'.*$|\1|p")"
if [[ $cur == /dev/mapper/* ]]; then
- _comp_compgen -a filedir
-@@ -403,7 +417,7 @@ _comp_cmd_vgreduce()
+ _comp_compgen -a filedir -X '*/control'
+@@ -399,7 +413,7 @@ _comp_cmd_vgreduce()
if ((REPLY == 0)); then
_comp_cmd_lvm__volumegroups
else
@@ -85,7 +85,7 @@
fi
fi
} &&
-@@ -735,7 +749,7 @@ _comp_cmd_lvcreate()
+@@ -731,7 +745,7 @@ _comp_cmd_lvcreate()
if ((REPLY == 0)); then
_comp_cmd_lvm__volumegroups
else
++++++ bash-completion-2.17.0.tar.xz -> bash-completion-2.18.0.tar.xz ++++++
++++ 87604 lines of diff (skipped)
++++++ bash-completion-2.4.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.689669088 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.694669296 +0200
@@ -1,29 +1,51 @@
+For bug boo#717151
+
---
- bash-completion-2.12.0/bash_completion | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
+ bash-completion-2.18.0/bash_completion | 9 +++++----
+ bash-completion-2.18.0/test/t/test_core.py | 19 +++++++++++++++++++
+ 2 files changed, 24 insertions(+), 4 deletions(-)
-Index: bash-completion-2.17.0/bash_completion
-===================================================================
---- bash-completion-2.17.0.orig/bash_completion
-+++ bash-completion-2.17.0/bash_completion
-@@ -3218,14 +3218,15 @@ _comp_complete_longopt()
+--- bash-completion-2.18.0/bash_completion
++++ bash-completion-2.18.0/bash_completion 2026-09-30 10:04:45.471651110
+0000
+@@ -3254,13 +3254,14 @@ _comp_complete_longopt()
fi
}
# makeinfo and texi2dvi are defined elsewhere.
-complete -F _comp_complete_longopt \
+complete -F _comp_complete_longopt -o filenames \
- a2ps awk base{32,64,nc} bash bc bison cat chroot colordiff comm cp \
- csplit cut date df diff dir du enscript expand fmt fold gperf \
- grep grub head irb ld ldd less ln ls m4 mkdir mkfifo mknod \
-- mv netstat nl nm numfmt objcopy objdump od paste pr ptx readelf \
-- readlink realpath rm rmdir sed seq shar shred \
-+ mv nl nm numfmt objcopy objdump od paste pr ptx readelf \
-+ readlink realpath rm rmdir sed shar shred \
- shuf sort split stat strip sum sync tac tail tee \
-- texindex touch tr uname unexpand uniq units vdir wc who
-+ texindex touch tr unexpand uniq vdir wc who
+ a2ps awk base{32,64,nc} bash bc bison cat chroot colordiff comm cp csplit
\
+ cut date df diff dir du enscript expand fmt fold gperf grep grub head irb
\
+- ld ldd less ln ls m4 mkdir mkfifo mknod mv netstat nl nm numfmt objcopy \
+- objdump od paste pr ptx readelf readlink realpath rm rmdir sed seq shar \
++ ld ldd less ln ls m4 mkdir mkfifo mknod mv nl nm numfmt objcopy \
++ objdump od paste pr ptx readelf readlink realpath rm rmdir sed shar \
+ shred shuf sort split stat strip sum sync tac tail tee texindex touch tr \
+- uname unexpand uniq units vdir wc who
++ unexpand uniq vdir wc who
+complete -F _comp_complete_longopt -o default env netstat seq uname units
# @since 2.12
declare -Ag _comp_xspecs
+--- bash-completion-2.18.0/test/t/test_core.py
++++ bash-completion-2.18.0/test/t/test_core.py 2026-09-30 09:56:04.988991516
+0000
+@@ -0,0 +1,19 @@
++import pytest
++from conftest import assert_bash_exec
++
[email protected](cmd=None, temp_cwd=True)
++class TestBoo717151:
++ COMMANDS = ["cat", "cp", "mkdir", "mv", "rm", "ls"]
++
++ @pytest.mark.parametrize("cmd", COMMANDS)
++ def test_directory_completion_no_extra_space_boo717151(self, bash, cmd):
++ """Test directory completion appends slash instead of space
(boo#717151)."""
++ from conftest import PS1
++
++ assert_bash_exec(bash, "mkdir -p test_dir_boo717151")
++
++ bash.send(f"{cmd} test_dir_boo\t")
++ bash.expect(r"test_dir_boo717151/")
++
++ bash.sendintr()
++ bash.expect_exact(PS1)
++++++ bash-completion-2.7-unRAR-remove.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.709669921 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.714670129 +0200
@@ -6,9 +6,9 @@
Index: bash-completion-2.17.0/completions/7z
===================================================================
---- bash-completion-2.17.0.orig/completions/7z
-+++ bash-completion-2.17.0/completions/7z
-@@ -62,7 +62,7 @@ _comp_cmd_7z()
+--- bash-completion-2.17.0/completions-core/7z.bash
++++ bash-completion-2.17.0/completions-core/7z.bash
+@@ -59,7 +59,7 @@ _comp_cmd_7z()
else
_comp_compgen -P "-t" -- -W '7z apm arj bzip2 cab chm cpio
cramfs deb dmg elf fat flv gzip hfs iso lzh lzma lzma86
@@ -17,7 +17,7 @@
swfc tar udf vhd wim xar xz z zip'
fi
return
-@@ -94,7 +94,7 @@ _comp_cmd_7z()
+@@ -91,7 +91,7 @@ _comp_cmd_7z()
# (assumption: extensions are all lowercase)
[[ $mode == w ]] &&
_comp_compgen -a filedir
'@(7z|bz2|swf|?(g)tar|?(t)[bglx]z|tb?(z)2|wim)' ||
++++++ boo1190929-9af4afd0.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.756671878 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.762672128 +0200
@@ -10,8 +10,8 @@
Index: bash-completion-2.17.0/completions/_insmod
===================================================================
---- bash-completion-2.17.0.orig/completions/_insmod
-+++ bash-completion-2.17.0/completions/_insmod
+--- bash-completion-2.17.0/completions-fallback/insmod.bash
++++ bash-completion-2.17.0/completions-fallback/insmod.bash
@@ -10,7 +10,7 @@ _comp_cmd_insmod()
# do filename completion for first argument
@@ -23,8 +23,8 @@
-p "${words[1]}" 2>/dev/null | cut -d: -f1)"
Index: bash-completion-2.17.0/completions/_modinfo
===================================================================
---- bash-completion-2.17.0.orig/completions/_modinfo
-+++ bash-completion-2.17.0/completions/_modinfo
+--- bash-completion-2.17.0/completions-fallback/modinfo.bash
++++ bash-completion-2.17.0/completions-fallback/modinfo.bash
@@ -46,7 +46,7 @@ _comp_cmd_modinfo()
# do filename completion if we're giving a path to a module
@@ -36,8 +36,8 @@
fi
Index: bash-completion-2.17.0/completions/_modprobe
===================================================================
---- bash-completion-2.17.0.orig/completions/_modprobe
-+++ bash-completion-2.17.0/completions/_modprobe
+--- bash-completion-2.17.0/completions-fallback/modprobe.bash
++++ bash-completion-2.17.0/completions-fallback/modprobe.bash
@@ -86,7 +86,7 @@ _comp_cmd_modprobe()
insert)
# do filename completion if we're giving a path to a module
++++++ boo1221414-scp.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.787673169 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.793673419 +0200
@@ -1,14 +1,15 @@
Do not replace COMPREPLY with _comp_compgen_split()
---
- completions/ssh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ completions/ssh | 2 +-
+ test/t/test_scp.py | 37 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 38 insertions(+), 1 deletion(-)
Index: bash-completion-2.17.0/completions/ssh
===================================================================
---- bash-completion-2.17.0.orig/completions/ssh
-+++ bash-completion-2.17.0/completions/ssh
-@@ -584,7 +584,7 @@ _comp_xfunc_scp_compgen_remote_files()
+--- bash-completion-2.17.0/completions-core/ssh.bash
++++ bash-completion-2.17.0/completions-core/ssh.bash
+@@ -582,7 +582,7 @@ _comp_xfunc_scp_compgen_remote_files()
command ls -aF1dL "$_path*" 2>/dev/null |
_comp_cmd_scp__escape_path ${_dirs_only:+'-d'} -- \
"$_escape_replacement")
@@ -17,4 +18,54 @@
}
# @deprecated 2.12 use `_comp_compgen -ax ssh remote_files` instead
+--- bash-completion-2.17.0/test/t/test_scp.py
++++ bash-completion-2.17.0/test/t/test_scp.py 2026-09-29 09:52:47.209399766
+0000
+@@ -18,6 +18,23 @@ LIVE_HOST = os.environ.get(
+
+
+ class TestScp:
++ @pytest.fixture(autouse=True)
++ def mock_missing_commands(self, bash):
++ assert_bash_exec(
++ bash,
++ "type scp >/dev/null 2>&1 || scp() { :; }; "
++ "type ssh >/dev/null 2>&1 || ssh() { :; }"
++ )
++
++ yield
++
++ assert_bash_exec(
++ bash,
++ "declare -f scp >/dev/null 2>&1 && unset -f scp; "
++ "declare -f ssh >/dev/null 2>&1 && unset -f ssh; "
++ "true"
++ )
++
+ @pytest.mark.complete("scp -F config ", cwd="scp")
+ def test_basic(self, hosts, completion):
+ expected = sorted(
+@@ -276,3 +293,23 @@ class TestScp:
+ assert completion == sorted(
+ [r"backslash-a\ b.txt", r"backslash-a\\\ b.txt"]
+ )
++
++ def test_scp_remote_path_boo1221414(self, bash):
++ """Test remote path completion without _comp_compgen_split corruption
(boo#1221414)."""
++ from conftest import PS1
++
++ assert_bash_exec(bash, "ssh() { echo '/var/lib/'; }")
++
++ old_delay = bash.delaybeforesend
++ bash.delaybeforesend = 0.05
++
++ try:
++ bash.send("scp server:/var/li\t")
++
++ bash.expect(r"b/")
++
++ finally:
++ bash.sendintr()
++ bash.expect_exact(PS1)
++
++ bash.delaybeforesend = old_delay
++++++ bsc1199724-modules.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.808674043 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.813674251 +0200
@@ -6,7 +6,7 @@
===================================================================
--- bash-completion-2.17.0.orig/bash_completion
+++ bash-completion-2.17.0/bash_completion
-@@ -2312,7 +2312,7 @@ _comp_compgen_kernel_modules()
+@@ -2345,7 +2345,7 @@ _comp_compgen_kernel_modules()
local _modpath=/lib/modules/$1
_comp_compgen_split -- "$(command ls -RL "$_modpath" 2>/dev/null |
command sed -ne 's/^\(.*\)\.k\{0,1\}o\(\.[gx]z\)\{0,1\}$/\1/p' \
++++++ dollar-completion-boo905348-boo940835-boo963140-boo940837.patch ++++++
commit d1a48426003deab06fc9c7296503712ba9da1349
Author: Werner Fink <[email protected]>
Date: Wed Sep 30 11:29:27 2026 +0200
Expand variables instead of escaping them
I had several bug reports all with similar content:
```
export SCRATCH_AREA=/dev/shm
ls $SCR<tab>
ls \$SCRATCH_AREA/
```
Signed-off-by: Werner Fink <[email protected]>
Merged former patches
* FOO-dir-completion-boo905348.patch
* backtick-completion-boo940835.patch
* backticks-bsc963140.patch
* respect-variables-boo940837.patch
to this one for a possible pull request
diff --git bash_completion bash_completion
index 35586606..d71b5b73 100644
--- a/bash_completion
+++ b/bash_completion
@@ -1303,6 +1303,7 @@ _comp_quote_compgen()
_comp_compgen_filedir()
{
_comp_compgen_tilde && return
+ _comp_compgen_dollar "$cur" || return
local -a toks
local _dir="" _filenames="" _xspec=""
@@ -2015,6 +2016,56 @@ _comp_compgen_tilde()
return 1
}
+# Perform dollar ($ or backtick) completion
+# @return True (0) if completion needs further processing,
+# False (> 0) if dollar or backtick is for commands, also if dollar
+# is used for variables, completions are put in COMPREPLY and noq
+# further processing is necessary.
+_comp_compgen_dollar()
+{
+ local s=""
+ local -i glob=0 cmd=0
+ shopt -q extglob && let glob++
+ ((glob == 0)) && shopt -s extglob
+
+ [[ "$COMP_LINE" == cd* ]] && s="/"
+
+ case "$1" in
+ \$\(*\))
+ ((glob == 0)) && shopt -u extglob
+ return 0
+ ;;
+ \$\(*)
+ COMPREPLY=($(compgen -c -P '$(' -S ")$s" -- ${1:2}))
+ ((${#COMPREPLY[@]} <= 0)) && let cmd++
+ ;;
+ \`*\`)
+ ((glob == 0)) && shopt -u extglob
+ return 0
+ ;;
+ \`*)
+ COMPREPLY=($(compgen -c -P '\`' -S "\`$s" -- ${1:1}))
+ ((${#COMPREPLY[@]} <= 0)) && let cmd++
+ ;;
+ \$\{*)
+ COMPREPLY=($(compgen -v -P '${' -S "}$s" -- ${1#??})) ;;
+ \$*)
+ COMPREPLY=($(compgen -v -P '$' ${s:+-S $s} -- ${1#?})) ;;
+ *)
+ ((glob == 0)) && shopt -u extglob
+ return 0
+ esac
+
+ if ((${#COMPREPLY[@]} > 0)) ; then
+ ((${#COMPREPLY[@]} == 1)) && eval COMPREPLY=\(${COMPREPLY[@]}\)
+ elif ((cmd > 0)); then
+ compopt -o default -o bashdefault -o nospace
+ fi
+
+ ((glob == 0)) && shopt -u extglob
+ return ${#COMPREPLY[@]}
+}
+
# Expand string starting with tilde (~)
# We want to expand ~foo/... to /home/foo/... to avoid problems when
# word-to-complete starting with a tilde is fed to commands and ending up
@@ -3206,8 +3257,19 @@ _comp_compgen_commands()
# @since 2.12
_comp_complete_longopt()
{
- local cur prev words cword was_split comp_args
- _comp_initialize -s -- "$@" || return
+ local cur=${COMP_WORDS[COMP_CWORD]}
+ local prev words cword was_split comp_args
+
+ if [[ "${cur:0:1}" == '$' ]] ; then
+ compopt -o dirnames +o filenames
+ else
+ compopt +o dirnames -o filenames
+ fi
+
+ _comp_initialize -s -- "$@" || {
+ _comp_compgen_dollar "$cur"
+ return
+ }
case "${prev,,}" in
--help | --usage | --version)
diff --git completions-core/cd.bash completions-core/cd.bash
index 4b0307a1..e1805472 100644
--- a/completions-core/cd.bash
+++ b/completions-core/cd.bash
@@ -64,7 +64,16 @@ _comp_cmd_cd__compgen_cdpath()
_comp_cmd_cd()
{
local cur prev words cword comp_args
- _comp_initialize -- "$@" || return
+ _comp_initialize -- "$@" || {
+ if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
+ local i=${COMPREPLY[0]}
+ if [[ "$i" == "$cur" && $i != "*/" ]]; then
+ _comp_compgen_dollar "$i" || return
+ COMPREPLY[0]="${i%%/}/"
+ fi
+ fi
+ return
+ }
if [[ $cur == -* ]]; then
_comp_compgen_help -c help "$1"
diff --git test/t/test_dollar.py test/t/test_dollar.py
new file mode 100644
index 00000000..b7443699
--- a/test/t/test_dollar.py
+++ b/test/t/test_dollar.py
@@ -0,0 +1,67 @@
+import pytest
+from conftest import assert_bash_exec, assert_complete
+
[email protected](cmd=None, temp_cwd=True)
+class TestDollarAndBackticks:
+
+ # ---------------------------------------------------------
+ # 1. Test for boo#905348
+ # ---------------------------------------------------------
+ COMMANDS_905348 = ["cat", "ls", "cd"]
+
+ @pytest.mark.parametrize("cmd", COMMANDS_905348)
+ def test_variable_expansion_no_backslash_boo905348(self, bash, cmd):
+ """Test that paths with variables do not get backslash-escaped
(boo#905348)."""
+ assert_bash_exec(bash, "mkdir -p test_dir_boo905348/logs/default_dir")
+
+ old_delay = bash.delaybeforesend
+ bash.delaybeforesend = 0.05
+
+ completion = assert_complete(
+ bash,
+ f"{cmd} $FOO/logs/def",
+ env={"FOO": "test_dir_boo905348"}
+ )
+ assert "ault_dir/" in completion
+ bash.delaybeforesend = old_delay
+
+ # ---------------------------------------------------------
+ # 2. Test for boo#940835 (Command Completion with Backticks)
+ # ---------------------------------------------------------
+ def test_backtick_command_completion_boo940835(self, bash):
+ """Test command completion after backtick without syntax error
(boo#940835)."""
+ completion = assert_complete(bash, "ls `fin")
+ assert "`find" in completion
+
+ # ---------------------------------------------------------
+ # 3. Test for boo#963140 (Completion IN Backticks in loops)
+ # ---------------------------------------------------------
+ def test_completion_inside_backticks_bsc963140(self, bash):
+ """Test file completion inside backticks for loops (bsc#963140)."""
+ assert_bash_exec(bash, "mkdir -p test_dir_bsc963140")
+ completion = assert_complete(bash, "for i in `cat test_dir_bsc")
+ assert "963140/" in completion
+
+ # ---------------------------------------------------------
+ # 4. Test for boo#940837 (Variables in longopt-Commands)
+ # ---------------------------------------------------------
+ def test_variable_expansion_longopt_boo940837(self, bash):
+ """Test variable expansion for commands using _comp_complete_longopt
like ls (boo#940837)."""
+ from conftest import PS1
+
+ assert_bash_exec(bash, "mkdir -p /tmp/test_dir_boo940837")
+ assert_bash_exec(bash, "export SCRATCH_AREA=/tmp/test_dir_boo940837")
+
+ old_delay = bash.delaybeforesend
+ bash.delaybeforesend = 0.05
+
+ try:
+ bash.send("ls $SCRATCH_AR\t")
+ bash.expect(r"boo940837")
+
+ finally:
+ bash.sendintr()
+ bash.expect_exact(PS1)
+
+ assert_bash_exec(bash, "unset SCRATCH_AREA")
+ bash.delaybeforesend = old_delay
++++++ ls-completion-boo889319.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.840675376 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.844675542 +0200
@@ -1,24 +1,65 @@
+Bug boo#boo889319
+
+ $ ls *spec<ENTER>
+ graphviz-gvedit.spec
+ graphviz-plugins.spec
+ graphviz-smyrna.spec
+ graphviz.spec
+ $ ls *spec<TAB><TAB> # nothing
+
+also allow that all home directories exists for test number 3
+as in clean build environments.
+
---
- bash-completion-2.12.0/bash_completion | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
+ bash-completion-2.18.0/bash_completion | 3 ++-
+ bash-completion-2.18.0/test/t/test_ls.py | 17 +++++++++++++++++
+ 2 files changed, 19 insertions(+), 1 deletion(-)
-Index: bash-completion-2.17.0/bash_completion
-===================================================================
---- bash-completion-2.17.0.orig/bash_completion
-+++ bash-completion-2.17.0/bash_completion
-@@ -3259,12 +3259,13 @@ _comp_complete_longopt()
+--- bash-completion-2.18.0/bash_completion
++++ bash-completion-2.18.0/bash_completion 2026-09-30 11:01:45.430370406
+0000
+@@ -3319,11 +3319,12 @@ _comp_complete_longopt()
complete -F _comp_complete_longopt -o filenames \
- a2ps awk base{32,64,nc} bash bc bison cat chroot colordiff comm cp \
- csplit cut date df diff dir du enscript expand fmt fold gperf \
-- grep grub head irb ld ldd less ln ls m4 mkdir mkfifo mknod \
-+ grep grub head irb ld ldd less ln m4 mkdir mkfifo mknod \
- mv nl nm numfmt objcopy objdump od paste pr ptx readelf \
- readlink realpath rm rmdir sed shar shred \
- shuf sort split stat strip sum sync tac tail tee \
- texindex touch tr unexpand uniq vdir wc who
+ a2ps awk base{32,64,nc} bash bc bison cat chroot colordiff comm cp csplit
\
+ cut date df diff dir du enscript expand fmt fold gperf grep grub head irb
\
+- ld ldd less ln ls m4 mkdir mkfifo mknod mv nl nm numfmt objcopy \
++ ld ldd less ln m4 mkdir mkfifo mknod mv nl nm numfmt objcopy \
+ objdump od paste pr ptx readelf readlink realpath rm rmdir sed shar \
+ shred shuf sort split stat strip sum sync tac tail tee texindex touch tr \
+ unexpand uniq vdir wc who
complete -F _comp_complete_longopt -o default env netstat seq uname units
+complete -F _comp_complete_longopt -o bashdefault -o default -o filenames ls
ll la l ls-l lf
# @since 2.12
declare -Ag _comp_xspecs
+--- bash-completion-2.18.0/test/t/test_ls.py
++++ bash-completion-2.18.0/test/t/test_ls.py 2026-09-30 11:39:58.301243109
+0000
+@@ -38,3 +38,28 @@ class TestLs:
+ completion = assert_complete(bash, "ls ~%s" % part)
+ assert completion == full[len(part) :]
+ assert completion.endswith(" ")
++
++ @pytest.mark.bashcomp(temp_cwd=True)
++ def test_glob_expansion_offer_more_than_only_first_file(self, bash):
++ """~Test fallback to glob expansion for ls (opensuse #889319)."""
++ from conftest import PS1
++
++ assert_bash_exec(bash, "touch graphviz-gvedit.spec graphviz.spec
other_file.txt")
++
++ old_delay = bash.delaybeforesend
++ bash.delaybeforesend = 0.05
++
++ try:
++ bash.send("ls *spec\t")
++
++ bash.expect(r"graphviz-gvedit\.spec")
++ bash.expect(r"graphviz\.spec")
++
++ bash.expect_exact("ls *spec")
++
++ assert "other_file.txt" not in bash.before
++
++ finally:
++ bash.sendintr()
++ bash.expect_exact(PS1)
++ bash.delaybeforesend = old_delay
++++++ qdbus-qt5.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.856676042 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.860676208 +0200
@@ -3,38 +3,39 @@
qdbus is the Qt 4 variant, also complete for the Qt 5 version.
-Index: bash-completion-2.17.0/completions/Makefile.am
+Index: bash-completion-2.17.0/completions-core/Makefile.am
===================================================================
---- bash-completion-2.17.0.orig/completions/Makefile.am
-+++ bash-completion-2.17.0/completions/Makefile.am
-@@ -973,6 +973,8 @@ CLEANFILES = \
- pyvenv-3.11 \
- pyvenv-3.12 \
- pyvenv-3.13 \
-+ qdbus-qt5 \
-+ qdbus6 \
- qemu-kvm \
- qemu-system-i386 \
- qemu-system-x86_64 \
-@@ -1484,7 +1486,7 @@ endif
- pyvenv-3.4 pyvenv-3.5 pyvenv-3.6 pyvenv-3.7 pyvenv-3.8 \
- pyvenv-3.9 pyvenv-3.10 pyvenv-3.11 pyvenv-3.12 pyvenv-3.13
+---
+ bash-completion-2.18.0/completions-core/Makefile.am | 4 +++-
+ bash-completion-2.18.0/completions-core/qdbus.bash | 2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- bash-completion-2.18.0/completions-core/Makefile.am
++++ bash-completion-2.18.0/completions-core/Makefile.am 2026-09-30
10:58:46.993570213 +0000
+@@ -739,6 +739,8 @@ CLEANFILES = \
+ pyvenv-3.13.bash \
+ pyvenv-3.14.bash \
+ pyvenv-3.15.bash \
++ qdbus-qt5.bash \
++ qdbus6.bash \
+ qemu-kvm.bash \
+ qemu-system-i386.bash \
+ qemu-system-x86_64.bash \
+@@ -992,7 +994,7 @@ endif
+ pyvenv-3.9 pyvenv-3.10 pyvenv-3.11 pyvenv-3.12 pyvenv-3.13 \
+ pyvenv-3.14 pyvenv-3.15
$(ss) qdbus \
- dcop
+ dcop qdbus-qt5 qdbus6
$(ss) qemu \
qemu-kvm qemu-system-i386 qemu-system-x86_64
$(ss) quota \
-Index: bash-completion-2.17.0/completions/qdbus
-===================================================================
---- bash-completion-2.17.0.orig/completions/qdbus
-+++ bash-completion-2.17.0/completions/qdbus
-@@ -9,6 +9,6 @@ _comp_cmd_qdbus()
+--- bash-completion-2.18.0/completions-core/qdbus.bash
++++ bash-completion-2.18.0/completions-core/qdbus.bash 2026-09-30
10:59:35.592698811 +0000
+@@ -9,4 +9,4 @@ _comp_cmd_qdbus()
command "${words[@]::cword}" 2>/dev/null | command sed 's/(.*)//'
)"
} &&
- complete -F _comp_cmd_qdbus qdbus dcop
+ complete -F _comp_cmd_qdbus qdbus qdbus-qt5 qdbus6 dcop
-
- # ex: filetype=sh
++++++ rm-completion-smart-boo958462.patch ++++++
--- /var/tmp/diff_new_pack.FrOKZm/_old 2026-09-30 16:23:58.870676625 +0200
+++ /var/tmp/diff_new_pack.FrOKZm/_new 2026-09-30 16:23:58.874676791 +0200
@@ -4,21 +4,19 @@
does not return anything.
---
- bash-completion-2.12.0/bash_completion | 3 ++-
+ bash-completion-2.18.0/bash_completion | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-Index: bash-completion-2.17.0/bash_completion
-===================================================================
---- bash-completion-2.17.0.orig/bash_completion
-+++ bash-completion-2.17.0/bash_completion
-@@ -3277,11 +3277,12 @@ complete -F _comp_complete_longopt -o fi
- csplit cut date df diff dir du enscript expand fmt fold gperf \
- grep grub head irb ld ldd less ln m4 mkdir mkfifo mknod \
- mv nl nm numfmt objcopy objdump od paste pr ptx readelf \
-- readlink realpath rm rmdir sed shar shred \
-+ readlink realpath sed shar shred \
- shuf sort split stat strip sum sync tac tail tee \
- texindex touch tr unexpand uniq vdir wc who
+--- bash-completion-2.18.0/bash_completion
++++ bash-completion-2.18.0/bash_completion 2026-09-30 11:10:57.608467434
+0000
+@@ -3320,11 +3320,12 @@ complete -F _comp_complete_longopt -o fi
+ a2ps awk base{32,64,nc} bash bc bison cat chroot colordiff comm cp csplit
\
+ cut date df diff dir du enscript expand fmt fold gperf grep grub head irb
\
+ ld ldd less ln m4 mkdir mkfifo mknod mv nl nm numfmt objcopy \
+- objdump od paste pr ptx readelf readlink realpath rm rmdir sed shar \
++ objdump od paste pr ptx readelf readlink realpath sed shar \
+ shred shuf sort split stat strip sum sync tac tail tee texindex touch tr \
+ unexpand uniq vdir wc who
complete -F _comp_complete_longopt -o default env netstat seq uname units
complete -F _comp_complete_longopt -o bashdefault -o default -o filenames ls
ll la l ls-l lf
+complete -F _comp_complete_longopt -o bashdefault -o default -o filenames rm
rmdir