mirror of
https://github.com/TheLocehiliosan/yadm
synced 2025-06-07 10:03:56 +00:00
Added support for negative alt condition
This commit is contained in:
parent
5648f8b337
commit
bbeb2fd8ff
@ -321,3 +321,24 @@ def test_underscores_and_upper_case_in_distro_and_family(runner, yadm):
|
|||||||
assert run.success
|
assert run.success
|
||||||
assert run.err == ""
|
assert run.err == ""
|
||||||
assert run.out == expected
|
assert run.out == expected
|
||||||
|
|
||||||
|
def test_negative_class_condition(runner, yadm):
|
||||||
|
"""Test negative class condition: returns 0 when matching and proper score when not matching."""
|
||||||
|
script = f"""
|
||||||
|
YADM_TEST=1 source {yadm}
|
||||||
|
score=0
|
||||||
|
local_class="testclass"
|
||||||
|
local_classes=("testclass")
|
||||||
|
# Negative condition with matching value should yield delta -1 and zero the score.
|
||||||
|
score_file "filename##!class.testclass" "dest"
|
||||||
|
echo "score: $score"
|
||||||
|
# Negative condition with non-matching value should yield delta 16.
|
||||||
|
score=0
|
||||||
|
score_file "filename##!class.badclass" "dest"
|
||||||
|
echo "score2: $score"
|
||||||
|
"""
|
||||||
|
run = runner(command=["bash"], inp=script)
|
||||||
|
assert run.success
|
||||||
|
output = run.out.strip().splitlines()
|
||||||
|
assert output[0] == "score: 0"
|
||||||
|
assert output[1] == "score2: 1016"
|
||||||
|
50
yadm
50
yadm
@ -179,6 +179,13 @@ function score_file() {
|
|||||||
local value=${field#*.}
|
local value=${field#*.}
|
||||||
[ "$field" = "$label" ] && value="" # when .value is omitted
|
[ "$field" = "$label" ] && value="" # when .value is omitted
|
||||||
|
|
||||||
|
# Check for negative condition prefix (e.g., "!<label>")
|
||||||
|
local negate=0
|
||||||
|
if [[ "$label" == !* ]]; then
|
||||||
|
negate=1
|
||||||
|
label="${label:1}"
|
||||||
|
fi
|
||||||
|
|
||||||
shopt -s nocasematch
|
shopt -s nocasematch
|
||||||
local -i delta=-1
|
local -i delta=-1
|
||||||
case "$label" in
|
case "$label" in
|
||||||
@ -186,28 +193,55 @@ function score_file() {
|
|||||||
delta=0
|
delta=0
|
||||||
;;
|
;;
|
||||||
a | arch)
|
a | arch)
|
||||||
[[ "$value" = "$local_arch" ]] && delta=1
|
if [[ "$value" = "$local_arch" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=1
|
||||||
|
else
|
||||||
|
(( negate )) && delta=1
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
o | os)
|
o | os)
|
||||||
[[ "$value" = "$local_system" ]] && delta=2
|
if [[ "$value" = "$local_system" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=2
|
||||||
|
else
|
||||||
|
(( negate )) && delta=2
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
d | distro)
|
d | distro)
|
||||||
[[ "${value// /_}" = "${local_distro// /_}" ]] && delta=4
|
if [[ "${value// /_}" = "${local_distro// /_}" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=4
|
||||||
|
else
|
||||||
|
(( negate )) && delta=4
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
f | distro_family)
|
f | distro_family)
|
||||||
[[ "${value// /_}" = "${local_distro_family// /_}" ]] && delta=8
|
if [[ "${value// /_}" = "${local_distro_family// /_}" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=8
|
||||||
|
else
|
||||||
|
(( negate )) && delta=8
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
c | class)
|
c | class)
|
||||||
in_list "$value" "${local_classes[@]}" && delta=16
|
if in_list "$value" "${local_classes[@]}"; then
|
||||||
|
(( negate )) && delta=-1 || delta=16
|
||||||
|
else
|
||||||
|
(( negate )) && delta=16
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
h | hostname)
|
h | hostname)
|
||||||
[[ "$value" = "$local_host" ]] && delta=32
|
if [[ "$value" = "$local_host" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=32
|
||||||
|
else
|
||||||
|
(( negate )) && delta=32
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
u | user)
|
u | user)
|
||||||
[[ "$value" = "$local_user" ]] && delta=64
|
if [[ "$value" = "$local_user" ]]; then
|
||||||
|
(( negate )) && delta=-1 || delta=64
|
||||||
|
else
|
||||||
|
(( negate )) && delta=64
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
e | extension)
|
e | extension)
|
||||||
# extension isn't a condition and doesn't affect the score
|
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
t | template | yadm)
|
t | template | yadm)
|
||||||
|
Loading…
Reference in New Issue
Block a user