show which repository gets indexed
[phorkie.git] / src / phorkie / Repository.php
index aa1ea4c..c854cf1 100644 (file)
@@ -49,6 +49,10 @@ class Repository
         if (!is_numeric($_GET['id'])) {
             throw new Exception_Input('Paste ID not numeric');
         }
+        if (isset($_GET['rev'])) {
+            $this->hash = $_GET['rev'];
+        }
+
         $this->id = (int)$_GET['id'];
         $this->loadDirs();
         $this->loadHash();
@@ -75,6 +79,7 @@ class Repository
 
     public function loadHash()
     {
+        return;
         if ($this->hash !== null) {
             return;
         }
@@ -114,28 +119,43 @@ class Repository
      */
     public function getFiles()
     {
-        $files = glob($this->workDir . '/*');
+        $files = $this->getFilePaths();
         $arFiles = array();
-        foreach ($files as $path) {
-            $arFiles[] = new File($path, $this);
+        foreach ($files as $name) {
+            $arFiles[] = new File($name, $this);
         }
         return $arFiles;
     }
 
-    public function getFileByName($name, $bHasToExist = true)
+    protected function getFilePaths()
     {
-        $base = basename($name);
-        if ($base != $name) {
-            throw new Exception('No directories supported for now');
+        if ($this->hash === null) {
+            $hash = 'HEAD';
+        } else {
+            $hash = $this->hash;
         }
+        $output = $this->getVc()->getCommand('ls-tree')
+            ->setOption('r')
+            ->setOption('name-only')
+            ->addArgument($hash)
+            ->execute();
+        return explode("\n", trim($output));
+    }
+
+    public function getFileByName($name, $bHasToExist = true)
+    {
+        $name = Tools::sanitizeFilename($name);
         if ($name == '') {
             throw new Exception_Input('Empty file name given');
         }
-        $path = $this->workDir . '/' . $base;
-        if ($bHasToExist && !is_readable($path)) {
-            throw new Exception_Input('File does not exist');
+
+        if ($bHasToExist) {
+            $files = $this->getFilePaths();
+            if (array_search($name, $files) === false) {
+                throw new Exception_Input('File does not exist');
+            }
         }
-        return new File($path, $this);
+        return new File($name, $this);
     }
 
     public function hasFile($name)
@@ -177,12 +197,12 @@ class Repository
      * Get a link to the repository
      *
      * @param string $type Link type. Supported are:
-     *                     - "commit"
      *                     - "edit"
      *                     - "delete"
      *                     - "delete-confirm"
      *                     - "display"
      *                     - "fork"
+     *                     - "revision"
      * @param string $option
      *
      * @return string
@@ -199,8 +219,8 @@ class Repository
             return '/' . $this->id . '/delete';
         } else if ($type == 'delete-confirm') {
             return '/' . $this->id . '/delete/confirm';
-        } else if ($type == 'commit') {
-            return '/' . $this->id . '/' . $option;
+        } else if ($type == 'revision') {
+            return '/' . $this->id . '/rev/' . $option;
         }
         throw new Exception('Unknown link type');
     }