Skip to content

Commit 011affa

Browse files
committed
feat(_comp__init): source system startup files earlier
1 parent 4990f89 commit 011affa

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

bash_completion

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3595,10 +3595,14 @@ _comp__init_collect_startup_configs()
35953595
35963596
# collect startup files
35973597
local -A startup_visited=()
3598-
local startup_dir startup_files
35993598
for startup_dir in "${startup_dirs[@]}"; do
36003599
[[ -d $startup_dir && -r $startup_dir && -x $startup_dir ]] || continue
3600+
3601+
local -a startup_files=()
36013602
_comp_expand_glob startup_files "$startup_dir/*.bash" || continue
3603+
3604+
local -a selected_startup_files=()
3605+
local startup_dir
36023606
for startup_file in "${startup_files[@]}"; do
36033607
[[ ! -d $startup_file && -r $startup_file ]] || continue
36043608
@@ -3610,8 +3614,19 @@ _comp__init_collect_startup_configs()
36103614
[[ ${startup_visited[$name]-} ]] && continue
36113615
startup_visited[$name]=set
36123616
3613-
_comp__init_startup_configs+=("$startup_file")
3617+
selected_startup_files+=("$startup_file")
36143618
done
3619+
((${#selected_startup_files[@]})) || continue
3620+
3621+
# Note: bash < 4.4 has a bug that all elements are connected with
3622+
# ${a[@]+"${a[@]}"} when IFS does not contain whitespace.
3623+
local IFS=$' \t\n'
3624+
# Prepend the selected startup files because we want to source the
3625+
# system startup files earlier.
3626+
_comp__init_startup_configs=(
3627+
"${selected_startup_files[@]}"
3628+
${_comp__init_startup_configs[@]+"${_comp__init_startup_configs[@]}"}
3629+
)
36153630
done
36163631
36173632
# collect compat completion directory definitions

test/t/unit/test_unit_init_collect_startup_configs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ def test_count(self, bash):
1414
@pytest.mark.parametrize(
1515
"module,expected",
1616
[
17-
("foo", "usr:1"),
18-
("bar", "usr:2"),
19-
("baz", "usr:3"),
20-
("qux", "usr:4"),
21-
("quux", "sys:5"),
17+
("quux", "sys:1"),
18+
("foo", "usr:2"),
19+
("bar", "usr:3"),
20+
("baz", "usr:4"),
21+
("qux", "usr:5"),
2222
],
2323
)
2424
def test_order(self, bash, module, expected):

0 commit comments

Comments
 (0)