]> arthur.barton.de Git - bup.git/blobdiff - t/cleanup-mounts-under
tests: fuse: use stat instead of relying on "ls -l" output
[bup.git] / t / cleanup-mounts-under
index 6d5cb873e5c704a5d497df75236a53bcece53244..b43d9602d2209e9c9b1d3b2ff6b0d3f1fe7f80c6 100755 (executable)
@@ -1,5 +1,10 @@
-#!/usr/bin/env python
+#!/bin/sh
+"""": # -*-python-*-
+bup_python="$(dirname "$0")/../cmd/bup-python" || exit $?
+exec "$bup_python" "$0" ${1+"$@"}
+"""
 
+from sys import stderr
 import os.path, re, subprocess, sys
 
 def mntent_unescape(x):
@@ -14,19 +19,28 @@ def mntent_unescape(x):
     return re.sub(r'(\\\\|\\011|\\012|\\040)', replacement, x)
 
 targets = sys.argv[1:]
+
+if not os.path.exists('/proc/mounts'):
+    print >> stderr, 'No /proc/mounts; skipping mount cleanup in', repr(targets)
+    sys.exit(0)
+
 exit_status = 0
 for target in targets:
     if not os.path.isdir(target):
-        print >> sys.stderr, target, 'is not a directory'
+        print >> stderr, repr(target), 'is not a directory'
         exit_status = 1
         continue
     top = os.path.realpath(target)
     proc_mounts = open('/proc/mounts', 'r')
     for line in proc_mounts:
-        _, point, _ = line.split(' ', 2)
+        _, point, fstype, _ = line.split(' ', 3)
         point = mntent_unescape(point)
         if top == point or os.path.commonprefix((top + '/', point)) == top + '/':
-            if subprocess.call(['umount', point]) != 0:
-                exit_status = 1
+            if fstype.startswith('fuse'):
+                if subprocess.call(['fusermount', '-uz', point]) != 0:
+                    exit_status = 1
+            else:
+                if subprocess.call(['umount', '-l', point]) != 0:
+                    exit_status = 1
 
 sys.exit(exit_status)