This commit is contained in:
Erik Flodin 2021-12-27 21:03:19 +00:00 committed by GitHub
commit ad04e4baff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 136 additions and 143 deletions

View File

@ -22,6 +22,7 @@ def test_bootstrap(
paths.bootstrap.write( paths.bootstrap.write(
'#!/bin/bash\n' '#!/bin/bash\n'
f'echo {expect}\n' f'echo {expect}\n'
f'[[ $(id -un) = $YADM_USER ]] && echo "user is set"\n'
f'exit {code}\n' f'exit {code}\n'
) )
paths.bootstrap.chmod(0o775) paths.bootstrap.chmod(0o775)
@ -30,6 +31,7 @@ def test_bootstrap(
if exists and executable: if exists and executable:
assert run.err == '' assert run.err == ''
assert expect in run.out assert expect in run.out
assert 'user is set' in run.out
else: else:
assert expect in run.err assert expect in run.err
assert run.out == '' assert run.out == ''

View File

@ -2,11 +2,6 @@
import pytest import pytest
INIT_VARS = """ INIT_VARS = """
score=0
local_class=testclass
local_system=testsystem
local_host=testhost
local_user=testuser
alt_scores=() alt_scores=()
alt_targets=() alt_targets=()
alt_sources=() alt_sources=()

View File

@ -10,7 +10,7 @@ CONDITION = {
'labels': ['a', 'arch', 'architecture'], 'labels': ['a', 'arch', 'architecture'],
'modifier': 1, 'modifier': 1,
}, },
'system': { 'os': {
'labels': ['o', 'os'], 'labels': ['o', 'os'],
'modifier': 2, 'modifier': 2,
}, },
@ -54,9 +54,9 @@ def calculate_score(filename):
else: else:
score = 0 score = 0
break break
elif label in CONDITION['system']['labels']: elif label in CONDITION['os']['labels']:
if value == 'testsystem': if value == 'testos':
score += 1000 + CONDITION['system']['modifier'] score += 1000 + CONDITION['os']['modifier']
else: else:
score = 0 score = 0
break break
@ -95,7 +95,7 @@ def calculate_score(filename):
@pytest.mark.parametrize( @pytest.mark.parametrize(
'arch', ['arch', None], ids=['arch', 'no-arch']) 'arch', ['arch', None], ids=['arch', 'no-arch'])
@pytest.mark.parametrize( @pytest.mark.parametrize(
'system', ['system', None], ids=['system', 'no-system']) 'system', ['os', None], ids=['os', 'no-os'])
@pytest.mark.parametrize( @pytest.mark.parametrize(
'distro', ['distro', None], ids=['distro', 'no-distro']) 'distro', ['distro', None], ids=['distro', 'no-distro'])
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -110,9 +110,9 @@ def test_score_values(
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
local_class = 'testclass' local_class = 'testclass'
local_arch = 'testarch' local_arch = 'testarch'
local_system = 'testsystem' local_os = 'testos'
local_distro = 'testdistro' local_distro = 'testdistro'
local_host = 'testhost' local_hostname = 'testhost'
local_user = 'testuser' local_user = 'testuser'
filenames = {'filename##': 0} filenames = {'filename##': 0}
@ -145,7 +145,7 @@ def test_score_values(
newfile += ',' newfile += ','
newfile += '.'.join([ newfile += '.'.join([
label, label,
local_system if match else 'badsys' local_os if match else 'bados'
]) ])
filenames[newfile] = calculate_score(newfile) filenames[newfile] = calculate_score(newfile)
if distro: if distro:
@ -181,7 +181,7 @@ def test_score_values(
newfile += ',' newfile += ','
newfile += '.'.join([ newfile += '.'.join([
label, label,
local_host if match else 'badhost' local_hostname if match else 'badhost'
]) ])
filenames[newfile] = calculate_score(newfile) filenames[newfile] = calculate_score(newfile)
if user: if user:
@ -200,12 +200,12 @@ def test_score_values(
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
score=0 score=0
local_class={local_class} YADM_CLASS={local_class}
local_arch={local_arch} YADM_ARCH={local_arch}
local_system={local_system} YADM_OS={local_os}
local_distro={local_distro} YADM_DISTRO={local_distro}
local_host={local_host} YADM_HOSTNAME={local_hostname}
local_user={local_user} YADM_USER={local_user}
""" """
expected = '' expected = ''
for filename in filenames: for filename in filenames:
@ -233,7 +233,7 @@ def test_extensions(runner, yadm, ext):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
score=0 score=0
local_user={local_user} YADM_USER={local_user}
score_file "{filename}" score_file "{filename}"
echo "$score" echo "$score"
""" """
@ -248,9 +248,9 @@ def test_score_values_templates(runner, yadm):
"""Test score results""" """Test score results"""
local_class = 'testclass' local_class = 'testclass'
local_arch = 'arch' local_arch = 'arch'
local_system = 'testsystem' local_os = 'testos'
local_distro = 'testdistro' local_distro = 'testdistro'
local_host = 'testhost' local_hostname = 'testhost'
local_user = 'testuser' local_user = 'testuser'
filenames = {'filename##': 0} filenames = {'filename##': 0}
@ -265,12 +265,12 @@ def test_score_values_templates(runner, yadm):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
score=0 score=0
local_class={local_class} YADM_CLASS={local_class}
local_arch={local_arch} YADM_ARCH={local_arch}
local_system={local_system} YADM_OS={local_os}
local_distro={local_distro} YADM_DISTRO={local_distro}
local_host={local_host} YADM_HOSTNAME={local_hostname}
local_user={local_user} YADM_USER={local_user}
""" """
expected = '' expected = ''
for filename in filenames: for filename in filenames:

View File

@ -1,4 +1,4 @@
"""Unit tests: set_local_alt_values""" """Unit tests: set_alt_values"""
import pytest import pytest
import utils import utils
@ -20,18 +20,18 @@ import utils
] ]
) )
@pytest.mark.usefixtures('ds1_copy') @pytest.mark.usefixtures('ds1_copy')
def test_set_local_alt_values( def test_set_alt_values(
runner, yadm, paths, tst_sys, tst_host, tst_user, override): runner, yadm, paths, tst_sys, tst_host, tst_user, override):
"""Use issue_legacy_path_warning""" """Use issue_legacy_path_warning"""
script = f""" script = f"""
YADM_TEST=1 source {yadm} && YADM_TEST=1 source {yadm} &&
set_operating_system && set_operating_system &&
YADM_DIR={paths.yadm} YADM_DATA={paths.data} configure_paths && YADM_DIR={paths.yadm} YADM_DATA={paths.data} configure_paths &&
set_local_alt_values ALT_VALUES_SET=0 set_alt_values
echo "class='$local_class'" echo "class='$YADM_CLASS'"
echo "os='$local_system'" echo "os='$YADM_OS'"
echo "host='$local_host'" echo "host='$YADM_HOSTNAME'"
echo "user='$local_user'" echo "user='$YADM_USER'"
""" """
if override: if override:
@ -69,8 +69,8 @@ def test_distro(runner, yadm):
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
function config() {{ echo "$1"; }} function config() {{ echo "$1"; }}
function query_distro() {{ echo "testdistro"; }} function query_distro() {{ echo "testdistro"; }}
set_local_alt_values ALT_VALUES_SET=0 set_alt_values
echo "distro='$local_distro'" echo "distro='$YADM_DISTRO'"
""" """
run = runner(command=['bash'], inp=script) run = runner(command=['bash'], inp=script)
assert run.success assert run.success

View File

@ -6,8 +6,8 @@ FILE_MODE = 0o754
# these values are also testing the handling of bizarre characters # these values are also testing the handling of bizarre characters
LOCAL_CLASS = "default_Test+@-!^Class" LOCAL_CLASS = "default_Test+@-!^Class"
LOCAL_ARCH = "default_Test+@-!^Arch" LOCAL_ARCH = "default_Test+@-!^Arch"
LOCAL_SYSTEM = "default_Test+@-!^System" LOCAL_OS = "default_Test+@-!^System"
LOCAL_HOST = "default_Test+@-!^Host" LOCAL_HOSTNAME = "default_Test+@-!^Host"
LOCAL_USER = "default_Test+@-!^User" LOCAL_USER = "default_Test+@-!^User"
LOCAL_DISTRO = "default_Test+@-!^Distro" LOCAL_DISTRO = "default_Test+@-!^Distro"
TEMPLATE = f''' TEMPLATE = f'''
@ -47,7 +47,7 @@ wrong arch 2
{{% if yadm.os == "wrongos1" %}} {{% if yadm.os == "wrongos1" %}}
wrong os 1 wrong os 1
{{% endif %}} {{% endif %}}
{{% if yadm.os == "{LOCAL_SYSTEM}" %}} {{% if yadm.os == "{LOCAL_OS}" %}}
Included section for os = {{{{yadm.os}}}} ({{{{yadm.os}}}} repeated) Included section for os = {{{{yadm.os}}}} ({{{{yadm.os}}}} repeated)
{{% endif %}} {{% endif %}}
{{% if yadm.os == "wrongos2" %}} {{% if yadm.os == "wrongos2" %}}
@ -56,7 +56,7 @@ wrong os 2
{{% if yadm.hostname == "wronghost1" %}} {{% if yadm.hostname == "wronghost1" %}}
wrong host 1 wrong host 1
{{% endif %}} {{% endif %}}
{{% if yadm.hostname == "{LOCAL_HOST}" %}} {{% if yadm.hostname == "{LOCAL_HOSTNAME}" %}}
Included section for host = {{{{yadm.hostname}}}} ({{{{yadm.hostname}}}} again) Included section for host = {{{{yadm.hostname}}}} ({{{{yadm.hostname}}}} again)
{{% endif %}} {{% endif %}}
{{% if yadm.hostname == "wronghost2" %}} {{% if yadm.hostname == "wronghost2" %}}
@ -86,16 +86,16 @@ EXPECTED = f'''
start of template start of template
default class = >{LOCAL_CLASS}< default class = >{LOCAL_CLASS}<
default arch = >{LOCAL_ARCH}< default arch = >{LOCAL_ARCH}<
default os = >{LOCAL_SYSTEM}< default os = >{LOCAL_OS}<
default host = >{LOCAL_HOST}< default host = >{LOCAL_HOSTNAME}<
default user = >{LOCAL_USER}< default user = >{LOCAL_USER}<
default distro = >{LOCAL_DISTRO}< default distro = >{LOCAL_DISTRO}<
Included section from else Included section from else
Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated) Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated)
Multiple lines Multiple lines
Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated) Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated)
Included section for os = {LOCAL_SYSTEM} ({LOCAL_SYSTEM} repeated) Included section for os = {LOCAL_OS} ({LOCAL_OS} repeated)
Included section for host = {LOCAL_HOST} ({LOCAL_HOST} again) Included section for host = {LOCAL_HOSTNAME} ({LOCAL_HOSTNAME} again)
Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated) Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated)
Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again) Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again)
end of template end of template
@ -149,12 +149,12 @@ def test_template_default(runner, yadm, tmpdir):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
set_awk set_awk
local_class="{LOCAL_CLASS}" YADM_CLASS="{LOCAL_CLASS}"
local_arch="{LOCAL_ARCH}" YADM_ARCH="{LOCAL_ARCH}"
local_system="{LOCAL_SYSTEM}" YADM_OS="{LOCAL_OS}"
local_host="{LOCAL_HOST}" YADM_HOSTNAME="{LOCAL_HOSTNAME}"
local_user="{LOCAL_USER}" YADM_USER="{LOCAL_USER}"
local_distro="{LOCAL_DISTRO}" YADM_DISTRO="{LOCAL_DISTRO}"
template_default "{input_file}" "{output_file}" template_default "{input_file}" "{output_file}"
""" """
run = runner(command=['bash'], inp=script) run = runner(command=['bash'], inp=script)
@ -193,7 +193,7 @@ def test_include(runner, yadm, tmpdir):
basic_file = tmpdir.join('basic') basic_file = tmpdir.join('basic')
basic_file.write(INCLUDE_BASIC) basic_file.write(INCLUDE_BASIC)
variables_file = tmpdir.join(f'variables.{LOCAL_SYSTEM}') variables_file = tmpdir.join(f'variables.{LOCAL_OS}')
variables_file.write(INCLUDE_VARIABLES) variables_file.write(INCLUDE_VARIABLES)
nested_file = tmpdir.join('dir').join('nested') nested_file = tmpdir.join('dir').join('nested')
@ -207,8 +207,8 @@ def test_include(runner, yadm, tmpdir):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
set_awk set_awk
local_class="{LOCAL_CLASS}" YADM_CLASS="{LOCAL_CLASS}"
local_system="{LOCAL_SYSTEM}" YADM_OS="{LOCAL_OS}"
template_default "{input_file}" "{output_file}" template_default "{input_file}" "{output_file}"
""" """
run = runner(command=['bash'], inp=script) run = runner(command=['bash'], inp=script)

View File

@ -5,8 +5,8 @@ FILE_MODE = 0o754
LOCAL_CLASS = "esh_Test+@-!^Class" LOCAL_CLASS = "esh_Test+@-!^Class"
LOCAL_ARCH = "esh_Test+@-!^Arch" LOCAL_ARCH = "esh_Test+@-!^Arch"
LOCAL_SYSTEM = "esh_Test+@-!^System" LOCAL_OS = "esh_Test+@-!^System"
LOCAL_HOST = "esh_Test+@-!^Host" LOCAL_HOSTNAME = "esh_Test+@-!^Host"
LOCAL_USER = "esh_Test+@-!^User" LOCAL_USER = "esh_Test+@-!^User"
LOCAL_DISTRO = "esh_Test+@-!^Distro" LOCAL_DISTRO = "esh_Test+@-!^Distro"
TEMPLATE = f''' TEMPLATE = f'''
@ -38,7 +38,7 @@ wrong arch 2
<% if [ "$YADM_OS" = "wrongos1" ]; then -%> <% if [ "$YADM_OS" = "wrongos1" ]; then -%>
wrong os 1 wrong os 1
<% fi -%> <% fi -%>
<% if [ "$YADM_OS" = "{LOCAL_SYSTEM}" ]; then -%> <% if [ "$YADM_OS" = "{LOCAL_OS}" ]; then -%>
Included section for os = <%=$YADM_OS%> (<%=$YADM_OS%> repeated) Included section for os = <%=$YADM_OS%> (<%=$YADM_OS%> repeated)
<% fi -%> <% fi -%>
<% if [ "$YADM_OS" = "wrongos2" ]; then -%> <% if [ "$YADM_OS" = "wrongos2" ]; then -%>
@ -47,7 +47,7 @@ wrong os 2
<% if [ "$YADM_HOSTNAME" = "wronghost1" ]; then -%> <% if [ "$YADM_HOSTNAME" = "wronghost1" ]; then -%>
wrong host 1 wrong host 1
<% fi -%> <% fi -%>
<% if [ "$YADM_HOSTNAME" = "{LOCAL_HOST}" ]; then -%> <% if [ "$YADM_HOSTNAME" = "{LOCAL_HOSTNAME}" ]; then -%>
Included section for host = <%=$YADM_HOSTNAME%> (<%=$YADM_HOSTNAME%> again) Included section for host = <%=$YADM_HOSTNAME%> (<%=$YADM_HOSTNAME%> again)
<% fi -%> <% fi -%>
<% if [ "$YADM_HOSTNAME" = "wronghost2" ]; then -%> <% if [ "$YADM_HOSTNAME" = "wronghost2" ]; then -%>
@ -77,14 +77,14 @@ EXPECTED = f'''
start of template start of template
esh class = >{LOCAL_CLASS}< esh class = >{LOCAL_CLASS}<
esh arch = >{LOCAL_ARCH}< esh arch = >{LOCAL_ARCH}<
esh os = >{LOCAL_SYSTEM}< esh os = >{LOCAL_OS}<
esh host = >{LOCAL_HOST}< esh host = >{LOCAL_HOSTNAME}<
esh user = >{LOCAL_USER}< esh user = >{LOCAL_USER}<
esh distro = >{LOCAL_DISTRO}< esh distro = >{LOCAL_DISTRO}<
Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated) Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated)
Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated) Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated)
Included section for os = {LOCAL_SYSTEM} ({LOCAL_SYSTEM} repeated) Included section for os = {LOCAL_OS} ({LOCAL_OS} repeated)
Included section for host = {LOCAL_HOST} ({LOCAL_HOST} again) Included section for host = {LOCAL_HOSTNAME} ({LOCAL_HOSTNAME} again)
Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated) Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated)
Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again) Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again)
end of template end of template
@ -107,12 +107,12 @@ def test_template_esh(runner, yadm, tmpdir):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
local_class="{LOCAL_CLASS}" export YADM_CLASS="{LOCAL_CLASS}"
local_arch="{LOCAL_ARCH}" export YADM_ARCH="{LOCAL_ARCH}"
local_system="{LOCAL_SYSTEM}" export YADM_OS="{LOCAL_OS}"
local_host="{LOCAL_HOST}" export YADM_HOSTNAME="{LOCAL_HOSTNAME}"
local_user="{LOCAL_USER}" export YADM_USER="{LOCAL_USER}"
local_distro="{LOCAL_DISTRO}" export YADM_DISTRO="{LOCAL_DISTRO}"
template_esh "{input_file}" "{output_file}" template_esh "{input_file}" "{output_file}"
""" """
run = runner(command=['bash'], inp=script) run = runner(command=['bash'], inp=script)

View File

@ -6,8 +6,8 @@ FILE_MODE = 0o754
LOCAL_CLASS = "j2_Test+@-!^Class" LOCAL_CLASS = "j2_Test+@-!^Class"
LOCAL_ARCH = "j2_Test+@-!^Arch" LOCAL_ARCH = "j2_Test+@-!^Arch"
LOCAL_SYSTEM = "j2_Test+@-!^System" LOCAL_OS = "j2_Test+@-!^System"
LOCAL_HOST = "j2_Test+@-!^Host" LOCAL_HOSTNAME = "j2_Test+@-!^Host"
LOCAL_USER = "j2_Test+@-!^User" LOCAL_USER = "j2_Test+@-!^User"
LOCAL_DISTRO = "j2_Test+@-!^Distro" LOCAL_DISTRO = "j2_Test+@-!^Distro"
TEMPLATE = f''' TEMPLATE = f'''
@ -39,7 +39,7 @@ wrong arch 2
{{%- if YADM_OS == "wrongos1" %}} {{%- if YADM_OS == "wrongos1" %}}
wrong os 1 wrong os 1
{{%- endif %}} {{%- endif %}}
{{%- if YADM_OS == "{LOCAL_SYSTEM}" %}} {{%- if YADM_OS == "{LOCAL_OS}" %}}
Included section for os = {{{{YADM_OS}}}} ({{{{YADM_OS}}}} repeated) Included section for os = {{{{YADM_OS}}}} ({{{{YADM_OS}}}} repeated)
{{%- endif %}} {{%- endif %}}
{{%- if YADM_OS == "wrongos2" %}} {{%- if YADM_OS == "wrongos2" %}}
@ -48,7 +48,7 @@ wrong os 2
{{%- if YADM_HOSTNAME == "wronghost1" %}} {{%- if YADM_HOSTNAME == "wronghost1" %}}
wrong host 1 wrong host 1
{{%- endif %}} {{%- endif %}}
{{%- if YADM_HOSTNAME == "{LOCAL_HOST}" %}} {{%- if YADM_HOSTNAME == "{LOCAL_HOSTNAME}" %}}
Included section for host = {{{{YADM_HOSTNAME}}}} ({{{{YADM_HOSTNAME}}}} again) Included section for host = {{{{YADM_HOSTNAME}}}} ({{{{YADM_HOSTNAME}}}} again)
{{%- endif %}} {{%- endif %}}
{{%- if YADM_HOSTNAME == "wronghost2" %}} {{%- if YADM_HOSTNAME == "wronghost2" %}}
@ -78,14 +78,14 @@ EXPECTED = f'''
start of template start of template
j2 class = >{LOCAL_CLASS}< j2 class = >{LOCAL_CLASS}<
j2 arch = >{LOCAL_ARCH}< j2 arch = >{LOCAL_ARCH}<
j2 os = >{LOCAL_SYSTEM}< j2 os = >{LOCAL_OS}<
j2 host = >{LOCAL_HOST}< j2 host = >{LOCAL_HOSTNAME}<
j2 user = >{LOCAL_USER}< j2 user = >{LOCAL_USER}<
j2 distro = >{LOCAL_DISTRO}< j2 distro = >{LOCAL_DISTRO}<
Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated) Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated)
Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated) Included section for arch = {LOCAL_ARCH} ({LOCAL_ARCH} repeated)
Included section for os = {LOCAL_SYSTEM} ({LOCAL_SYSTEM} repeated) Included section for os = {LOCAL_OS} ({LOCAL_OS} repeated)
Included section for host = {LOCAL_HOST} ({LOCAL_HOST} again) Included section for host = {LOCAL_HOSTNAME} ({LOCAL_HOSTNAME} again)
Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated) Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated)
Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again) Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again)
end of template end of template
@ -109,12 +109,12 @@ def test_template_j2(runner, yadm, tmpdir, processor):
script = f""" script = f"""
YADM_TEST=1 source {yadm} YADM_TEST=1 source {yadm}
local_class="{LOCAL_CLASS}" export YADM_CLASS="{LOCAL_CLASS}"
local_arch="{LOCAL_ARCH}" export YADM_ARCH="{LOCAL_ARCH}"
local_system="{LOCAL_SYSTEM}" export YADM_OS="{LOCAL_OS}"
local_host="{LOCAL_HOST}" export YADM_HOSTNAME="{LOCAL_HOSTNAME}"
local_user="{LOCAL_USER}" export YADM_USER="{LOCAL_USER}"
local_distro="{LOCAL_DISTRO}" export YADM_DISTRO="{LOCAL_DISTRO}"
template_{processor} "{input_file}" "{output_file}" template_{processor} "{input_file}" "{output_file}"
""" """
run = runner(command=['bash'], inp=script) run = runner(command=['bash'], inp=script)

107
yadm
View File

@ -63,6 +63,7 @@ ENCRYPT_INCLUDE_FILES="unparsed"
LEGACY_WARNING_ISSUED=0 LEGACY_WARNING_ISSUED=0
INVALID_ALT=() INVALID_ALT=()
ALT_VALUES_SET="${YADM_TEST:-0}"
GPG_OPTS=() GPG_OPTS=()
OPENSSL_OPTS=() OPENSSL_OPTS=()
@ -190,42 +191,42 @@ function score_file() {
score=$((score + 0)) score=$((score + 0))
# variable conditions # variable conditions
elif [[ "$label" =~ ^(a|arch|architecture)$ ]]; then elif [[ "$label" =~ ^(a|arch|architecture)$ ]]; then
if [ "$value" = "$local_arch" ]; then if [ "$value" = "$YADM_ARCH" ]; then
score=$((score + 1)) score=$((score + 1))
else else
score=0 score=0
return return
fi fi
elif [[ "$label" =~ ^(o|os)$ ]]; then elif [[ "$label" =~ ^(o|os)$ ]]; then
if [ "$value" = "$local_system" ]; then if [ "$value" = "$YADM_OS" ]; then
score=$((score + 2)) score=$((score + 2))
else else
score=0 score=0
return return
fi fi
elif [[ "$label" =~ ^(d|distro)$ ]]; then elif [[ "$label" =~ ^(d|distro)$ ]]; then
if [ "$value" = "$local_distro" ]; then if [ "$value" = "$YADM_DISTRO" ]; then
score=$((score + 4)) score=$((score + 4))
else else
score=0 score=0
return return
fi fi
elif [[ "$label" =~ ^(c|class)$ ]]; then elif [[ "$label" =~ ^(c|class)$ ]]; then
if [ "$value" = "$local_class" ]; then if [ "$value" = "$YADM_CLASS" ]; then
score=$((score + 8)) score=$((score + 8))
else else
score=0 score=0
return return
fi fi
elif [[ "$label" =~ ^(h|hostname)$ ]]; then elif [[ "$label" =~ ^(h|hostname)$ ]]; then
if [ "$value" = "$local_host" ]; then if [ "$value" = "$YADM_HOSTNAME" ]; then
score=$((score + 16)) score=$((score + 16))
else else
score=0 score=0
return return
fi fi
elif [[ "$label" =~ ^(u|user)$ ]]; then elif [[ "$label" =~ ^(u|user)$ ]]; then
if [ "$value" = "$local_user" ]; then if [ "$value" = "$YADM_USER" ]; then
score=$((score + 32)) score=$((score + 32))
else else
score=0 score=0
@ -367,7 +368,7 @@ BEGIN {
c["class"] = class c["class"] = class
c["arch"] = arch c["arch"] = arch
c["os"] = os c["os"] = os
c["hostname"] = host c["hostname"] = hostname
c["user"] = user c["user"] = user
c["distro"] = distro c["distro"] = distro
c["source"] = source c["source"] = source
@ -431,12 +432,12 @@ function conditions() {
EOF EOF
"${AWK_PROGRAM[0]}" \ "${AWK_PROGRAM[0]}" \
-v class="$local_class" \ -v class="$YADM_CLASS" \
-v arch="$local_arch" \ -v arch="$YADM_ARCH" \
-v os="$local_system" \ -v os="$YADM_OS" \
-v host="$local_host" \ -v hostname="$YADM_HOSTNAME" \
-v user="$local_user" \ -v user="$YADM_USER" \
-v distro="$local_distro" \ -v distro="$YADM_DISTRO" \
-v source="$input" \ -v source="$input" \
-v source_dir="$(dirname "$input")" \ -v source_dir="$(dirname "$input")" \
"$awk_pgm" \ "$awk_pgm" \
@ -450,13 +451,7 @@ function template_j2cli() {
output="$2" output="$2"
temp_file="${output}.$$.$RANDOM" temp_file="${output}.$$.$RANDOM"
YADM_CLASS="$local_class" \ YADM_SOURCE="$input" \
YADM_ARCH="$local_arch" \
YADM_OS="$local_system" \
YADM_HOSTNAME="$local_host" \
YADM_USER="$local_user" \
YADM_DISTRO="$local_distro" \
YADM_SOURCE="$input" \
"$J2CLI_PROGRAM" "$input" -o "$temp_file" "$J2CLI_PROGRAM" "$input" -o "$temp_file"
move_file "$input" "$output" "$temp_file" move_file "$input" "$output" "$temp_file"
@ -467,13 +462,7 @@ function template_envtpl() {
output="$2" output="$2"
temp_file="${output}.$$.$RANDOM" temp_file="${output}.$$.$RANDOM"
YADM_CLASS="$local_class" \ YADM_SOURCE="$input" \
YADM_ARCH="$local_arch" \
YADM_OS="$local_system" \
YADM_HOSTNAME="$local_host" \
YADM_USER="$local_user" \
YADM_DISTRO="$local_distro" \
YADM_SOURCE="$input" \
"$ENVTPL_PROGRAM" --keep-template "$input" -o "$temp_file" "$ENVTPL_PROGRAM" --keep-template "$input" -o "$temp_file"
move_file "$input" "$output" "$temp_file" move_file "$input" "$output" "$temp_file"
@ -484,14 +473,8 @@ function template_esh() {
output="$2" output="$2"
temp_file="${output}.$$.$RANDOM" temp_file="${output}.$$.$RANDOM"
"$ESH_PROGRAM" -o "$temp_file" "$input" \ YADM_SOURCE="$input" \
YADM_CLASS="$local_class" \ "$ESH_PROGRAM" -o "$temp_file" "$input"
YADM_ARCH="$local_arch" \
YADM_OS="$local_system" \
YADM_HOSTNAME="$local_host" \
YADM_USER="$local_user" \
YADM_DISTRO="$local_distro" \
YADM_SOURCE="$input"
move_file "$input" "$output" "$temp_file" move_file "$input" "$output" "$temp_file"
} }
@ -520,13 +503,7 @@ function alt() {
parse_encrypt parse_encrypt
# gather values for processing alternates # gather values for processing alternates
local local_class set_alt_values
local local_arch
local local_system
local local_host
local local_user
local local_distro
set_local_alt_values
# only be noisy if the "alt" command was run directly # only be noisy if the "alt" command was run directly
local loud= local loud=
@ -618,32 +595,42 @@ function remove_stale_links() {
fi fi
} }
function set_local_alt_values() { function set_alt_values() {
local_class="$(config local.class)" [[ $ALT_VALUES_SET = 1 ]] && return
ALT_VALUES_SET=1
local_arch="$(config local.arch)" export YADM_CLASS
if [ -z "$local_arch" ] ; then export YADM_ARCH
local_arch=$(uname -m) export YADM_OS
export YADM_HOSTNAME
export YADM_USER
export YADM_DISTRO
YADM_CLASS="$(config local.class)"
YADM_ARCH="$(config local.arch)"
if [ -z "$YADM_ARCH" ] ; then
YADM_ARCH=$(uname -m)
fi fi
local_system="$(config local.os)" YADM_OS="$(config local.os)"
if [ -z "$local_system" ] ; then if [ -z "$YADM_OS" ] ; then
local_system="$OPERATING_SYSTEM" YADM_OS="$OPERATING_SYSTEM"
fi fi
local_host="$(config local.hostname)" YADM_HOSTNAME="$(config local.hostname)"
if [ -z "$local_host" ] ; then if [ -z "$YADM_HOSTNAME" ] ; then
local_host=$(uname -n) YADM_HOSTNAME=$(uname -n)
local_host=${local_host%%.*} # trim any domain from hostname YADM_HOSTNAME=${YADM_HOSTNAME%%.*} # trim any domain from hostname
fi fi
local_user="$(config local.user)" YADM_USER="$(config local.user)"
if [ -z "$local_user" ] ; then if [ -z "$YADM_USER" ] ; then
local_user=$(id -u -n) YADM_USER=$(id -u -n)
fi fi
local_distro="$(query_distro)" YADM_DISTRO="$(query_distro)"
} }
@ -715,6 +702,8 @@ function bootstrap() {
# GIT_DIR should not be set for user's bootstrap code # GIT_DIR should not be set for user's bootstrap code
unset GIT_DIR unset GIT_DIR
set_alt_values
echo "Executing $YADM_BOOTSTRAP" echo "Executing $YADM_BOOTSTRAP"
exec "$YADM_BOOTSTRAP" exec "$YADM_BOOTSTRAP"
@ -1787,6 +1776,8 @@ function invoke_hook() {
export -f unix_path export -f unix_path
export -f mixed_path export -f mixed_path
set_alt_values
"$hook_command" "$hook_command"
hook_status=$? hook_status=$?

9
yadm.1
View File

@ -112,7 +112,9 @@ to "false".
.B bootstrap .B bootstrap
Execute Execute
.I $HOME/.config/yadm/bootstrap .I $HOME/.config/yadm/bootstrap
if it exists. if it exists. The variables that are set when processing Jinja or ESH templates
(see the TEMPLATES section) are set in the environment (except for
.IR YADM_SOURCE ).
.TP .TP
.BI clone " url .BI clone " url
Clone a remote repository for tracking dotfiles. Clone a remote repository for tracking dotfiles.
@ -876,7 +878,10 @@ will never be run. This allows one to "short-circuit" any operation using a
.I pre_ .I pre_
hook. hook.
Hooks have the following environment variables available to them at runtime: Hooks have the following variables, plus the variables set when processing
Jinja or ESH templates (see the TEMPLATES section), available to them as
environment variables at runtime (except for
.IR YADM_SOURCE ).
.TP .TP
.B YADM_HOOK_COMMAND .B YADM_HOOK_COMMAND
The command which triggered the hook The command which triggered the hook