Support XDG_DATA_HOME (#208)
* Create a YADM_DATA base (that is the source for repo & archive) * Add --yadm-data to override * Default YADM_DATA will be determined by XDG_DATA_HOME
This commit is contained in:
parent
c79a67208c
commit
fc66b6b71b
5 changed files with 53 additions and 26 deletions
|
@ -140,6 +140,7 @@ def supported_switches():
|
|||
'--yadm-archive',
|
||||
'--yadm-bootstrap',
|
||||
'--yadm-config',
|
||||
'--yadm-data',
|
||||
'--yadm-dir',
|
||||
'--yadm-encrypt',
|
||||
'--yadm-repo',
|
||||
|
|
|
@ -70,7 +70,7 @@ def run_test(runner, paths, args, expected_matches, expected_code=0):
|
|||
script = f"""
|
||||
YADM_TEST=1 HOME="{HOME}" source {paths.pgm}
|
||||
process_global_args {argstring}
|
||||
HOME="{HOME}" set_yadm_dir
|
||||
HOME="{HOME}" set_yadm_dirs
|
||||
configure_paths
|
||||
declare -p | grep -E '(YADM|GIT)_'
|
||||
"""
|
||||
|
|
|
@ -13,7 +13,7 @@ def test_get_cipher(runner, paths, condition):
|
|||
script = f"""
|
||||
YADM_TEST=1 source {paths.pgm}
|
||||
YADM_DIR="{paths.yadm}"
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
_get_cipher test-archive
|
||||
echo "output_archive:$output_archive"
|
||||
|
@ -37,7 +37,7 @@ def test_encrypt_decrypt(runner, paths, cipher, mode):
|
|||
script = f"""
|
||||
YADM_TEST=1 source {paths.pgm}
|
||||
YADM_DIR="{paths.yadm}"
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
function mock_openssl() {{ echo openssl $*; }}
|
||||
function mock_gpg() {{ echo gpg $*; }}
|
||||
|
@ -71,7 +71,7 @@ def test_get_openssl_ciphername(runner, paths, condition):
|
|||
script = f"""
|
||||
YADM_TEST=1 source {paths.pgm}
|
||||
YADM_DIR="{paths.yadm}"
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
result=$(_get_openssl_ciphername)
|
||||
echo "result:$result"
|
||||
|
@ -95,7 +95,7 @@ def test_set_openssl_options(runner, paths, condition):
|
|||
script = f"""
|
||||
YADM_TEST=1 source {paths.pgm}
|
||||
YADM_DIR="{paths.yadm}"
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
function _get_openssl_ciphername() {{ echo "testcipher"; }}
|
||||
_set_openssl_options
|
||||
|
@ -119,7 +119,7 @@ def test_set_gpg_options(runner, paths, recipient):
|
|||
script = f"""
|
||||
YADM_TEST=1 source {paths.pgm}
|
||||
YADM_DIR="{paths.yadm}"
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
_set_gpg_options
|
||||
echo "result:${{GPG_OPTS[@]}}"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
"""Unit tests: set_yadm_dir"""
|
||||
"""Unit tests: set_yadm_dirs"""
|
||||
import pytest
|
||||
|
||||
|
||||
|
@ -6,8 +6,8 @@ import pytest
|
|||
'condition',
|
||||
['basic', 'override', 'xdg_config_home'],
|
||||
)
|
||||
def test_set_yadm_dir(runner, yadm, condition):
|
||||
"""Test set_yadm_dir"""
|
||||
def test_set_yadm_dirs(runner, yadm, condition):
|
||||
"""Test set_yadm_dirs"""
|
||||
setup = ''
|
||||
if condition == 'override':
|
||||
setup = 'YADM_DIR=/override'
|
||||
|
@ -17,7 +17,7 @@ def test_set_yadm_dir(runner, yadm, condition):
|
|||
HOME=/testhome
|
||||
YADM_TEST=1 source {yadm}
|
||||
{setup}
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
echo "$YADM_DIR"
|
||||
"""
|
||||
run = runner(command=['bash'], inp=script)
|
||||
|
|
58
yadm
58
yadm
|
@ -24,17 +24,20 @@ VERSION=2.5.0
|
|||
|
||||
YADM_WORK="$HOME"
|
||||
YADM_DIR=
|
||||
YADM_DATA=
|
||||
YADM_LEGACY_DIR="${HOME}/.yadm"
|
||||
|
||||
# these are the default paths relative to YADM_DIR
|
||||
YADM_REPO="repo.git"
|
||||
YADM_CONFIG="config"
|
||||
YADM_ENCRYPT="encrypt"
|
||||
YADM_ARCHIVE="archive"
|
||||
YADM_BOOTSTRAP="bootstrap"
|
||||
YADM_HOOKS="hooks"
|
||||
YADM_ALT="alt"
|
||||
|
||||
# these are the default paths relative to YADM_DATA
|
||||
YADM_REPO="repo.git"
|
||||
YADM_ARCHIVE="archive"
|
||||
|
||||
HOOK_COMMAND=""
|
||||
FULL_COMMAND=""
|
||||
|
||||
|
@ -87,8 +90,9 @@ function main() {
|
|||
done
|
||||
FULL_COMMAND="${_fc[*]}"
|
||||
|
||||
# create the YADM_DIR if it doesn't exist yet
|
||||
[ -d "$YADM_DIR" ] || mkdir -p "$YADM_DIR"
|
||||
# create the YADM_DIR & YADM_DATA if they doesn't exist yet
|
||||
[ -d "$YADM_DIR" ] || mkdir -p "$YADM_DIR"
|
||||
[ -d "$YADM_DATA" ] || mkdir -p "$YADM_DATA"
|
||||
|
||||
# parse command line arguments
|
||||
local retval=0
|
||||
|
@ -1280,6 +1284,7 @@ function introspect_switches() {
|
|||
--yadm-archive
|
||||
--yadm-bootstrap
|
||||
--yadm-config
|
||||
--yadm-data
|
||||
--yadm-dir
|
||||
--yadm-encrypt
|
||||
--yadm-repo
|
||||
|
@ -1505,6 +1510,13 @@ function process_global_args() {
|
|||
YADM_DIR="$2"
|
||||
shift
|
||||
;;
|
||||
--yadm-data) # override the standard YADM_DATA
|
||||
if [[ ! "$2" =~ ^/ ]] ; then
|
||||
error_out "You must specify a fully qualified yadm data directory"
|
||||
fi
|
||||
YADM_DATA="$2"
|
||||
shift
|
||||
;;
|
||||
--yadm-repo) # override the standard YADM_REPO
|
||||
if [[ ! "$2" =~ ^/ ]] ; then
|
||||
error_out "You must specify a fully qualified repo path"
|
||||
|
@ -1549,17 +1561,27 @@ function process_global_args() {
|
|||
|
||||
}
|
||||
|
||||
function set_yadm_dir() {
|
||||
function set_yadm_dirs() {
|
||||
|
||||
# only resolve YADM_DATA if it hasn't been provided already
|
||||
if [ -z "$YADM_DATA" ]; then
|
||||
local base_yadm_data
|
||||
base_yadm_data="$XDG_DATA_HOME"
|
||||
if [[ ! "$base_yadm_data" =~ ^/ ]] ; then
|
||||
base_yadm_data="${HOME}/.local/share"
|
||||
fi
|
||||
YADM_DATA="${base_yadm_data}/yadm"
|
||||
fi
|
||||
|
||||
# only resolve YADM_DIR if it hasn't been provided already
|
||||
[ -n "$YADM_DIR" ] && return
|
||||
|
||||
local base_yadm_dir
|
||||
base_yadm_dir="$XDG_CONFIG_HOME"
|
||||
if [[ ! "$base_yadm_dir" =~ ^/ ]] ; then
|
||||
base_yadm_dir="${HOME}/.config"
|
||||
if [ -z "$YADM_DIR" ]; then
|
||||
local base_yadm_dir
|
||||
base_yadm_dir="$XDG_CONFIG_HOME"
|
||||
if [[ ! "$base_yadm_dir" =~ ^/ ]] ; then
|
||||
base_yadm_dir="${HOME}/.config"
|
||||
fi
|
||||
YADM_DIR="${base_yadm_dir}/yadm"
|
||||
fi
|
||||
YADM_DIR="${base_yadm_dir}/yadm"
|
||||
|
||||
issue_legacy_path_warning
|
||||
|
||||
|
@ -1629,15 +1651,17 @@ LEGACY_WARNING_ISSUED=1
|
|||
|
||||
function configure_paths() {
|
||||
|
||||
# change all paths to be relative to YADM_DIR
|
||||
YADM_REPO="$YADM_DIR/$YADM_REPO"
|
||||
# change paths to be relative to YADM_DIR
|
||||
YADM_CONFIG="$YADM_DIR/$YADM_CONFIG"
|
||||
YADM_ENCRYPT="$YADM_DIR/$YADM_ENCRYPT"
|
||||
YADM_ARCHIVE="$YADM_DIR/$YADM_ARCHIVE"
|
||||
YADM_BOOTSTRAP="$YADM_DIR/$YADM_BOOTSTRAP"
|
||||
YADM_HOOKS="$YADM_DIR/$YADM_HOOKS"
|
||||
YADM_ALT="$YADM_DIR/$YADM_ALT"
|
||||
|
||||
# change paths to be relative to YADM_DATA
|
||||
YADM_REPO="$YADM_DATA/$YADM_REPO"
|
||||
YADM_ARCHIVE="$YADM_DATA/$YADM_ARCHIVE"
|
||||
|
||||
# independent overrides for paths
|
||||
if [ -n "$YADM_OVERRIDE_REPO" ]; then
|
||||
YADM_REPO="$YADM_OVERRIDE_REPO"
|
||||
|
@ -1757,6 +1781,7 @@ function invoke_hook() {
|
|||
# expose some internal data to all hooks
|
||||
YADM_HOOK_COMMAND=$HOOK_COMMAND
|
||||
YADM_HOOK_DIR=$YADM_DIR
|
||||
YADM_HOOK_DATA=$YADM_DATA
|
||||
YADM_HOOK_EXIT=$exit_status
|
||||
YADM_HOOK_FULL_COMMAND=$FULL_COMMAND
|
||||
YADM_HOOK_REPO=$YADM_REPO
|
||||
|
@ -1768,6 +1793,7 @@ function invoke_hook() {
|
|||
|
||||
export YADM_HOOK_COMMAND
|
||||
export YADM_HOOK_DIR
|
||||
export YADM_HOOK_DATA
|
||||
export YADM_HOOK_EXIT
|
||||
export YADM_HOOK_FULL_COMMAND
|
||||
export YADM_HOOK_REPO
|
||||
|
@ -2182,7 +2208,7 @@ if [ "$YADM_TEST" != 1 ] ; then
|
|||
process_global_args "$@"
|
||||
set_operating_system
|
||||
set_awk
|
||||
set_yadm_dir
|
||||
set_yadm_dirs
|
||||
configure_paths
|
||||
main "${MAIN_ARGS[@]}"
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue