summaryrefslogtreecommitdiff
path: root/build/cleantmpdirs
diff options
context:
space:
mode:
Diffstat (limited to 'build/cleantmpdirs')
-rw-r--r--build/cleantmpdirs50
1 files changed, 50 insertions, 0 deletions
diff --git a/build/cleantmpdirs b/build/cleantmpdirs
new file mode 100644
index 0000000..547fa07
--- /dev/null
+++ b/build/cleantmpdirs
@@ -0,0 +1,50 @@
+# Function to do all of the temporary dir/file migration work
+#
+_clean_tmpdirs()
+{
+ #
+ # Usage: _clean_tmpdirs [-v] new_dir old_dir ...
+ #
+ # Move temporary directories (which may be actively in use as
+ # with pmdammv files) from one temporary directory to another
+ # so as to transparently upgrade without loss of service.
+ #
+ # -v option is verbose mode for debugging
+ #
+
+ _verbose=false
+ if [ $# -gt 0 -a X"$1" = "X-v" ]
+ then
+ _verbose=true
+ shift
+ fi
+
+ if [ $# -lt 2 ]
+ then
+ echo >&2 "Usage: _clean_tmpdirs [-v] new_dir old_dir subdirs ..."
+ return
+ fi
+
+ _new_tmp_dir="$1"
+ _old_tmp_dir="$2"
+
+ [ "$_new_tmp_dir" != "$old_tmp_dir" ] || return
+
+ for _subdir
+ do
+ d="$_old_tmp_dir/$_subdir"
+ test -d "$d" -a -k "$d" || continue
+ cd "$d" || continue
+ for f in * ; do
+ [ "$f" != "*" ] || continue
+ source="$d/$f"
+ target="$_new_tmp_dir/$_subdir/$f"
+ [ "$source" != "$target" ] || continue
+ [ ! -f "$target" ] || continue
+ $_verbose && echo + mv -fu "$source" "$target"
+ mv -fu "$source" "$target" || true
+ done
+ $_verbose && echo + rmdir "$d"
+ cd && rmdir "$d" 2>/dev/null || true
+ done
+}