public hydrate ( |
||
$raw_object |
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;
}
public function testCanHydrateTreeWithSpaceInFileName() { $sha = "deadbeefcafebabefacebadc0ffeebadf00dcafe"; $blob_line = sprintf("%s %s%s", "100644", 'Test blob.md', pack("H*", "deadbeefcafebabefacebadc0ffeebadf00dface")); $raw_object = M::mock('Gittern\\Transport\\RawObject', array('getSha' => $sha, 'getData' => $blob_line)); $hydrator = new TreeHydrator(M::mock('Gittern\\Repository')); $tree = $hydrator->hydrate($raw_object); $nodes = $tree->getNodes(); $this->assertEquals('Test blob.md', $nodes[0]->getName()); }