]> git.saurik.com Git - cydia.git/blobdiff - Library/move.sh
Make an executive decision to not support regions.
[cydia.git] / Library / move.sh
index 31c89e4c6e6ac91b136b9aae88696caf0d193f46..1e9dbb22cf88ce8f9ca61fadf9a14b691b10644b 100755 (executable)
@@ -2,6 +2,13 @@
 
 shopt -s extglob nullglob
 
+if [[ ${1:0:1} == - ]]; then
+    v=$1
+    shift 1
+else
+    v=
+fi
+
 function df_() {
     free=$(df -B1 "$1")
     free=${free% *%*}
@@ -12,47 +19,61 @@ function df_() {
 
 function mv_() {
     src=$1
-    dst=$2
 
-    if [[ -e ${dst} ]]; then
-        dst=$(mktemp -d /var/cydia.XXXXXX)
-    else
-        mkdir -p "${dst}"
+    if [[ ! -e /var/stash ]]; then
+        mkdir -p /var/db/stash
+        /usr/libexec/cydia/setnsfpn /var/db/stash
+        ln -s -t /var /var/db/stash
+    elif [[ -d /var/stash ]]; then
+        /usr/libexec/cydia/setnsfpn /var/stash
     fi
 
+    tmp=$(mktemp -d /var/stash/_.XXXXXX)
+    dst=${tmp}/${src##*/}
+
+    chmod 755 "${tmp}"
+    chown root.admin "${tmp}"
+
+    mkdir -- "${dst}" || {
+        rmdir -- "${tmp}"
+        exit 1
+    }
+
+    echo -n "${src}" >"${tmp}.lnk"
+
     if [[ -e ${src} ]]; then
         chmod --reference="${src}" "${dst}"
         chown --reference="${src}" "${dst}"
 
-        cp -aT "${src}" "${dst}" || {
-            rm -rf "${dst}"
+        cp -aT $v "${src}" "${dst}" || {
+            rm -rf "${tmp}"
             exit 1
         }
 
-        rm -rf "${src}"
+        mv $v "${src}" "${src}.moved"
+        ln -s "${dst}" "${src}"
+        rm -rf $v "${src}.moved"
     else
         chmod 775 "${dst}"
         chown root.admin "${dst}"
+        ln -s "${dst}" "${src}"
     fi
-
-    ln -s "${dst}" "${src}"
 }
 
 function shift_() {
-    dir=$1
-    dst=$2
+    dir=${1%/}
 
     if [[ -d ${dir} && ! -h ${dir} ]]; then
-        used=$(du -bs "${dir}")
+        used=$(/usr/libexec/cydia/du -bs "${dir}")
         used=${used%%$'\t'*}
         free=$(df_ /var)
 
         if [[ $((used + 524288)) -lt ${free} ]]; then
-            mv_ "${dir}" "${dst}"
+            mv_ "${dir}"
         fi
-    elif [[ -h ${dir} && ! -e ${dir} ]]; then
+    elif [[ ! -e ${dir} ]]; then
         rm -f "${dir}"
-        mv_ "${dir}" "${dst}"
+        mv_ "${dir}"
     fi
 }