Parcourir la source

touch instead of copying

Tobias Simetsreiter il y a 4 ans
Parent
commit
3a1bc74720
1 fichiers modifiés avec 19 ajouts et 12 suppressions
  1. 19 12
      overlaycached

+ 19 - 12
overlaycached

@@ -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