1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-21 05:37:23 +00:00

Merge pull request #1856 from ThomasWaldmann/umount

borg umount, fixes #1855
This commit is contained in:
TW 2016-11-17 22:18:20 +01:00 committed by GitHub
commit ea6515d1aa
9 changed files with 82 additions and 12 deletions

View file

@ -34,6 +34,7 @@
from .keymanager import KeyManager
from .archive import backup_io, BackupOSError, Archive, ArchiveChecker, CHUNKER_PARAMS, is_special
from .remote import RepositoryServer, RemoteRepository, cache_if_remote
from .platform import umount
has_lchflags = hasattr(os, 'lchflags')
@ -539,6 +540,10 @@ def do_mount(self, args, repository, manifest, key):
self.exit_code = EXIT_ERROR
return self.exit_code
def do_umount(self, args):
"""un-mount the FUSE filesystem"""
return umount(args.mountpoint)
@with_repository()
def do_list(self, args, repository, manifest, key):
"""List archive or repository contents"""
@ -1476,6 +1481,21 @@ def build_parser(self, args=None, prog=None):
subparser.add_argument('-o', dest='options', type=str,
help='Extra mount options')
umount_epilog = textwrap.dedent("""
This command un-mounts a FUSE filesystem that was mounted with ``borg mount``.
This is a convenience wrapper that just calls the platform-specific shell
command - usually this is either umount or fusermount -u.
""")
subparser = subparsers.add_parser('umount', parents=[common_parser],
description=self.do_umount.__doc__,
epilog=umount_epilog,
formatter_class=argparse.RawDescriptionHelpFormatter,
help='umount repository')
subparser.set_defaults(func=self.do_umount)
subparser.add_argument('mountpoint', metavar='MOUNTPOINT', type=str,
help='mountpoint of the filesystem to umount')
info_epilog = textwrap.dedent("""
This command displays some detailed information about the specified archive.

View file

@ -88,7 +88,7 @@ def check_extension_modules():
raise ExtensionModuleError
if crypto.API_VERSION != 2:
raise ExtensionModuleError
if platform.API_VERSION != 2:
if platform.API_VERSION != 3:
raise ExtensionModuleError

View file

@ -1,5 +1,6 @@
import errno
import os
import subprocess
import sys
@ -17,14 +18,19 @@ def sync_dir(path):
os.close(fd)
# most POSIX platforms (but not Linux), see also borg 1.1 platform.base
def umount(mountpoint):
return subprocess.call(['umount', mountpoint])
if sys.platform.startswith('linux'): # pragma: linux only
from .platform_linux import acl_get, acl_set, API_VERSION
from .platform_linux import acl_get, acl_set, umount, API_VERSION
elif sys.platform.startswith('freebsd'): # pragma: freebsd only
from .platform_freebsd import acl_get, acl_set, API_VERSION
elif sys.platform == 'darwin': # pragma: darwin only
from .platform_darwin import acl_get, acl_set, API_VERSION
else: # pragma: unknown platform only
API_VERSION = 2
API_VERSION = 3
def acl_get(path, item, st, numeric_owner=False):
pass

View file

@ -1,7 +1,7 @@
import os
from .helpers import user2uid, group2gid, safe_decode, safe_encode
API_VERSION = 2
API_VERSION = 3
cdef extern from "sys/acl.h":
ctypedef struct _acl_t:

View file

@ -1,7 +1,7 @@
import os
from .helpers import posix_acl_use_stored_uid_gid, safe_encode, safe_decode
API_VERSION = 2
API_VERSION = 3
cdef extern from "errno.h":
int errno

View file

@ -1,9 +1,10 @@
import os
import re
import subprocess
from stat import S_ISLNK
from .helpers import posix_acl_use_stored_uid_gid, user2uid, group2gid, safe_decode, safe_encode
API_VERSION = 2
API_VERSION = 3
cdef extern from "sys/types.h":
int ACL_TYPE_ACCESS
@ -141,3 +142,7 @@ def acl_set(path, item, numeric_owner=False):
acl_set_file(p, ACL_TYPE_DEFAULT, default_acl)
finally:
acl_free(default_acl)
def umount(mountpoint):
return subprocess.call(['fusermount', '-u', mountpoint])

View file

@ -9,6 +9,7 @@
import unittest
from ..xattr import get_all
from ..logger import setup_logging
from ..platform import umount
try:
import llfuse
@ -110,11 +111,7 @@ def fuse_mount(self, location, mountpoint, *options):
self.cmd(*args, fork=True)
self.wait_for_mount(mountpoint)
yield
if sys.platform.startswith('linux'):
cmd = 'fusermount -u %s' % mountpoint
else:
cmd = 'umount %s' % mountpoint
os.system(cmd)
umount(mountpoint)
os.rmdir(mountpoint)
# Give the daemon some time to exit
time.sleep(.2)

View file

@ -545,6 +545,8 @@ Examples
.. include:: usage/mount.rst.inc
.. include:: usage/umount.rst.inc
Examples
~~~~~~~~
::
@ -552,7 +554,7 @@ Examples
$ borg mount /path/to/repo::root-2016-02-15 /tmp/mymountpoint
$ ls /tmp/mymountpoint
bin boot etc home lib lib64 lost+found media mnt opt root sbin srv tmp usr var
$ fusermount -u /tmp/mymountpoint
$ borg umount /tmp/mymountpoint
.. include:: usage/key_export.rst.inc

40
docs/usage/umount.rst.inc Normal file
View file

@ -0,0 +1,40 @@
.. IMPORTANT: this file is auto-generated from borg's built-in help, do not edit!
.. _borg_umount:
borg umount
-----------
::
usage: borg umount [-h] [--critical] [--error] [--warning] [--info] [--debug]
[--lock-wait N] [--show-rc] [--no-files-cache] [--umask M]
[--remote-path PATH]
MOUNTPOINT
un-mount the FUSE filesystem
positional arguments:
MOUNTPOINT mountpoint of the filesystem to umount
optional arguments:
-h, --help show this help message and exit
--critical work on log level CRITICAL
--error work on log level ERROR
--warning work on log level WARNING (default)
--info, -v, --verbose
work on log level INFO
--debug work on log level DEBUG
--lock-wait N wait for the lock, but max. N seconds (default: 1).
--show-rc show/log the return code (rc)
--no-files-cache do not load/update the file metadata cache used to
detect unchanged files
--umask M set umask to M (local and remote, default: 0077)
--remote-path PATH set remote path to executable (default: "borg")
Description
~~~~~~~~~~~
This command un-mounts a FUSE filesystem that was mounted with ``borg mount``.
This is a convenience wrapper that just calls the platform-specific shell
command - usually this is either umount or fusermount -u.