aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-04-11 20:22:33 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-04-11 20:22:33 +0200
commit1c14a6bfb93c914374a6b2f96aec971f8c5b3053 (patch)
treefbc8ed02a6ad900b96dfe5259edba0bcdd0a9a66 /src
parentbf139cf4f0d6fb868d0f998d3213f7e681fbff92 (diff)
downloadphorkie-1c14a6bfb93c914374a6b2f96aec971f8c5b3053.tar.gz
phorkie-1c14a6bfb93c914374a6b2f96aec971f8c5b3053.zip
separate git and work directories - gives nicer public git clone urls
Diffstat (limited to 'src')
-rw-r--r--src/phorkie/Repositories.php23
-rw-r--r--src/phorkie/Repository.php55
-rw-r--r--src/phorkie/Repository/Post.php16
3 files changed, 61 insertions, 33 deletions
diff --git a/src/phorkie/Repositories.php b/src/phorkie/Repositories.php
index ef59dd7..dc3387b 100644
--- a/src/phorkie/Repositories.php
+++ b/src/phorkie/Repositories.php
@@ -5,7 +5,8 @@ class Repositories
{
public function __construct()
{
- $this->reposDir = $GLOBALS['phorkie']['cfg']['repos'];
+ $this->workDir = $GLOBALS['phorkie']['cfg']['workdir'];
+ $this->gitDir = $GLOBALS['phorkie']['cfg']['gitdir'];
}
/**
@@ -13,17 +14,21 @@ class Repositories
*/
public function createNew()
{
- chdir($this->reposDir);
- $dirs = glob('*', GLOB_ONLYDIR);
+ chdir($this->gitDir);
+ $dirs = glob('*.git', GLOB_ONLYDIR);
+ array_walk($dirs, function ($dir) { return substr($dir, 0, -4); });
sort($dirs, SORT_NUMERIC);
$n = end($dirs) + 1;
- unset($dirs);
- $dir = $this->reposDir . '/' . $n . '/';
+ chdir($this->workDir);
+ $dir = $this->workDir . '/' . $n . '/';
mkdir($dir, 0777);//FIXME
$r = new Repository();
$r->id = $n;
- $r->repoDir = $dir;
+ $r->workDir = $dir;
+ $r->gitDir = $this->gitDir . '/' . $n . '.git/';
+ mkdir($r->gitDir, 0777);//FIXME
+
return $r;
}
@@ -37,15 +42,15 @@ class Repositories
*/
public function getList($page = 0, $perPage = 10)
{
- chdir($this->reposDir);
- $dirs = glob('*', GLOB_ONLYDIR);
+ chdir($this->gitDir);
+ $dirs = glob('*.git', GLOB_ONLYDIR);
sort($dirs, SORT_NUMERIC);
$some = array_slice($dirs, $page * $perPage, $perPage);
$repos = array();
foreach ($some as $oneDir) {
$r = new Repository();
- $r->loadById($oneDir);
+ $r->loadById(substr($oneDir, 0, -4));
$repos[] = $r;
}
return $repos;
diff --git a/src/phorkie/Repository.php b/src/phorkie/Repository.php
index 6dec015..0117ec2 100644
--- a/src/phorkie/Repository.php
+++ b/src/phorkie/Repository.php
@@ -12,11 +12,18 @@ class Repository
public $id;
/**
- * Full path to the git repository
+ * Full path to the .git repository
*
* @var string
*/
- public $repoDir;
+ public $gitDir;
+
+ /**
+ * Full path to the work tree directory
+ *
+ * @var string
+ */
+ public $workDir;
/**
* Load Repository data from GET-Request
@@ -34,12 +41,26 @@ class Repository
throw new Exception_Input('Paste ID not numeric');
}
$this->id = (int)$_GET['id'];
+ $this->loadDirs();
+ }
- $repoDir = $GLOBALS['phorkie']['cfg']['repos'] . '/' . $this->id;
- if (!is_dir($repoDir)) {
- throw new Exception_NotFound('Paste not found');
+ protected function loadDirs()
+ {
+ $gitDir = $GLOBALS['phorkie']['cfg']['gitdir'] . '/' . $this->id . '.git';
+ if (!is_dir($gitDir)) {
+ throw new Exception_NotFound(
+ sprintf('Paste %d .git dir not found', $this->id)
+ );
+ }
+ $this->gitDir = $gitDir;
+
+ $workDir = $GLOBALS['phorkie']['cfg']['workdir'] . '/' . $this->id;
+ if (!is_dir($workDir)) {
+ throw new Exception_NotFound(
+ sprintf('Paste %d work dir not found', $this->id)
+ );
}
- $this->repoDir = $repoDir;
+ $this->workDir = $workDir;
}
public function loadById($id)
@@ -48,17 +69,12 @@ class Repository
throw new Exception_Input('Paste ID not numeric');
}
$this->id = (int)$id;
-
- $repoDir = $GLOBALS['phorkie']['cfg']['repos'] . '/' . $this->id;
- if (!is_dir($repoDir)) {
- throw new Exception_NotFound('Paste not found');
- }
- $this->repoDir = $repoDir;
+ $this->loadDirs();
}
public function getVc()
{
- return new \VersionControl_Git($this->repoDir);
+ return new \VersionControl_Git($this->gitDir);
}
/**
@@ -68,7 +84,7 @@ class Repository
*/
public function getFiles()
{
- $files = glob($this->repoDir . '/*');
+ $files = glob($this->workDir . '/*');
$arFiles = array();
foreach ($files as $path) {
$arFiles[] = new File($path, $this);
@@ -85,7 +101,7 @@ class Repository
if ($name == '') {
throw new Exception_Input('Empty file name given');
}
- $path = $this->repoDir . '/' . $base;
+ $path = $this->workDir . '/' . $base;
if ($bHasToExist && !is_readable($path)) {
throw new Exception_Input('File does not exist');
}
@@ -110,20 +126,21 @@ class Repository
*/
public function delete()
{
- return Tools::recursiveDelete($this->repoDir);
+ return Tools::recursiveDelete($this->workDir)
+ && Tools::recursiveDelete($this->gitDir);
}
public function getDescription()
{
- if (!is_readable($this->repoDir . '/.git/description')) {
+ if (!is_readable($this->gitDir . '/description')) {
return null;
}
- return file_get_contents($this->repoDir . '/.git/description');
+ return file_get_contents($this->gitDir . '/description');
}
public function setDescription($description)
{
- file_put_contents($this->repoDir . '/.git/description', $description);
+ file_put_contents($this->gitDir . '/description', $description);
}
/**
diff --git a/src/phorkie/Repository/Post.php b/src/phorkie/Repository/Post.php
index 8cd9323..6ff8df6 100644
--- a/src/phorkie/Repository/Post.php
+++ b/src/phorkie/Repository/Post.php
@@ -114,13 +114,19 @@ class Repository_Post
$rs = new Repositories();
$repo = $rs->createNew();
$vc = $repo->getVc();
- $vc->initRepository();
-
- foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) {
+ //$vc->initRepository();
+ $vc->getCommand('init')
+ //this should be setOption, but it fails with a = between name and value
+ ->addArgument('--separate-git-dir')
+ ->addArgument($GLOBALS['phorkie']['cfg']['gitdir'] . '/' . $repo->id)
+ ->addArgument($repo->workDir)
+ ->execute();
+
+ foreach (glob($repo->gitDir . '/hooks/*') as $hookfile) {
unlink($hookfile);
}
- touch($repo->repoDir . '/.git/git-daemon-export-ok');
+ touch($repo->gitDir . '/git-daemon-export-ok');
return $repo;
}
@@ -130,7 +136,7 @@ class Repository_Post
$num = -1;
do {
++$num;
- $files = glob($this->repo->repoDir . '/' . $prefix . $num . '.*');
+ $files = glob($this->repo->workDir . '/' . $prefix . $num . '.*');
} while (count($files));
return $prefix . $num;