Author: Magnus Nordlander
Ejemplo n.º 1
0
 public static function createFromBlobNode(BlobNode $node)
 {
     $entry = new IndexEntry();
     $entry->setBlob($node->getBlob());
     $entry->setMode($node->getIntegerMode());
     return $entry;
 }
Ejemplo n.º 2
0
 public function testCanCreateEntryFromBlobNode()
 {
     $blob_mock = M::mock('Gittern\\Entity\\GitObject\\Blob');
     $node_mock = M::mock('Gittern\\Entity\\GitObject\\Node\\BlobNode', array('getBlob' => $blob_mock, 'getIntegerMode' => 0100644));
     $entry = IndexEntry::createFromBlobNode($node_mock);
     $this->assertEquals($blob_mock, $entry->getBlob());
     $this->assertEquals(0100644, $entry->getMode());
 }
Ejemplo n.º 3
0
 public function populateFromTree(Tree $tree, $prefix = '')
 {
     foreach ($tree as $node) {
         if ($node instanceof TreeNode) {
             $this->populateFromTree($node->getTree(), $prefix . $node->getName() . '/');
         } elseif ($node instanceof BlobNode) {
             $entry = IndexEntry::createFromBlobNode($node);
             $entry->setName($prefix . $node->getName());
             $this->addEntry($entry);
         }
     }
 }
Ejemplo n.º 4
0
 public function hydrate($data)
 {
     $index = new Index();
     $reader = new StringReader($data);
     $signature = $reader->readString8(4);
     $version = $reader->readUInt32BE();
     if ($signature != Index::SIGNATURE || $version != Index::VERSION) {
         throw new IndexVersionException("IndexHydrator only supports indexes with signature " . Index::SIGNATURE . " and version " . Index::VERSION);
     }
     $entries = $reader->readUInt32BE();
     $extended_contents_start = $reader->getOffset();
     for ($i = 0; $i < $entries; $i++) {
         $entry = new IndexEntry();
         $start = $reader->getOffset();
         $entry->setCtime($this->readEntryTime($reader));
         $entry->setMtime($this->readEntryTime($reader));
         $entry->setDev($reader->readUInt32BE());
         $entry->setInode($reader->readUInt32BE());
         $entry->setMode($reader->readUInt32BE());
         $entry->setUid($reader->readUInt32BE());
         $entry->setGid($reader->readUInt32BE());
         $entry->setFileSize($reader->readUInt32BE());
         $entry->setBlob(new BlobProxy($this->repo, $reader->readHHex(20)));
         $flags = $reader->readUInt16BE();
         $entry->setName(rtrim($reader->readString16(($flags & 0xfff) + 1, $foo, true), ""));
         //+1 is to capture mandatory NUL
         $entry->setStage(($flags & 0x3000) >> 12);
         $stop = $reader->getOffset();
         $length = $stop - $start;
         $padded_length = ceil($length / 8) * 8;
         $reader->setOffset($start + $padded_length);
         $index->addEntry($entry);
     }
     while ($reader->getOffset() < $reader->getSize() - 20) {
         $name = $reader->readString8(4);
         if (ord($name[0]) >= 0x41 && ord($name[0]) <= 0x5a) {
             // Optional extension, just skip it
             $data_size = $reader->readUInt32BE();
             $reader->skip($data_size);
         } else {
             throw new IndexVersionException("IndexHydrator doesn't support the mandatory " . $name . " extension");
         }
     }
     $extended_contents_stop = $reader->getOffset();
     $reader->setOffset(0);
     $calculated_sha = sha1($reader->read($extended_contents_stop));
     $checksum = $reader->readHHex(20);
     if ($checksum != $calculated_sha) {
         throw new ChecksumException("Index checksum does not match");
     }
     return $index;
 }
Ejemplo n.º 5
0
 public function write($key, $content, array $metadata = null)
 {
     $blob = new Blob();
     $blob->setContents($content);
     $this->repo->desiccateGitObject($blob);
     $entry = new IndexEntry();
     $entry->setCtime(time() . ".0");
     $entry->setMtime(time() . ".0");
     $entry->setDev(0);
     $entry->setInode(0);
     $entry->setMode(0100644);
     $entry->setUid(0);
     $entry->setGid(0);
     $entry->setFileSize(strlen($content));
     $entry->setBlob($blob);
     $entry->setName($key);
     $entry->setStage(0);
     $this->getIndex()->addEntry($entry);
     $this->flushIfSupposedTo();
 }