shopt -s extglob nullglob
+if [[ ${1:0:1} == - ]]; then
+ v=$1
+ shift 1
+else
+ v=
+fi
+
function df_() {
free=$(df -B1 "$1")
free=${free% *%*}
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
}