|
|
@@ -5,8 +5,9 @@ overlaycached(){
|
|
|
|
|
|
MOVE=false
|
|
|
SSHFS=""
|
|
|
- DEPTH=1
|
|
|
+ DEPTH=2
|
|
|
WRITE_THROUGH=false
|
|
|
+ SSHFS_CMD="sshfs"
|
|
|
while getopts ":dmS:D:-" opt; do
|
|
|
case $opt in
|
|
|
d )
|
|
|
@@ -58,7 +59,6 @@ USAGEEOF
|
|
|
CLEANUP_DIRS=(
|
|
|
"$WORK_DIR"
|
|
|
)
|
|
|
- SSHFS_CMD="sshfs"
|
|
|
if $MOVE; then
|
|
|
LOWER_DIR="$(mktemp -d)"
|
|
|
set -x
|
|
|
@@ -66,9 +66,12 @@ USAGEEOF
|
|
|
set +x
|
|
|
elif [ ! -z "$SSHFS" ]; then
|
|
|
LOWER_DIR="$(mktemp -d)"
|
|
|
- SSHFS_OPTS="-oauto_cache,reconnect,no_readahead,idmap=user"
|
|
|
- [ ! -z "$SUDO_USER" ] && SSHFS_CMD="sudo -u $SUDO_USER $SSHFS_CMD"
|
|
|
- [ ! -z "$SUDO_USER" ] && chmod ogu+rwx "$LOWER_DIR"
|
|
|
+ SSHFS_OPTS="-oauto_cache,reconnect,no_readahead,allow_other"
|
|
|
+# if [ ! -z "$SUDO_USER" ]; then
|
|
|
+# SSHFS_CMD="sudo -u $SUDO_USER $SSHFS_CMD"
|
|
|
+# chown "$SUDO_UID:$SUDO_GID" "$LOWER_DIR" "$WORK_DIR" "$UPPER_DIR"
|
|
|
+# chmod ogu+rx "$LOWER_DIR" "$WORK_DIR" "$UPPER_DIR"
|
|
|
+# fi
|
|
|
set -x
|
|
|
$SSHFS_CMD "$SSHFS" "$LOWER_DIR" "${SSHFS_OPTS}"
|
|
|
set +x
|
|
|
@@ -84,11 +87,14 @@ USAGEEOF
|
|
|
echo "$DIR $EVT $FILE"
|
|
|
[[ "$EVT" =~ "ISDIR" ]] && continue
|
|
|
RELPATH="$(realpath --relative-to="$MOUNT_DIR" "$DIR")/$FILE"
|
|
|
- [ -f "$UPPER_DIR/$RELPATH" ] || {
|
|
|
- echo cat "$LOWER_DIR/$RELPATH" ">" "$MOUNT_DIR/$RELPATH"
|
|
|
- cat "$LOWER_DIR/$RELPATH" > "$MOUNT_DIR/$RELPATH"
|
|
|
+
|
|
|
+ [[ "$EVT" =~ "CLOSE_NOWRITE" ]] && [ ! -f "$UPPER_DIR/$RELPATH" ] && {
|
|
|
+ echo touch "$MOUNT_DIR/$RELPATH"
|
|
|
+ touch -c "$MOUNT_DIR/$RELPATH"
|
|
|
+ touch -c -r "$LOWER_DIR/$RELPATH" "$MOUNT_DIR/$RELPATH"
|
|
|
}
|
|
|
- $WRITE_THROUGH && [ ! -f "$LOWER_DIR/$RELPATH" ] && {
|
|
|
+
|
|
|
+ $WRITE_THROUGH && [[ ! "$EVT" =~ "CLOSE_NOWRITE" ]] && [ ! -f "$LOWER_DIR/$RELPATH" ] && {
|
|
|
echo cat "$UPPER_DIR/$RELPATH" ">" "$LOWER_DIR/$RELPATH"
|
|
|
cat "$UPPER_DIR/$RELPATH" > "$LOWER_DIR/$RELPATH"
|
|
|
}
|
|
|
@@ -97,16 +103,17 @@ USAGEEOF
|
|
|
|
|
|
cleanup(){
|
|
|
echo "Cleaning up mount points...."
|
|
|
+ set -x
|
|
|
umount "$MOUNT_DIR" # 2> /dev/null
|
|
|
+ sync
|
|
|
if $MOVE; then
|
|
|
mount --move "$LOWER_DIR" "$MOUNT_DIR"
|
|
|
rmdir "$LOWER_DIR"
|
|
|
fi
|
|
|
- if [ -z "$SSHFS" ]; then
|
|
|
+ if [ ! -z "$SSHFS" ]; then
|
|
|
umount "$LOWER_DIR" # 2> /dev/null
|
|
|
rmdir "$LOWER_DIR"
|
|
|
fi
|
|
|
- set -x
|
|
|
for DIR in ${CLEANUP_DIRS[@]}; do
|
|
|
rm -rf "$DIR"
|
|
|
done
|
|
|
@@ -116,7 +123,7 @@ show_workdir_contents(){
|
|
|
(cd $WORK_DIR;pwd; ls -alsh)
|
|
|
}
|
|
|
inotify_cmd(){
|
|
|
- inotifywait -m -e close_nowrite $(find_dirs $1)
|
|
|
+ inotifywait -m -e close $(find_dirs $1)
|
|
|
}
|
|
|
find_dirs(){
|
|
|
find "$1" -maxdepth "$DEPTH" -type d
|