]> arthur.barton.de Git - bup.git/commitdiff
demangle_name: handle .bupm files
authorRob Browning <rlb@defaultvalue.org>
Sat, 1 Aug 2015 16:18:09 +0000 (11:18 -0500)
committerRob Browning <rlb@defaultvalue.org>
Sat, 5 Sep 2015 20:47:40 +0000 (15:47 -0500)
A bit back we started allowing .bupm files to be hashsplit:

  ee777400cf624b4f7a24b15614c2b6c745560dcb

Fix demangle_name() to handle that.  This requires a mode argument
because .bupm files might or might not be chunked.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/git.py
lib/bup/t/tgit.py
lib/bup/vfs.py

index 65892e5b4a5632719860566e62faec64fc5545cb..dbbcbffea63b4c599b3206310fdc72159e1aa229 100644 (file)
@@ -163,7 +163,7 @@ def mangle_name(name, mode, gitmode):
 
 
 (BUP_NORMAL, BUP_CHUNKED) = (0,1)
-def demangle_name(name):
+def demangle_name(name, mode):
     """Remove name mangling from a file name, if necessary.
 
     The return value is a tuple (demangled_filename,mode), where mode is one of
@@ -178,6 +178,9 @@ def demangle_name(name):
         return (name[:-5], BUP_NORMAL)
     elif name.endswith('.bup'):
         return (name[:-4], BUP_CHUNKED)
+    elif name.endswith('.bupm'):
+        return (name[:-5],
+                BUP_CHUNKED if stat.S_ISDIR(mode) else BUP_NORMAL)
     else:
         return (name, BUP_NORMAL)
 
index 1fa1c1c6d3f2d759f9b8cf74e14f1455e4b8fb25..79010b417159c3162564a10253ac18513e2f78d5 100644 (file)
@@ -39,14 +39,17 @@ def testmangle():
     WVPASSEQ(git.mangle_name("f.bup", afile, adir), "f.bup.bup")
     WVPASSEQ(git.mangle_name("f", afile, adir), "f.bup")
 
-    WVPASSEQ(git.demangle_name("f.bup"), ("f", git.BUP_CHUNKED))
-    WVPASSEQ(git.demangle_name("f.bupl"), ("f", git.BUP_NORMAL))
-    WVPASSEQ(git.demangle_name("f.bup.bupl"), ("f.bup", git.BUP_NORMAL))
+    WVPASSEQ(git.demangle_name("f.bup", afile), ("f", git.BUP_CHUNKED))
+    WVPASSEQ(git.demangle_name("f.bupl", afile), ("f", git.BUP_NORMAL))
+    WVPASSEQ(git.demangle_name("f.bup.bupl", afile), ("f.bup", git.BUP_NORMAL))
+
+    WVPASSEQ(git.demangle_name(".bupm", afile), ('', git.BUP_NORMAL))
+    WVPASSEQ(git.demangle_name(".bupm", adir), ('', git.BUP_CHUNKED))
 
     # for safety, we ignore .bup? suffixes we don't recognize.  Future
     # versions might implement a .bup[a-z] extension as something other
     # than BUP_NORMAL.
-    WVPASSEQ(git.demangle_name("f.bupa"), ("f.bupa", git.BUP_NORMAL))
+    WVPASSEQ(git.demangle_name("f.bupa", afile), ("f.bupa", git.BUP_NORMAL))
 
 
 @wvtest
index 2c1f4ebfa81c42eca82c0838a0095f19cf5d6827..fbe5bd6cc6fca5ed2eb0407c7c6792c3a9032122 100644 (file)
@@ -434,7 +434,7 @@ class Dir(Node):
                 self._bupm = File(self, mangled_name, GIT_MODE_FILE, sha,
                                   bupmode)
                 continue
-            (name,bupmode) = git.demangle_name(mangled_name)
+            name, bupmode = git.demangle_name(mangled_name, mode)
             if bupmode == git.BUP_CHUNKED:
                 mode = GIT_MODE_FILE
             if stat.S_ISDIR(mode):