public function forkLocal($repo)
{
$new = $this->fork($repo->gitDir);
+
\copy($repo->gitDir . '/description', $new->gitDir . '/description');
+ $new->getVc()
+ ->getCommand('config')
+ ->addArgument('remote.origin.title')
+ ->addArgument(file_get_contents($repo->gitDir . '/description'))
+ ->execute();
+
$this->index($new);
+
+ $not = new Notificator();
+ $not->create($new);
+
return $new;
}
- public function forkRemote($cloneUrl, $originalUrl)
+ public function forkRemote($cloneUrl, $originalUrl, $title = null)
{
$new = $this->fork($cloneUrl);
- file_put_contents(
- $new->gitDir . '/description',
- 'Fork of ' . $originalUrl
- );
+
+ $new->getVc()
+ ->getCommand('config')
+ ->addArgument('remote.origin.title')
+ ->addArgument($title)
+ ->execute();
+ if ($originalUrl != $cloneUrl) {
+ $new->getVc()
+ ->getCommand('config')
+ ->addArgument('remote.origin.homepage')
+ ->addArgument($originalUrl)
+ ->execute();
+ }
+
+ if ($title === null) {
+ $title = 'Fork of ' . $originalUrl;
+ }
+ file_put_contents($new->gitDir . '/description', $title);
+
$this->index($new);
+
+ $not = new Notificator();
+ $not->create($new);
+
return $new;
}
$rs = new Repositories();
$new = $rs->createNew();
$vc = $new->getVc();
- \rmdir($new->gitDir);//VersionControl_Git wants an existing dir, git clone not
- $vc->getCommand('clone')
+
+ //VersionControl_Git wants an existing dir, git clone not
+ \rmdir($new->gitDir);
+
+ $cmd = $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(
+ $GLOBALS['phorkie']['cfg']['gitdir'] . '/' . $new->id . '.git'
+ )
->addArgument($pathOrUrl)
- ->addArgument($new->workDir)
- ->execute();
- foreach (\glob($new->gitDir . '/hooks/*') as $hookfile) {
- \unlink($hookfile);
+ ->addArgument($new->workDir);
+ try {
+ $cmd->execute();
+ } catch (\Exception $e) {
+ //clean up, we've got no workdir otherwise
+ $new->delete();
+ throw $e;
}
+ $rs = new Repository_Setup($new);
+ $rs->afterInit();
+
+ //update info for dumb git HTTP transport
+ //the post-update hook should do that IMO, but does not somehow
+ $vc->getCommand('update-server-info')->execute();
+
return $new;
}