diff --git a/test/106_accept_config.bats b/test/106_accept_config.bats index 3d4a34a..f5311f6 100644 --- a/test/106_accept_config.bats +++ b/test/106_accept_config.bats @@ -129,3 +129,74 @@ setup() { return 1 fi } + +@test "Command 'config' (local read)" { + echo " + When 'config' command is provided, + and an attribute is provided + and the attribute is configured + and the attribute is local.* + Fetch the value from the repo config + Report the requested value + Exit with 0 + " + + #; write local attributes + build_repo + for loption in class os host user; do + GIT_DIR="$T_DIR_REPO" git config "local.$loption" "custom_$loption" + done + + #; run config + for loption in class os host user; do + run "${T_YADM_Y[@]}" config "local.$loption" + #; validate status and output + [ $status -eq 0 ] + if [ "$output" != "custom_$loption" ]; then + echo "ERROR: Incorrect value returned. Expected 'custom_$loption', got '$output'" + return 1 + fi + done + +} + +@test "Command 'config' (local write)" { + echo " + When 'config' command is provided, + and an attribute is provided + and a value is provided + and the attribute is local.* + Report no output + Write the value to the repo config + Exit with 0 + " + + build_repo + local expected + local linecount + expected="[local]\n" + linecount=1 + for loption in class os host user; do + #; update expected + expected="$expected\t$loption = custom_$loption\n" + ((linecount+=1)) + #; write local attributes + run "${T_YADM_Y[@]}" config "local.$loption" "custom_$loption" + + #; validate status and output + [ $status -eq 0 ] + [ "$output" = "" ] + done + + #; validate data + local config + config=$(tail "-$linecount" "$T_DIR_REPO/config") + expected=$(echo -ne "$expected") + if [ "$config" != "$expected" ]; then + echo "ERROR: Config does not match expected" + echo -e "$config" + echo -e "EXPECTED:\n$expected" + return 1 + fi + +} diff --git a/test/108_accept_alt.bats b/test/108_accept_alt.bats index a744779..b904ac7 100644 --- a/test/108_accept_alt.bats +++ b/test/108_accept_alt.bats @@ -290,13 +290,13 @@ function test_alt() { echo " When the command 'alt' is provided and file matches only ##SYSTEM - after setting alt.os + after setting local.os Report the linking Verify correct file is linked Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.os custom_system + GIT_DIR="$T_DIR_REPO" git config local.os custom_system test_alt 'override_system' 'false' '' } @@ -304,13 +304,13 @@ function test_alt() { echo " When the command 'alt' is provided and file matches only ##SYSTEM.HOST - after setting alt.host + after setting local.host Report the linking Verify correct file is linked Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.host custom_host + GIT_DIR="$T_DIR_REPO" git config local.host custom_host test_alt 'override_host' 'false' '' } @@ -318,12 +318,12 @@ function test_alt() { echo " When the command 'alt' is provided and file matches only ##SYSTEM.HOST.USER - after setting alt.user + after setting local.user Report the linking Verify correct file is linked Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.user custom_user + GIT_DIR="$T_DIR_REPO" git config local.user custom_user test_alt 'override_user' 'false' '' } diff --git a/test/111_accept_wildcard_alt.bats b/test/111_accept_wildcard_alt.bats index c181086..dcae81f 100644 --- a/test/111_accept_wildcard_alt.bats +++ b/test/111_accept_wildcard_alt.bats @@ -74,7 +74,7 @@ function test_alt() { Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.class set_class + GIT_DIR="$T_DIR_REPO" git config local.class set_class for WILD_C in 'local' 'wild'; do local c_base="wild-class-$WILD_C" @@ -118,7 +118,7 @@ function test_alt() { Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.class set_class + GIT_DIR="$T_DIR_REPO" git config local.class set_class for WILD_C in 'local' 'wild'; do local c_base="wild-class-system-$WILD_C" @@ -170,7 +170,7 @@ function test_alt() { Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.class set_class + GIT_DIR="$T_DIR_REPO" git config local.class set_class for WILD_C in 'local' 'wild'; do local c_base="wild-class-system-host-$WILD_C" @@ -199,7 +199,7 @@ function test_alt() { Exit with 0 " - git config --file="$T_YADM_CONFIG" alt.class set_class + GIT_DIR="$T_DIR_REPO" git config local.class set_class for WILD_C in 'local' 'wild'; do local c_base="wild-class-system-host-user-$WILD_C" diff --git a/yadm b/yadm index 1b2ce85..7cb033d 100755 --- a/yadm +++ b/yadm @@ -114,26 +114,26 @@ function alt() { require_repo - match_class="$(config alt.class)" + match_class="$(config local.class)" if [ -z "$match_class" ] ; then match_class="()" fi match_class="(%|$match_class)" - match_system="$(config alt.os)" + match_system="$(config local.os)" if [ -z "$match_system" ] ; then match_system=$(uname -s) fi match_system="(%|$match_system)" - match_host="$(config alt.host)" + match_host="$(config local.host)" if [ -z "$match_host" ] ; then match_host=$(hostname) match_host=${match_host%%.*} #; trim any domain from hostname fi match_host="(%|$match_host)" - match_user="$(config alt.user)" + match_user="$(config local.user)" if [ -z "$match_user" ] ; then match_user=$(id -u -n) fi @@ -275,15 +275,21 @@ EOF function config() { + use_repo_config=0 + local_options="^local\.(class|os|host|user)$" + for option in "$@"; do + [[ "$option" =~ $local_options ]] && use_repo_config=1 + done + if [ -z "$*" ] ; then #; with no parameters, provide some helpful documentation cat << EOF yadm supports the following configurations: - alt.class - alt.host - alt.os - alt.user + local.class + local.host + local.os + local.user yadm.auto-alt yadm.auto-perms yadm.git-program @@ -296,12 +302,20 @@ Please read the CONFIGURATION section in the man page for more details about configurations, and how to adjust them. EOF + elif [ "$use_repo_config" -eq 1 ]; then + + require_repo + + #; operate on the yadm repo's configuration file + #; this is always local to the machine + git config --local "$@" + + CHANGES_POSSIBLE=1 + else #; operate on the yadm configuration file git config --file="$(mixed_path "$YADM_CONFIG")" "$@" - CHANGES_POSSIBLE=1 - fi }