aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/phorkie/File.php7
-rw-r--r--src/phorkie/Repository.php33
-rw-r--r--www/.htaccess1
-rw-r--r--www/raw.php7
4 files changed, 32 insertions, 16 deletions
diff --git a/src/phorkie/File.php b/src/phorkie/File.php
index bc0950f..acc44cd 100644
--- a/src/phorkie/File.php
+++ b/src/phorkie/File.php
@@ -102,7 +102,12 @@ class File
public function getLink($type, $option = null)
{
if ($type == 'raw') {
- return '/' . $this->repo->id . '/raw/' . $this->getFilename();
+ if ($this->repo->hash === null) {
+ return '/' . $this->repo->id . '/raw/' . $this->getFilename();
+ } else {
+ return '/' . $this->repo->id . '/rev-raw/' . $this->repo->hash
+ . '/' . $this->getFilename();
+ }
} else if ($type == 'tool') {
return '/' . $this->repo->id . '/tool/' . $option . '/' . $this->getFilename();
}
diff --git a/src/phorkie/Repository.php b/src/phorkie/Repository.php
index 6c71b47..c854cf1 100644
--- a/src/phorkie/Repository.php
+++ b/src/phorkie/Repository.php
@@ -119,6 +119,16 @@ class Repository
*/
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';
} else {
@@ -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)
diff --git a/www/.htaccess b/www/.htaccess
index 73ba7db..697b6ec 100644
--- a/www/.htaccess
+++ b/www/.htaccess
@@ -9,6 +9,7 @@ RewriteRule ^([0-9]+)/edit$ /edit.php?id=$1
RewriteRule ^([0-9]+)/fork$ /fork.php?id=$1
RewriteRule ^([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2
RewriteRule ^([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2
+RewriteRule ^([0-9]+)/rev-raw/(.+)/(.+)$ /raw.php?id=$1&rev=$2&file=$3
RewriteRule ^([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3
RewriteRule ^list$ /list.php
diff --git a/www/raw.php b/www/raw.php
index 28f7c56..8bda11e 100644
--- a/www/raw.php
+++ b/www/raw.php
@@ -17,5 +17,10 @@ if ($mimetype === null) {
$mimetype = 'text/plain';
}
header('Content-Type: ' . $mimetype);
-readfile($file->getFullPath());
+if ($repo->hash === null) {
+ //IIRC readfile is not so memory-intensive for big files
+ readfile($file->getFullPath());
+} else {
+ echo $file->getContent();
+}
?>