Skip to content

Commit

Permalink
demangle_name: handle .bupm files
Browse files Browse the repository at this point in the history
A bit back we started allowing .bupm files to be hashsplit:

  ee77740

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>
  • Loading branch information
rlbdv committed Sep 5, 2015
1 parent df18bd0 commit b283da6
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
5 changes: 4 additions & 1 deletion lib/bup/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)

Expand Down
11 changes: 7 additions & 4 deletions lib/bup/t/tgit.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/bup/vfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ def _mksubs(self):
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):
Expand Down

0 comments on commit b283da6

Please sign in to comment.