aboutsummaryrefslogtreecommitdiffstats
path: root/fusearchive.py
blob: 1d5281bbc67f40ddb19aab0bde8a140a7e84849d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python

#    Copyright (C) 2001  Jeff Epler  <jepler@unpythonic.dhs.org>
#    Copyright (C) 2006  Csaba Henk  <csaba.henk@creo.hu>
#    Copyright (C) 2009  Steve Slaven  <bpk@hoopajoo.net>
#
#    This program can be distributed under the terms of the GNU LGPL.
#    See the file COPYING.
#

import logging, sys, os, fuse
import FuseArchive

#log_level = logging.DEBUG
log_level = logging.WARNING

logging.basicConfig( level = log_level,
                     format = '%(asctime)s %(levelname)s %(filename)s:%(lineno)d %(module)s:%(funcName)s() %(message)s',
                     stream = sys.stderr,
                     filemode = 'w' )

enable_stats = False
enable_psyco = False

if enable_psyco:
    # Import Psyco if available
    try:
        import psyco
        psyco.full()
    except ImportError:
        pass

if enable_stats:
    import hotshot
    prof = hotshot.Profile( "fusearchive_stats" )
    prof.runcall()
    prof.close()

usage = """
Userspace nullfs-alike: mirror the filesystem tree from some point on.

""" + fuse.Fuse.fusage

server = FuseArchive.FileSystem(version="%prog " + fuse.__version__,
                usage=usage,
                dash_s_do='setsingle')

server.multithreaded = False

server.parse(values=server, errex=1)

if len(server.parser.largs) != 2:
    print "Usage: " + sys.argv[0] + " storageDirectory mountDirectory"
    sys.exit(1)

server.root = server.parser.largs[0]

try:
    if server.fuse_args.mount_expected():
        os.chdir(server.root)
except OSError:
    print >> sys.stderr, "can't enter root of underlying filesystem"
    sys.exit(1)

server.main()