public function hydrate(RawObject $raw_object)
{
$tree = new Tree();
$tree->setSha($raw_object->getSha());
$reader = new StringReader($raw_object->getData());
while ($reader->available()) {
$mode = intval($this->readModeString($reader), 8);
$name = $this->readName($reader);
$sha = $reader->readHHex(20);
$is_tree = (bool) ($mode & 040000);
if ($is_tree) {
$node = new Node\TreeNode();
$node->setTree(new TreeProxy($this->repo, $sha));
} else {
$node = new Node\BlobNode();
$node->setBlob(new BlobProxy($this->repo, $sha));
}
$node->setIntegerMode($mode);
$node->setName($name);
$tree->addNode($node);
}
return $tree;
}