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 &lt;&gt; (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

Reply via email to