Fixed #21 for missing readlink on MacOS X & BSD
This commit is contained in:
parent
c289e71548
commit
9815a7bff3
|
@ -31,6 +31,7 @@ UNDER WORK
|
|||
RECENT CHANGES
|
||||
--------------
|
||||
|
||||
- Fixed #21 by adding portable shell readlink / realpath from https://github.com/mkropat/sh-realpath
|
||||
- Added detection of osync.sh script in osync-batch.sh to overcome mising path in crontab
|
||||
- Fixed osync-batch.sh script when osync is in executable path like /usr/local/bin
|
||||
- Fixed multiple keep logging messages since sleep time between commands has been lowered under a second
|
||||
|
|
80
osync.sh
80
osync.sh
|
@ -4,7 +4,7 @@ PROGRAM="Osync" # Rsync based two way sync engine with fault tolerance
|
|||
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
||||
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
||||
PROGRAM_VERSION=1.00pre
|
||||
PROGRAM_BUILD=2004201501
|
||||
PROGRAM_BUILD=1805201501
|
||||
|
||||
## type doesn't work on platforms other than linux (bash). If if doesn't work, always assume output is not a zero exitcode
|
||||
if ! type -p "$BASH" > /dev/null
|
||||
|
@ -615,6 +615,80 @@ function CheckConnectivity3rdPartyHosts
|
|||
fi
|
||||
}
|
||||
|
||||
############################################################################################
|
||||
|
||||
### realpath.sh implementation from https://github.com/mkropat/sh-realpath
|
||||
|
||||
realpath() {
|
||||
canonicalize_path "$(resolve_symlinks "$1")"
|
||||
}
|
||||
|
||||
resolve_symlinks() {
|
||||
_resolve_symlinks "$1"
|
||||
}
|
||||
|
||||
_resolve_symlinks() {
|
||||
_assert_no_path_cycles "$@" || return
|
||||
|
||||
local dir_context path
|
||||
path=$(readlink -- "$1")
|
||||
if [ $? -eq 0 ]; then
|
||||
dir_context=$(dirname -- "$1")
|
||||
_resolve_symlinks "$(_prepend_dir_context_if_necessary "$dir_context" "$path")" "$@"
|
||||
else
|
||||
printf '%s\n' "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
_prepend_dir_context_if_necessary() {
|
||||
if [ "$1" = . ]; then
|
||||
printf '%s\n' "$2"
|
||||
else
|
||||
_prepend_path_if_relative "$1" "$2"
|
||||
fi
|
||||
}
|
||||
|
||||
_prepend_path_if_relative() {
|
||||
case "$2" in
|
||||
/* ) printf '%s\n' "$2" ;;
|
||||
* ) printf '%s\n' "$1/$2" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
_assert_no_path_cycles() {
|
||||
local target path
|
||||
|
||||
target=$1
|
||||
shift
|
||||
|
||||
for path in "$@"; do
|
||||
if [ "$path" = "$target" ]; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
canonicalize_path() {
|
||||
if [ -d "$1" ]; then
|
||||
_canonicalize_dir_path "$1"
|
||||
else
|
||||
_canonicalize_file_path "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
_canonicalize_dir_path() {
|
||||
(cd "$1" 2>/dev/null && pwd -P)
|
||||
}
|
||||
|
||||
_canonicalize_file_path() {
|
||||
local dir file
|
||||
dir=$(dirname -- "$1")
|
||||
file=$(basename -- "$1")
|
||||
(cd "$dir" 2>/dev/null && printf '%s/%s\n' "$(pwd -P)" "$file")
|
||||
}
|
||||
|
||||
### Specfic Osync function
|
||||
|
||||
function CreateOsyncDirs
|
||||
{
|
||||
if ! [ -d "$MASTER_STATE_DIR" ]
|
||||
|
@ -647,8 +721,8 @@ function CreateOsyncDirs
|
|||
|
||||
function CheckMasterSlaveDirs
|
||||
{
|
||||
MASTER_SYNC_DIR_CANN=$(readlink -f "$MASTER_SYNC_DIR")
|
||||
SLAVE_SYNC_DIR_CANN=$(readlink -f "$SLAVE_SYNC_DIR")
|
||||
MASTER_SYNC_DIR_CANN=$(realpath "$MASTER_SYNC_DIR")
|
||||
SLAVE_SYNC_DIR_CANN=$(realpath "$SLAVE_SYNC_DIR")
|
||||
|
||||
if [ "$REMOTE_SYNC" != "yes" ]
|
||||
then
|
||||
|
|
Loading…
Reference in New Issue