X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/39bd200baed00b5b63cc62ce947ef708710ac81c..882ce78e4fc3361288dbc3c453412556aa529c7d:/src/phorkie/Repository.php diff --git a/src/phorkie/Repository.php b/src/phorkie/Repository.php index 6c71b47..46b2f65 100644 --- a/src/phorkie/Repository.php +++ b/src/phorkie/Repository.php @@ -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) @@ -171,10 +176,23 @@ class Repository */ public function delete() { + $db = new Database(); + $db->getIndexer()->deleteRepo($this); + return Tools::recursiveDelete($this->workDir) && Tools::recursiveDelete($this->gitDir); } + public function getTitle() + { + $desc = $this->getDescription(); + if (trim($desc) != '') { + return $desc; + } + + return 'paste #' . $this->id; + } + public function getDescription() { if (!is_readable($this->gitDir . '/description')) { @@ -210,6 +228,8 @@ class Repository return '/' . $this->id; } else if ($type == 'fork') { return '/' . $this->id . '/fork'; + } else if ($type == 'doap') { + return '/' . $this->id . '/doap'; } else if ($type == 'delete') { return '/' . $this->id . '/delete'; } else if ($type == 'delete-confirm') { @@ -264,7 +284,9 @@ class Repository $arLineParts = explode(' ', trim($arOutput[$current + 4])); $commit->filesChanged = $arLineParts[0]; $commit->linesAdded = $arLineParts[3]; - $commit->linesDeleted = $arLineParts[5]; + if (isset($arLineParts[5])) { + $commit->linesDeleted = $arLineParts[5]; + } $current += 6;