-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
- def __init__(self):
- self.st_mode = 0
- self.st_ino = 0
- self.st_dev = 0
- self.st_nlink = 0
- self.st_uid = 0
- self.st_gid = 0
- self.st_size = 0
- self.st_atime = 0
- self.st_mtime = 0
- self.st_ctime = 0
-
-
-cache = {}
-def cache_get(top, path):
- parts = path.split('/')
- cache[('',)] = top
- c = None
- max = len(parts)
- #log('cache: %r\n' % cache.keys())
- for i in range(max):
- pre = parts[:max-i]
- #log('cache trying: %r\n' % pre)
- c = cache.get(tuple(pre))
- if c:
- rest = parts[max-i:]
- for r in rest:
- #log('resolving %r from %r\n' % (r, c.fullname()))
- c = c.lresolve(r)
- key = tuple(pre + [r])
- #log('saving: %r\n' % (key,))
- cache[key] = c
- break
- assert(c)
- return c
-
-
+#!/bin/sh
+"""": # -*-python-*-
+bup_python="$(dirname "$0")/bup-python" || exit $?
+exec "$bup_python" "$0" ${1+"$@"}
+"""
+# end of bup preamble
+
+from __future__ import absolute_import, print_function
+import sys, os, errno
+
+try:
+ import fuse
+except ImportError:
+ print('error: cannot find the python "fuse" module; please install it',
+ file=sys.stderr)
+ sys.exit(2)
+if not hasattr(fuse, '__version__'):
+ print('error: fuse module is too old for fuse.__version__', file=sys.stderr)
+ sys.exit(2)
+fuse.fuse_python_api = (0, 2)
+
+if sys.version_info[0] > 2:
+ try:
+ fuse_ver = fuse.__version__.split('.')
+ fuse_ver_maj = int(fuse_ver[0])
+ except:
+ log('error: cannot determine the fuse major version; please report',
+ file=sys.stderr)
+ sys.exit(2)
+ if len(fuse_ver) < 3 or fuse_ver_maj < 1:
+ print("error: fuse module can't handle binary data; please upgrade to 1.0+\n",
+ file=sys.stderr)
+ sys.exit(2)
+
+from bup import options, git, vfs, xstat
+from bup.compat import argv_bytes, fsdecode, py_maj
+from bup.helpers import log
+from bup.repo import LocalRepo
+
+
+# FIXME: self.meta and want_meta?
+
+# The path handling is just wrong, but the current fuse module can't
+# handle bytes paths.