def _to_hexsha(self, sha):
     if len(sha) == 40:
         return sha
     elif len(sha) == 20:
         return sha_to_hex(sha)
     else:
         raise ValueError("Invalid sha %r" % (sha, ))
Example #2
0
 def get_raw_no_repeat(self, bin_sha):
     """Wrapper around store.get_raw that doesn't allow repeat lookups."""
     hex_sha = sha_to_hex(bin_sha)
     self.assertFalse(hex_sha in self.fetched,
                      'Attempted to re-fetch object %s' % hex_sha)
     self.fetched.add(hex_sha)
     return self.store.get_raw(hex_sha)
    def get_raw(self, name):
        """Obtain the raw fulltext for an object.

        :param name: sha for the object.
        :return: tuple with numeric type and object contents.
        """
        if len(name) == 40:
            sha = hex_to_sha(name)
            hexsha = name
        elif len(name) == 20:
            sha = name
            hexsha = None
        else:
            raise AssertionError("Invalid object name %r" % name)
        for pack in self.packs:
            try:
                return pack.get_raw(sha)
            except KeyError:
                pass
        if hexsha is None:
            hexsha = sha_to_hex(name)
        ret = self._get_loose_object(hexsha)
        if ret is not None:
            return ret.type_num, ret.as_raw_string()
        for alternate in self.alternates:
            try:
                return alternate.get_raw(hexsha)
            except KeyError:
                pass
        raise KeyError(hexsha)
Example #4
0
 def test_iterentries(self):
     p = self.get_pack_index(pack1_sha)
     entries = [(sha_to_hex(s), o, c) for s, o, c in p.iterentries()]
     self.assertEqual(
         [(b'6f670c0fb53f9463760b7295fbb814e965fb20c8', 178, None),
          (b'b2a2766a2879c209ab1176e7e778b81ae422eeaa', 138, None),
          (b'f18faa16531ac570a3fdc8c7ca16682548dafd12', 12, None)], entries)
Example #5
0
 def test_iterentries(self):
     with self.get_pack_data(pack1_sha) as p:
         entries = set((sha_to_hex(s), o, c) for s, o, c in p.iterentries())
         self.assertEqual(
             set([
                 (b'6f670c0fb53f9463760b7295fbb814e965fb20c8', 178,
                  1373561701),
                 (b'b2a2766a2879c209ab1176e7e778b81ae422eeaa', 138,
                  912998690),
                 (b'f18faa16531ac570a3fdc8c7ca16682548dafd12', 12,
                  3775879613),
             ]), entries)
Example #6
0
def read_cache_entry(f):
    """Read an entry from a cache file.

    :param f: File-like object to read from
    :return: tuple with: device, inode, mode, uid, gid, size, sha, flags
    """
    beginoffset = f.tell()
    ctime = read_cache_time(f)
    mtime = read_cache_time(f)
    (dev, ino, mode, uid, gid, size, sha, flags, ) = \
        struct.unpack(">LLLLLL20sH", f.read(20 + 4 * 6 + 2))
    name = f.read((flags & 0x0fff))
    # Padding:
    real_size = ((f.tell() - beginoffset + 8) & ~7)
    f.read((beginoffset + real_size) - f.tell())
    return (name, ctime, mtime, dev, ino, mode, uid, gid, size,
            sha_to_hex(sha), flags & ~0x0fff)
 def test_reverse(self):
     self.assertEqual(b'abcd' * 10, sha_to_hex(b'\xab\xcd' * 10))
Example #8
0
 def test_get_stored_checksum(self):
     p = self.get_pack_index(pack1_sha)
     self.assertEqual(b'f2848e2ad16f329ae1c92e3b95e91888daa5bd01',
                      sha_to_hex(p.get_stored_checksum()))
     self.assertEqual(b'721980e866af9a5f93ad674144e1459b8ba3e7b7',
                      sha_to_hex(p.get_pack_checksum()))