rename "secureAtLevel" variable since it does not define a level at all
[phorkie.git] / www / fork.php
index cc98df0cfd80ae2ca7634e38aea43fa6471a8b2d..6c96a6acb3b85d2918bcf12c10a353c1ddc53b41 100644 (file)
@@ -3,6 +3,7 @@
  * Fork a repository
  */
 namespace phorkie;
+$reqWritePermissions = true;
 require_once 'www-header.php';
 
 if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
@@ -14,15 +15,20 @@ $repo->loadFromRequest();
 
 $rs = new Repositories();
 $new = $rs->createNew();
-$new->getVc()->getCommand('clone')
-    ->addArgument($repo->repoDir)
-    ->addArgument($new->repoDir)
+$vc = $new->getVc();
+\rmdir($new->gitDir);//VersionControl_Git wants an existing dir, git clone not
+$vc->getCommand('clone')
+    //this should be setOption, but it fails with a = between name and value
+    ->addArgument('--separate-git-dir')
+    ->addArgument($GLOBALS['phorkie']['cfg']['gitdir'] . '/' . $new->id . '.git')
+    ->addArgument($repo->gitDir)
+    ->addArgument($new->workDir)
     ->execute();
-\copy($repo->repoDir . '/.git/description', $new->repoDir . '/.git/description');
-foreach (glob($new->repoDir . '/.git/hooks/*') as $hookfile) {
-    unlink($hookfile);
+\copy($repo->gitDir . '/description', $new->gitDir . '/description');
+foreach (\glob($new->gitDir . '/hooks/*') as $hookfile) {
+    \unlink($hookfile);
 }
 
 //FIXME: where to put fork source link?
 redirect($new->getLink('display'));
-?>
\ No newline at end of file
+?>