Changeset 143

Show
Ignore:
Timestamp:
07/30/08 22:42:16 (16 years ago)
Author:
broder
Message:

Upstream Debathena's crazy cross-API-version patch to pyHesiodFS

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/source/pyhesiodfs/pyHesiodFS.py

    r142 r143  
    1616import hesiod 
    1717 
    18 if not hasattr(fuse, '__version__'): 
    19     raise RuntimeError, \ 
    20         "your fuse-py doesn't know of fuse.__version__, probably it's too old." 
     18new_fuse = hasattr(fuse, '__version__') 
    2119 
    2220fuse.fuse_python_api = (0, 2) 
     
    2826If you're using the Finder, try pressing Cmd+Shift+G and then entering 
    2927%(mountpoint)s/name""" 
     28 
     29if not hasattr(fuse, 'Stat'): 
     30    fuse.Stat = object 
    3031 
    3132class MyStat(fuse.Stat): 
     
    4243        self.st_ctime = 0 
    4344 
     45    def toTuple(self): 
     46        return (self.st_mode, self.st_ino, self.st_dev, self.st_nlink, 
     47                self.st_uid, self.st_gid, self.st_size, self.st_atime, 
     48                self.st_mtime, self.st_ctime) 
     49 
    4450class PyHesiodFS(Fuse): 
    4551 
    4652    def __init__(self, *args, **kwargs): 
    4753        Fuse.__init__(self, *args, **kwargs) 
    48         self.fuse_args.add("allow_other", True) 
    49         self.fuse_args.add("fsname", "pyHesiodFS") 
     54        try: 
     55            self.fuse_args.add("allow_other", True) 
     56        except AttributeError: 
     57            self.allow_other = 1 
     58 
    5059        if sys.platform == 'darwin': 
    5160            self.fuse_args.add("noappledouble", True) 
    5261            self.fuse_args.add("noapplexattr", True) 
    5362            self.fuse_args.add("volname", "MIT") 
     63            self.fuse_args.add("fsname", "pyHesiodFS") 
    5464        self.mounts = {} 
    5565     
     
    7282        else: 
    7383            return -errno.ENOENT 
    74         return st 
     84        if new_fuse: 
     85            return st 
     86        else: 
     87            return st.toTuple() 
    7588 
    7689    def getCachedLockers(self): 
     
    98111                return None 
    99112 
     113    def getdir(self, path): 
     114        return [(i, 0) for i in (['.', '..', hello_path[1:]] + self.getCachedLockers())] 
     115 
    100116    def readdir(self, path, offset): 
    101         for r in  ['.', '..', hello_path[1:]]+self.getCachedLockers(): 
     117        for (r, zero) in self.getdir(path): 
    102118            yield fuse.Direntry(r) 
    103119             
     
    126142def main(): 
    127143    global hello_str 
    128     usage=""" 
    129 pyHesiodFS 
     144    try: 
     145        usage = Fuse.fusage 
     146        server = PyHesiodFS(version="%prog " + fuse.__version__, 
     147                            usage=usage, 
     148                            dash_s_do='setsingle') 
     149        server.parse(errex=1) 
     150    except AttributeError: 
     151        usage=""" 
     152pyHesiodFS [mountpath] [options] 
    130153 
    131 """ + Fuse.fusage 
    132     server = PyHesiodFS(version="%prog " + fuse.__version__, 
    133                      usage=usage, 
    134                      dash_s_do='setsingle'
     154""" 
     155        if sys.argv[1] == '-f': 
     156            sys.argv.pop(1) 
     157        server = PyHesiodFS(
    135158 
    136     server.parse(errex=1) 
    137159    hello_str = hello_str % {'mountpoint': server.parse(errex=1).mountpoint} 
    138160    server.main()