Skip to content

Commit d89b679

Browse files
committed
feat(_comp__init): source system startup files earlier
1 parent a1b0869 commit d89b679

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
@@ -3596,10 +3596,14 @@ _comp__init_collect_startup_configs()
35963596
35973597
# collect startup files
35983598
local -A startup_visited=()
3599-
local startup_dir startup_files
36003599
for startup_dir in "${startup_dirs[@]}"; do
36013600
[[ -d $startup_dir && -r $startup_dir && -x $startup_dir ]] || continue
3601+
3602+
local -a startup_files=()
36023603
_comp_expand_glob startup_files "$startup_dir/*.bash" || continue
3604+
3605+
local -a selected_startup_files=()
3606+
local startup_dir
36033607
for startup_file in "${startup_files[@]}"; do
36043608
[[ ! -d $startup_file && -r $startup_file ]] || continue
36053609
@@ -3611,8 +3615,19 @@ _comp__init_collect_startup_configs()
36113615
[[ ${startup_visited[$name]-} ]] && continue
36123616
startup_visited[$name]=set
36133617
3614-
_comp__init_startup_configs+=("$startup_file")
3618+
selected_startup_files+=("$startup_file")
36153619
done
3620+
((${#selected_startup_files[@]})) || continue
3621+
3622+
# Note: bash < 4.4 has a bug that all elements are connected with
3623+
# ${a[@]+"${a[@]}"} when IFS does not contain whitespace.
3624+
local IFS=$' \t\n'
3625+
# Prepend the selected startup files because we want to source the
3626+
# system startup files earlier.
3627+
_comp__init_startup_configs=(
3628+
"${selected_startup_files[@]}"
3629+
${_comp__init_startup_configs[@]+"${_comp__init_startup_configs[@]}"}
3630+
)
36163631
done
36173632
36183633
# 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)