[Pkg-ocaml-maint-commits] r3864 - in /trunk/projects/approx/trunk: debian/NEWS debian/approx.cron.weekly debian/approx.postrm gc.ml

ecc-guest at users.alioth.debian.org ecc-guest at users.alioth.debian.org
Fri Jun 22 16:34:31 UTC 2007


Author: ecc-guest
Date: Fri Jun 22 16:34:31 2007
New Revision: 3864

URL: http://svn.debian.org/wsvn/?sc=1&rev=3864
Log:
gc_approx now removes empty subdirectories from the cache,
simplifying weekly cron job

Modified:
    trunk/projects/approx/trunk/debian/NEWS
    trunk/projects/approx/trunk/debian/approx.cron.weekly
    trunk/projects/approx/trunk/debian/approx.postrm
    trunk/projects/approx/trunk/gc.ml

Modified: trunk/projects/approx/trunk/debian/NEWS
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/debian/NEWS?rev=3864&op=diff
==============================================================================
--- trunk/projects/approx/trunk/debian/NEWS (original)
+++ trunk/projects/approx/trunk/debian/NEWS Fri Jun 22 16:34:31 2007
@@ -6,6 +6,9 @@
   
   Several parameters have been added: $user, $group, $syslog, $verbose.
   See the approx.conf man page for details.
+
+  The gc_approx program now removes empty subdirectories from the cache,
+  simplifying the weekly cron job.
 
  -- Eric Cooper <ecc at cmu.edu>  Wed, 13 Jun 2007 16:04:53 -0400
 

Modified: trunk/projects/approx/trunk/debian/approx.cron.weekly
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/debian/approx.cron.weekly?rev=3864&op=diff
==============================================================================
--- trunk/projects/approx/trunk/debian/approx.cron.weekly (original)
+++ trunk/projects/approx/trunk/debian/approx.cron.weekly Fri Jun 22 16:34:31 2007
@@ -3,9 +3,3 @@
 # Garbage collect the approx(8) cache
 
 /usr/sbin/gc_approx --quiet
-
-# Remove any empty directories
-
-cd /var/cache/approx/ && \
-    find -type d -empty | \
-    xargs --no-run-if-empty rmdir --parents --ignore-fail-on-non-empty

Modified: trunk/projects/approx/trunk/debian/approx.postrm
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/debian/approx.postrm?rev=3864&op=diff
==============================================================================
--- trunk/projects/approx/trunk/debian/approx.postrm (original)
+++ trunk/projects/approx/trunk/debian/approx.postrm Fri Jun 22 16:34:31 2007
@@ -2,8 +2,12 @@
 
 if [ "$1" = "purge" ]; then
     rm -rf /var/cache/approx
-    deluser --quiet --system approx || true
-    delgroup --quiet --system approx || true
+    if [ -x "$(command -v deluser)" -a -x "$(command -v delgroup)" ]; then
+	deluser --quiet --system approx || true
+	delgroup --quiet --system approx || true
+    else
+	echo >&2 "not removing approx user/group: deluser/delgroup command not found"
+    fi
 fi
 
 #DEBHELPER#

Modified: trunk/projects/approx/trunk/gc.ml
URL: http://svn.debian.org/wsvn/trunk/projects/approx/trunk/gc.ml?rev=3864&op=diff
==============================================================================
--- trunk/projects/approx/trunk/gc.ml (original)
+++ trunk/projects/approx/trunk/gc.ml Fri Jun 22 16:34:31 2007
@@ -187,9 +187,28 @@
   in
   iter_status gc
 
+let empty_dirs =
+  let collect_empty list dir =
+    if Sys.readdir dir = [||] then dir :: list else list
+  in
+  fold_dirs collect_empty []
+
+let remove_dir dir =
+  let prefix = if verbose then "  " else "" in
+  print_if (not quiet) "%s%s" prefix dir;
+  (* any exception raised by rmdir will terminate the pruning loop *)
+  if not simulate then Unix.rmdir dir
+
+let rec prune () =
+  match empty_dirs cache_dir with
+  | [] -> ()
+  | [dir] when dir = cache_dir -> ()  (* don't remove cache dir *)
+  | list -> List.iter remove_dir list; if not simulate then prune ()
+
 let garbage_collect () =
   drop_privileges ~user ~group;
   mark ();
-  sweep ()
+  sweep ();
+  prune ()
 
 let () = main_program garbage_collect ()




More information about the Pkg-ocaml-maint-commits mailing list