Restructure cache-file.sh, adding the -r option for restoring files.
authorW. Trevor King <wking@drexel.edu>
Fri, 30 Mar 2012 02:24:44 +0000 (22:24 -0400)
committerW. Trevor King <wking@drexel.edu>
Fri, 30 Mar 2012 02:24:44 +0000 (22:24 -0400)
Because sometimes you press the wrong button ;).

posts/cache-file.mdwn
posts/cache-file/cache-file.sh

index eae2d5e70abe07f2bb80e090e2564016c7443bad..72533e692940c773c78c1459e79c6f669474f0b8 100644 (file)
@@ -4,12 +4,13 @@ and add
 
     -1 "cache-file.sh -l saves"
     -2 "cache-file.sh trash"
+    -2 "cache-file.sh -r"
 
 to `~/.pqivrc`, you can hard link the current picture to
-`.cache-saves/` or by pressing 1, or move the current picture to
-`.cache-trash/` by pressing 2.  The `.cache-*/` directory is in the
-same directory as the image file, and will be created if it doesn't
-exist.
+`.cache-saves/` or by pressing 1, move the current picture to
+`.cache-trash/` by pressing 2, or restore the current picture from the
+caches by pressing 3.  The `.cache-*/` directory is in the same
+directory as the image file, and will be created if it doesn't exist.
 
 Not very complicated, but useful for quickly removing
 almost-duplicates, blurry pictures, etc.
index b412d725d42dc3594881bcd60f4eeb99af99f44f..7c1ab9693fa0a83d044fb5c4360e4407cac8cec1 100755 (executable)
 #
 #
 # usage: cache-file.sh [-l] TAG FILE
+#        cache-file.sh [-r] FILE
 
-PREFIX=".cache-"
+PREFIX='.cache-'
+FILE_DIR=''
+CACHE_DIR=''
 
-if [ "$1" == '-l' ]; then
-       CMD='cp -l'
-       VERB='hard-linked'
-       shift
-else
-       CMD='mv'
-       VERB='moved'
-fi
+function check_file()
+{
+       local FILE="$1"
+       if [ ! -e "${FILE}" ]; then
+               echo "'${FILE}' doesn't exist" >&2
+               exit 1
+       fi
+       FILE_DIR=$(dirname "${FILE}")
+       if [ ! -d "${FILE_DIR}" ]; then
+               echo "'${FILE}' not in a directory" >&2
+               exit 1
+       fi
+}
 
-TAG="$1"
-FILE="$2"
+function check_cache()
+{
+       local TAG="$1"
+       local FILE="$2"
+       CACHE_DIR="${FILE_DIR}/${PREFIX}${TAG}"
 
-if [ ! -e "$FILE" ]; then
-       echo "'$FILE' doesn't exist" >&2
-       exit 1
-fi
-FILE_DIR=$(dirname $FILE)
-if [ ! -d "$FILE_DIR" ]; then
-       echo "'$FILE' not in a directory" >&2
-       exit 1
-fi
+       if [ ! -d "${CACHE_DIR}" ]; then
+               if [ -e "${CACHE_DIR}" ]; then
+                       echo "'${CACHE_DIR}' exists, but is not a directory"
+                       exit 1
+               fi
+               mkdir "${CACHE_DIR}"
+       fi
+}
 
-CACHE_DIR="$FILE_DIR/$PREFIX$TAG"
+function move()
+{
+       local TAG="$1"
+       local FILE="$2"
+       check_file "${FILE}"
+       check_cache "${TAG}" "${FILE}"
+       echo "move '${FILE}' to '${CACHE_DIR}'"
+       mv "${FILE}" "${CACHE_DIR}"
+}
 
-if [ ! -d "$CACHE_DIR" ]; then
-       if [ -e "$CACHE_DIR" ]; then
-               echo "'$CACHE_DIR' exists, but is not a directory"
-               exit 1
-       fi
-       mkdir "$CACHE_DIR"
-fi
+function link()
+{
+       local TAG="$1"
+       local FILE="$2"
+       check_file "${FILE}"
+       check_cache "${TAG}" "${FILE}"
+       echo "hardlink '${FILE}' from '${CACHE_DIR}'"
+       cp -l "${FILE}" "${CACHE_DIR}"
+}
 
-$CMD "$FILE" "$CACHE_DIR"
+function restore()
+{
+       local FILE="$1"
+       for CACHED_PATH in $(ls "${PREFIX}"*"/${FILE}"); do
+               echo "restore '${FILE}' from '${CACHED_PATH}'"
+               mv "${CACHED_PATH}" "${FILE}"
+       done
+}
 
-echo "$VERB '$FILE' to '$CACHE_DIR'"
+
+if [ "$1" == '-l' ]; then
+       link "$2" "$3"
+elif [ "$1" == '-r' ]; then
+       restore "$2"
+else
+       move "$1" "$2"
+fi