Exemplo n.º 1
0
 def read(self, sz):
     assert sz == 1
     v = byte_int(self.file.read(1, szhint=self.szhint)[0])
     self.szhint -= 1
     ret = bytes_from_uint(v ^ self.vuint_cs[self.offs])
     self.offs += 1
     assert self.offs < len(self.vuint_cs)
     return ret
Exemplo n.º 2
0
def test_valid_save_name():
    valid = helpers.valid_save_name
    WVPASS(valid(b'x'))
    WVPASS(valid(b'x@'))
    WVFAIL(valid(b'@'))
    WVFAIL(valid(b'/'))
    WVFAIL(valid(b'/foo'))
    WVFAIL(valid(b'foo/'))
    WVFAIL(valid(b'/foo/'))
    WVFAIL(valid(b'foo//bar'))
    WVFAIL(valid(b'.'))
    WVFAIL(valid(b'bar.'))
    WVFAIL(valid(b'foo@{'))
    for x in b' ~^:?*[\\':
        WVFAIL(valid(b'foo' + bytes_from_byte(x)))
    for i in range(20):
        WVFAIL(valid(b'foo' + bytes_from_uint(i)))
    WVFAIL(valid(b'foo' + bytes_from_uint(0x7f)))
    WVFAIL(valid(b'foo..bar'))
    WVFAIL(valid(b'bar.lock/baz'))
    WVFAIL(valid(b'foo/bar.lock/baz'))
    WVFAIL(valid(b'.bar/baz'))
    WVFAIL(valid(b'foo/.bar/baz'))
Exemplo n.º 3
0
def test_fanout_behaviour():

    # Drop in replacement for bupsplit, but splitting if the int value of a
    # byte >= BUP_BLOBBITS
    basebits = _helpers.blobbits()

    def splitbuf(buf):
        ofs = 0
        for b in buf:
            b = byte_int(b)
            ofs += 1
            if b >= basebits:
                return ofs, b
        return 0, 0

    with no_lingering_errors():
        old_splitbuf = _helpers.splitbuf
        _helpers.splitbuf = splitbuf
        old_BLOB_MAX = hashsplit.BLOB_MAX
        hashsplit.BLOB_MAX = 4
        old_BLOB_READ_SIZE = hashsplit.BLOB_READ_SIZE
        hashsplit.BLOB_READ_SIZE = 10
        old_fanout = hashsplit.fanout
        hashsplit.fanout = 2

        levels = lambda f: [
            (len(b), l) for b, l in hashsplit.hashsplit_iter([f], True, None)
        ]
        # Return a string of n null bytes
        z = lambda n: b'\x00' * n
        # Return a byte which will be split with a level of n
        sb = lambda n: bytes_from_uint(basebits + n)

        split_never = BytesIO(z(16))
        split_first = BytesIO(z(1) + sb(3) + z(14))
        split_end = BytesIO(z(13) + sb(1) + z(2))
        split_many = BytesIO(
            sb(1) + z(3) + sb(2) + z(4) + sb(0) + z(4) + sb(5) + z(1))
        WVPASSEQ(levels(split_never), [(4, 0), (4, 0), (4, 0), (4, 0)])
        WVPASSEQ(levels(split_first), [(2, 3), (4, 0), (4, 0), (4, 0), (2, 0)])
        WVPASSEQ(levels(split_end), [(4, 0), (4, 0), (4, 0), (2, 1), (2, 0)])
        WVPASSEQ(levels(split_many), [(1, 1), (4, 2), (4, 0), (1, 0), (4, 0),
                                      (1, 5), (1, 0)])

        _helpers.splitbuf = old_splitbuf
        hashsplit.BLOB_MAX = old_BLOB_MAX
        hashsplit.BLOB_READ_SIZE = old_BLOB_READ_SIZE
        hashsplit.fanout = old_fanout
Exemplo n.º 4
0
Arquivo: git.py Projeto: zzmjohn/bup
def _encode_packobj(type, content, compression_level=1):
    if compression_level not in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9):
        raise ValueError('invalid compression level %s' % compression_level)
    szout = b''
    sz = len(content)
    szbits = (sz & 0x0f) | (_typemap[type] << 4)
    sz >>= 4
    while 1:
        if sz: szbits |= 0x80
        szout += bytes_from_uint(szbits)
        if not sz:
            break
        szbits = sz & 0x7f
        sz >>= 7
    z = zlib.compressobj(compression_level)
    yield szout
    yield z.compress(content)
    yield z.flush()
Exemplo n.º 5
0
def randbytes(sz):
    s = b''
    for i in range(sz):
        s += bytes_from_uint(random.randrange(0, 256))
    return s
Exemplo n.º 6
0
def randblock(n):
    return b''.join(
        bytes_from_uint(random.randrange(0, 256)) for i in range(n))