diff options
Diffstat (limited to 'vmdb/unmount.py')
-rw-r--r-- | vmdb/unmount.py | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/vmdb/unmount.py b/vmdb/unmount.py deleted file mode 100644 index 1d9aaa5..0000000 --- a/vmdb/unmount.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2018 Lars Wirzenius -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -# =*= License: GPL-3+ =*= - - -# Unmount a directory, including any mount points under that -# directory. If /mnt/foo is given, and /mnt/foo/bar is also mounted, -# unmount /mnt/foo/bar first, and /mnt/foo then. Look for sub-mounts -# in /proc/mounts. - - -import vmdb - - -def unmount(what, mounts=None, real_unmount=None): - if mounts is None: # pragma: no cover - mounts = _read_proc_mounts() - if real_unmount is None: # pragma: no cover - real_unmount = _real_unmount - - mounts = _parse_proc_mounts(mounts) - dirnames = _find_what_to_unmount(mounts, what) - for dirname in dirnames: - real_unmount(dirname) - - -def _read_proc_mounts(): # pragma: no cover - with open('/proc/mounts') as f: - return f.read() - - -def _real_unmount(what): # pragma: no cover - vmdb.runcmd(['umount', what]) - - -def _parse_proc_mounts(text): - return [ - line.split()[:2] - for line in text.splitlines() - ] - - -def _find_what_to_unmount(mounts, what): - dirname = _find_mount_point(mounts, what) - dirnameslash = dirname + '/' - to_unmount = [ - point - for dev, point in mounts - if point == dirname or point.startswith(dirnameslash) - ] - return list(reversed(sorted(to_unmount))) - - -def _find_mount_point(mounts, what): - for dev, point in mounts: - if what in (dev, point): - return point - raise NotMounted(what) - - -class NotMounted(Exception): - - def __init__(self, what): - super().__init__('Not mounted: {}'.format(what)) |