raw download for older revisions
[phorkie.git] / src / phorkie / Repository.php
index 6c71b4733006130fa06b915f7ddcec75001c3887..c854cf167186455fc77049914b2c32212be936de 100644 (file)
@@ -118,6 +118,16 @@ class Repository
      * @return File[] Array of files
      */
     public function getFiles()
+    {
+        $files = $this->getFilePaths();
+        $arFiles = array();
+        foreach ($files as $name) {
+            $arFiles[] = new File($name, $this);
+        }
+        return $arFiles;
+    }
+
+    protected function getFilePaths()
     {
         if ($this->hash === null) {
             $hash = 'HEAD';
@@ -129,28 +139,23 @@ class Repository
             ->setOption('name-only')
             ->addArgument($hash)
             ->execute();
-        $files = explode("\n", trim($output));
-        $arFiles = array();
-        foreach ($files as $name) {
-            $arFiles[] = new File($name, $this);
-        }
-        return $arFiles;
+        return explode("\n", trim($output));
     }
 
     public function getFileByName($name, $bHasToExist = true)
     {
-        $base = basename($name);
-        if ($base != $name) {
-            throw new Exception('No directories supported for now');
-        }
+        $name = Tools::sanitizeFilename($name);
         if ($name == '') {
             throw new Exception_Input('Empty file name given');
         }
-        $fullpath = $this->workDir . '/' . $base;
-        if ($bHasToExist && !is_readable($fullpath)) {
-            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($base, $this);
+        return new File($name, $this);
     }
 
     public function hasFile($name)