diff --git a/yadm b/yadm index c97bcd4..4e110da 100755 --- a/yadm +++ b/yadm @@ -33,6 +33,9 @@ GPG_PROGRAM="gpg" GIT_PROGRAM="git" LS_PROGRAM="/bin/ls" +#; flag causing path translations with cygpath +USE_CYGPATH=0 + #; flag when something may have changes (which prompts auto actions to be performed) CHANGES_POSSIBLE=0 @@ -113,7 +116,7 @@ function alt() { match="^(.+)##($match_system|$match_system.$match_host|$match_system.$match_host.$match_user|())$" #; process relative to YADM_WORK - YADM_WORK=$("$GIT_PROGRAM" config core.worktree) + YADM_WORK=$(unix_path "$("$GIT_PROGRAM" config core.worktree)") cd "$YADM_WORK" || { debug "Alternates not processed, unable to cd to $YADM_WORK" return @@ -201,7 +204,7 @@ function config() { echo TODO: Print help about available yadm configurations else #; operate on the yadm configuration file - git config --file="$YADM_CONFIG" "$@" + git config --file="$(mixed_path "$YADM_CONFIG")" "$@" fi } @@ -211,7 +214,7 @@ function decrypt() { require_gpg require_archive - YADM_WORK=$("$GIT_PROGRAM" config core.worktree) + YADM_WORK=$(unix_path "$("$GIT_PROGRAM" config core.worktree)") if [ "$DO_LIST" = "YES" ] ; then tar_option="t" @@ -237,7 +240,7 @@ function encrypt() { require_ls #; process relative to YADM_WORK - YADM_WORK=$("$GIT_PROGRAM" config core.worktree) + YADM_WORK=$(unix_path "$("$GIT_PROGRAM" config core.worktree)") cd "$YADM_WORK" || { debug "Encryption not processed, unable to cd to $YADM_WORK" return @@ -274,14 +277,14 @@ function encrypt() { fi #; offer to add YADM_ARCHIVE if untracked - archive_status=$("$GIT_PROGRAM" status --porcelain -uall "$YADM_ARCHIVE" 2>/dev/null) + archive_status=$("$GIT_PROGRAM" status --porcelain -uall "$(mixed_path "$YADM_ARCHIVE")" 2>/dev/null) archive_regex="^\?\?" if [[ $archive_status =~ $archive_regex ]] ; then echo "It appears that $YADM_ARCHIVE is not tracked by yadm's repository." echo "Would you like to add it now? (y/n)" read -r answer if [[ $answer =~ ^[yY]$ ]] ; then - "$GIT_PROGRAM" add "$YADM_ARCHIVE" + "$GIT_PROGRAM" add "$(mixed_path "$YADM_ARCHIVE")" fi fi @@ -354,7 +357,7 @@ function init() { #; init a new bare repo debug "Init new repo" - "$GIT_PROGRAM" init --shared=0600 --bare "$YADM_REPO" "$@" + "$GIT_PROGRAM" init --shared=0600 --bare "$(mixed_path "$YADM_REPO")" "$@" configure_repo CHANGES_POSSIBLE=1 @@ -367,7 +370,7 @@ function list() { #; process relative to YADM_WORK when --all is specified if [ -n "$LIST_ALL" ] ; then - YADM_WORK=$("$GIT_PROGRAM" config core.worktree) + YADM_WORK=$(unix_path "$("$GIT_PROGRAM" config core.worktree)") cd "$YADM_WORK" || { debug "List not processed, unable to cd to $YADM_WORK" return @@ -386,7 +389,7 @@ function perms() { #; TODO: prevent repeats in the files changed #; process relative to YADM_WORK - YADM_WORK=$("$GIT_PROGRAM" config core.worktree) + YADM_WORK=$(unix_path "$("$GIT_PROGRAM" config core.worktree)") cd "$YADM_WORK" || { debug "Perms not processed, unable to cd to $YADM_WORK" return @@ -507,7 +510,8 @@ function configure_paths() { fi #; use the yadm repo for all git operations - export GIT_DIR="$YADM_REPO" + GIT_DIR=$(mixed_path "$YADM_REPO") + export GIT_DIR } @@ -519,7 +523,7 @@ function configure_repo() { "$GIT_PROGRAM" config core.bare 'false' #; set the worktree for the yadm repo - "$GIT_PROGRAM" config core.worktree "$YADM_WORK" + "$GIT_PROGRAM" config core.worktree "$(mixed_path "$YADM_WORK")" #; by default, do not show untracked files and directories "$GIT_PROGRAM" config status.showUntrackedFiles no @@ -615,10 +619,42 @@ function require_ls() { fi } +#; ****** Directory tranlations ****** + +function test_cygwin() { + case "$(uname -s)" in + CYGWIN*) + git_version=$(git --version 2>/dev/null) + if [[ "$git_version" =~ windows ]] ; then + USE_CYGPATH=1 + fi + ;; + *) + ;; + esac +} +function unix_path() { + #; for paths used by bash/yadm + if [ "$USE_CYGPATH" = "1" ] ; then + cygpath -u "$1" + else + echo "$1" + fi +} +function mixed_path() { + #; for paths used by Git + if [ "$USE_CYGPATH" = "1" ] ; then + cygpath -m "$1" + else + echo "$1" + fi +} + #; ****** Main processing (when not unit testing) ****** if [ "$YADM_TEST" != 1 ] ; then process_global_args "$@" + test_cygwin configure_paths main "${MAIN_ARGS[@]}" fi