diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2012-09-19 23:52:07 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2012-09-19 23:52:07 +0200 |
| commit | 8701af280fa5a9c83827cdd0e2ae335d2512a3a7 (patch) | |
| tree | fb6acda3b21f358e5879bd843774f2257f4b4191 /src | |
| parent | e8151ad24cb9f4951ea1f29f5878248e584b8372 (diff) | |
| download | phorkie-8701af280fa5a9c83827cdd0e2ae335d2512a3a7.tar.gz phorkie-8701af280fa5a9c83827cdd0e2ae335d2512a3a7.zip | |
move forking code to separate class
Diffstat (limited to 'src')
| -rw-r--r-- | src/phorkie/Forker.php | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/phorkie/Forker.php b/src/phorkie/Forker.php new file mode 100644 index 0000000..3425a72 --- /dev/null +++ b/src/phorkie/Forker.php @@ -0,0 +1,44 @@ +<?php +namespace phorkie; + +class Forker +{ + public function forkLocal($repo) + { + $new = $this->fork($repo->gitDir); + \copy($repo->gitDir . '/description', $new->gitDir . '/description'); + return $new; + } + + public function forkRemote($url) + { + $new = $this->fork($url); + file_put_contents( + $new->gitDir . '/description', + 'Fork of ' . $url + ); + return $new; + } + + + protected function fork($pathOrUrl) + { + $rs = new Repositories(); + $new = $rs->createNew(); + $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($pathOrUrl) + ->addArgument($new->workDir) + ->execute(); + foreach (\glob($new->gitDir . '/hooks/*') as $hookfile) { + \unlink($hookfile); + } + return $new; + } +} + +?> |
