code: def traverse_tree_recursive(odb, tree_sha, path_prefix):
      
      entries = []
      data = tree_entries_from_data(odb.stream(tree_sha).read())
  
      # unpacking/packing is faster than accessing individual items
      for sha, mode, name in data:
          if S_ISDIR(mode):
              entries.extend(traverse_tree_recursive(odb, sha, path_prefix + name + '/'))
          else:
              entries.append((sha, mode, path_prefix + name))
      # END for each item
  
      return entries
docs: :return: list of entries of the tree pointed to by the binary tree_sha. An entry
          has the following format:
          * [0] 20 byte sha
          * [1] mode as int
          * [2] path relative to the repository
      :param path_prefix: prefix to prepend to the front of all returned paths