Merge branch 'staging'
[rsync-backup] / fshash.in
index 1dbd8be..4f8b1c7 100644 (file)
--- a/fshash.in
+++ b/fshash.in
@@ -98,10 +98,15 @@ def enum_walk(file, func):
         dir([OS.path.join(d.name, e) for e in dirents(d.name)], dev)
 
   if file.endswith('/'):
-    OS.chdir(file)
-    fi = FileInfo('.')
-    func(fi)
-    dir(dirents('.'), fi.st.st_dev)
+    cwd = OS.open('.', OS.O_RDONLY)
+    try:
+      OS.chdir(file)
+      fi = FileInfo('.')
+      func(fi)
+      dir(dirents('.'), fi.st.st_dev)
+    finally:
+      OS.fchdir(cwd)
+      OS.close(cwd)
   else:
     fi = FileInfo(file)
     func(fi)
@@ -348,7 +353,7 @@ class GenericFormatter (object):
     tm = T.gmtime(t)
     return T.strftime('%Y-%m-%dT%H:%M:%SZ', tm)
   def _enc_name(me, n):
-    return n.encode('string_escape')
+    return ' \\-> '.join(n.encode('string_escape').split(' -> '))
   def name(me):
     return me._enc_name(me.fi.name)
   def info(me):