X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=python%2Fcumulus%2F__init__.py;h=ed641ffc8ecc6137335d8636eda36ba77b393fc1;hb=88c9d1b7b2508bdc049d69b578dd0e64efa7d85b;hp=c5961c71601a527d921b26230d98081d26f86a96;hpb=e6a86b518f7336f2ef49a0fd22ca293b84c7fa00;p=cumulus.git diff --git a/python/cumulus/__init__.py b/python/cumulus/__init__.py index c5961c7..ed641ff 100644 --- a/python/cumulus/__init__.py +++ b/python/cumulus/__init__.py @@ -32,6 +32,7 @@ import codecs import hashlib import itertools import os +import posixpath import re import sqlite3 import subprocess @@ -168,7 +169,7 @@ class SearchPathEntry(object): and context is any additional data associated with this search entry (if any). """ - return (os.path.join(self._directory_prefix, basename + self._suffix), + return (posixpath.join(self._directory_prefix, basename + self._suffix), self._context) class SearchPath(object): @@ -233,7 +234,7 @@ class SearchPath(object): for f in backend.list(d): success = True m = self.match(f) - if m: yield (os.path.join(d, f), m) + if m: yield (posixpath.join(d, f), m) except cumulus.store.NotFoundError: pass if not success: @@ -343,7 +344,7 @@ class CumulusStore: if m: return ("zero", None, None, (0, int(m.group(1)), False)) - m = re.match(r"^([-0-9a-f]+)\/([0-9a-f]+)(\(\S+\))?(\[(((\d+)\+)?(\d+)|=(\d+))\])?$", refstr) + m = re.match(r"^([-0-9a-f]+)\/([0-9a-f]+)(\(\S+\))?(\[(=?(\d+)|(\d+)\+(\d+))\])?$", refstr) if not m: return segment = m.group(1) @@ -355,12 +356,9 @@ class CumulusStore: checksum = checksum.lstrip("(").rstrip(")") if slice is not None: - if m.group(9) is not None: + if m.group(6) is not None: # Size-assertion slice - slice = (0, int(m.group(9)), True) - elif m.group(6) is None: - # Abbreviated slice - slice = (0, int(m.group(8)), False) + slice = (0, int(m.group(6)), True) else: slice = (int(m.group(7)), int(m.group(8)), False) @@ -451,6 +449,9 @@ class CumulusStore: if slice is not None: (start, length, exact) = slice + # Note: The following assertion check may need to be commented out + # to restore from pre-v0.8 snapshots, as the syntax for + # size-assertion slices has changed. if exact and len(data) != length: raise ValueError data = data[start:start+length] if len(data) != length: raise IndexError