diff --git a/.gitmodules b/.gitmodules index e29da0e..13a18d0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "lib/tablesorter"] path = lib/tablesorter url = git@mojotrollz.eu:webcraft/lib_tablesorter.git +[submodule "lib/git"] + path = lib/git + url = git@mojotrollz.eu:webcraft/lib_git.git diff --git a/autoload.inc b/autoload.inc index 9682377..b9327a7 100644 --- a/autoload.inc +++ b/autoload.inc @@ -20,5 +20,4 @@ require_once dirname(__FILE__).'/docu/autoload.inc'; require_once dirname(__FILE__).'/files/autoload.inc'; require_once dirname(__FILE__).'/cron/autoload.inc'; require_once dirname(__FILE__).'/sai/autoload.inc'; -require_once dirname(__FILE__).'/lib/autoload.inc'; -require_once dirname(__FILE__).'/git/autoload.inc'; \ No newline at end of file +require_once dirname(__FILE__).'/lib/autoload.inc'; \ No newline at end of file diff --git a/git/Git.php b/git/Git.php deleted file mode 100644 index 51c8ec5..0000000 --- a/git/Git.php +++ /dev/null @@ -1,113 +0,0 @@ -clone_remote($source, $reference); - } else { - $repo->clone_from($source); - } - } else { - $repo->run('init'); - } - return $repo; - } - } - - /** - * Constructor - * - * Accepts a repository path - * - * @access public - * @param string repository path - * @param bool create if not exists? - * @return void - */ - public function __construct($repo_path = null, $create_new = false, $_init = true) { - if (is_string($repo_path)) { - $this->set_repo_path($repo_path, $create_new, $_init); - } - } - - /** - * Set the repository's path - * - * Accepts the repository path - * - * @access public - * @param string repository path - * @param bool create if not exists? - * @param bool initialize new Git repo if not exists? - * @return void - */ - public function set_repo_path($repo_path, $create_new = false, $_init = true) { - if (is_string($repo_path)) { - if ($new_path = realpath($repo_path)) { - $repo_path = $new_path; - if (is_dir($repo_path)) { - // Is this a work tree? - if (file_exists($repo_path."/.git") || is_dir($repo_path."/.git")) { - $this->repo_path = $repo_path; - $this->bare = false; - // Is this a bare repo? - } else if (is_file($repo_path."/config")) { - $parse_ini = parse_ini_file($repo_path."/config"); - if ($parse_ini['bare']) { - $this->repo_path = $repo_path; - $this->bare = true; - } - } else { - if ($create_new) { - $this->repo_path = $repo_path; - if ($_init) { - $this->run('init'); - } - } else { - throw new \Exception('"'.$repo_path.'" is not a git repository'); - } - } - } else { - throw new \Exception('"'.$repo_path.'" is not a directory'); - } - } else { - if ($create_new) { - if ($parent = realpath(dirname($repo_path))) { - mkdir($repo_path); - $this->repo_path = $repo_path; - if ($_init) $this->run('init'); - } else { - throw new \Exception('cannot create repository in non-existent directory'); - } - } else { - throw new \Exception('"'.$repo_path.'" does not exist'); - } - } - } - } - - /** - * Get the path to the git repo directory (eg. the ".git" directory) - * - * @access public - * @return string - */ - public function git_directory_path() { - return ($this->bare) ? $this->repo_path : $this->repo_path."/.git"; - } - - /** - * Tests if git is installed - * - * @access public - * @return bool - */ - public function test_git() { - $descriptorspec = array( - 1 => array('pipe', 'w'), - 2 => array('pipe', 'w'), - ); - $pipes = array(); - $resource = proc_open(Git::get_bin(), $descriptorspec, $pipes); - - $stdout = stream_get_contents($pipes[1]); - $stderr = stream_get_contents($pipes[2]); - foreach ($pipes as $pipe) { - fclose($pipe); - } - - $status = trim(proc_close($resource)); - return ($status != 127); - } - - /** - * Run a command in the git repository - * - * Accepts a shell command to run - * - * @access protected - * @param string command to run - * @return string - */ - protected function run_command($command) { - $descriptorspec = array( - 1 => array('pipe', 'w'), - 2 => array('pipe', 'w'), - ); - $pipes = array(); - /* Depending on the value of variables_order, $_ENV may be empty. - * In that case, we have to explicitly set the new variables with - * putenv, and call proc_open with env=null to inherit the reset - * of the system. - * - * This is kind of crappy because we cannot easily restore just those - * variables afterwards. - * - * If $_ENV is not empty, then we can just copy it and be done with it. - */ - if(count($_ENV) === 0) { - $env = NULL; - foreach($this->envopts as $k => $v) { - putenv(sprintf("%s=%s",$k,$v)); - } - } else { - $env = array_merge($_ENV, $this->envopts); - } - $cwd = $this->repo_path; - $resource = proc_open($command, $descriptorspec, $pipes, $cwd, $env); - - $stdout = stream_get_contents($pipes[1]); - $stderr = stream_get_contents($pipes[2]); - foreach ($pipes as $pipe) { - fclose($pipe); - } - - $status = trim(proc_close($resource)); - if ($status) throw new \Exception($stderr); - - return $stdout; - } - - /** - * Run a git command in the git repository - * - * Accepts a git command to run - * - * @access public - * @param string command to run - * @return string - */ - public function run($command) { - return $this->run_command(Git::get_bin()." ".$command); - } - - /** - * Runs a 'git status' call - * - * Accept a convert to HTML bool - * - * @access public - * @param bool return string with
- * @return string - */ - public function status($html = false) { - $msg = $this->run("status"); - if ($html == true) { - $msg = str_replace("\n", "
", $msg); - } - return $msg; - } - - /** - * Runs a `git add` call - * - * Accepts a list of files to add - * - * @access public - * @param mixed files to add - * @return string - */ - public function add($files = "*") { - if (is_array($files)) { - $files = '"'.implode('" "', $files).'"'; - } - return $this->run("add $files -v"); - } - - /** - * Runs a `git rm` call - * - * Accepts a list of files to remove - * - * @access public - * @param mixed files to remove - * @param Boolean use the --cached flag? - * @return string - */ - public function rm($files = "*", $cached = false) { - if (is_array($files)) { - $files = '"'.implode('" "', $files).'"'; - } - return $this->run("rm ".($cached ? '--cached ' : '').$files); - } - - - /** - * Runs a `git commit` call - * - * Accepts a commit message string - * - * @access public - * @param string commit message - * @param boolean should all files be committed automatically (-a flag) - * @return string - */ - public function commit($message = "", $commit_all = true) { - $flags = $commit_all ? '-av' : '-v'; - return $this->run("commit ".$flags." -m ".escapeshellarg($message)); - } - - /** - * Runs a `git clone` call to clone the current repository - * into a different directory - * - * Accepts a target directory - * - * @access public - * @param string target directory - * @return string - */ - public function clone_to($target) { - return $this->run("clone --local ".$this->repo_path." $target"); - } - - /** - * Runs a `git clone` call to clone a different repository - * into the current repository - * - * Accepts a source directory - * - * @access public - * @param string source directory - * @return string - */ - public function clone_from($source) { - return $this->run("clone --local $source ".$this->repo_path); - } - - /** - * Runs a `git clone` call to clone a remote repository - * into the current repository - * - * Accepts a source url - * - * @access public - * @param string source url - * @param string reference path - * @return string - */ - public function clone_remote($source, $reference) { - return $this->run("clone $reference $source ".$this->repo_path); - } - - /** - * Runs a `git clean` call - * - * Accepts a remove directories flag - * - * @access public - * @param bool delete directories? - * @param bool force clean? - * @return string - */ - public function clean($dirs = false, $force = false) { - return $this->run("clean".(($force) ? " -f" : "").(($dirs) ? " -d" : "")); - } - - /** - * Runs a `git branch` call - * - * Accepts a name for the branch - * - * @access public - * @param string branch name - * @return string - */ - public function create_branch($branch) { - return $this->run("branch $branch"); - } - - /** - * Runs a `git branch -[d|D]` call - * - * Accepts a name for the branch - * - * @access public - * @param string branch name - * @return string - */ - public function delete_branch($branch, $force = false) { - return $this->run("branch ".(($force) ? '-D' : '-d')." $branch"); - } - - /** - * Runs a `git branch` call - * - * @access public - * @param bool keep asterisk mark on active branch - * @return array - */ - public function list_branches($keep_asterisk = false) { - $branchArray = explode("\n", $this->run("branch")); - foreach($branchArray as $i => &$branch) { - $branch = trim($branch); - if (! $keep_asterisk) { - $branch = str_replace("* ", "", $branch); - } - if ($branch == "") { - unset($branchArray[$i]); - } - } - return $branchArray; - } - - /** - * Lists remote branches (using `git branch -r`). - * - * Also strips out the HEAD reference (e.g. "origin/HEAD -> origin/master"). - * - * @access public - * @return array - */ - public function list_remote_branches() { - $branchArray = explode("\n", $this->run("branch -r")); - foreach($branchArray as $i => &$branch) { - $branch = trim($branch); - if ($branch == "" || strpos($branch, 'HEAD -> ') !== false) { - unset($branchArray[$i]); - } - } - return $branchArray; - } - - /** - * Returns name of active branch - * - * @access public - * @param bool keep asterisk mark on branch name - * @return string - */ - public function active_branch($keep_asterisk = false) { - $branchArray = $this->list_branches(true); - $active_branch = preg_grep("/^\*/", $branchArray); - reset($active_branch); - if ($keep_asterisk) { - return current($active_branch); - } else { - return str_replace("* ", "", current($active_branch)); - } - } - - /** - * Runs a `git checkout` call - * - * Accepts a name for the branch - * - * @access public - * @param string branch name - * @return string - */ - public function checkout($branch) { - return $this->run("checkout $branch"); - } - - - /** - * Runs a `git merge` call - * - * Accepts a name for the branch to be merged - * - * @access public - * @param string $branch - * @return string - */ - public function merge($branch) { - return $this->run("merge $branch --no-ff"); - } - - - /** - * Runs a git fetch on the current branch - * - * @access public - * @return string - */ - public function fetch() { - return $this->run("fetch"); - } - - /** - * Add a new tag on the current position - * - * Accepts the name for the tag and the message - * - * @param string $tag - * @param string $message - * @return string - */ - public function add_tag($tag, $message = null) { - if ($message === null) { - $message = $tag; - } - return $this->run("tag -a $tag -m " . escapeshellarg($message)); - } - - /** - * List all the available repository tags. - * - * Optionally, accept a shell wildcard pattern and return only tags matching it. - * - * @access public - * @param string $pattern Shell wildcard pattern to match tags against. - * @return array Available repository tags. - */ - public function list_tags($pattern = null) { - $tagArray = explode("\n", $this->run("tag -l $pattern")); - foreach ($tagArray as $i => &$tag) { - $tag = trim($tag); - if ($tag == '') { - unset($tagArray[$i]); - } - } - - return $tagArray; - } - - /** - * Push specific branch to a remote - * - * Accepts the name of the remote and local branch - * - * @param string $remote - * @param string $branch - * @return string - */ - public function push($remote, $branch) { - return $this->run("push --tags $remote $branch"); - } - - /** - * Pull specific branch from remote - * - * Accepts the name of the remote and local branch - * - * @param string $remote - * @param string $branch - * @return string - */ - public function pull($remote, $branch) { - return $this->run("pull $remote $branch"); - } - - /** - * List log entries. - * - * @param strgin $format - * @return string - */ - public function log($format = null) { - if ($format === null) - return $this->run('log'); - else - return $this->run('log --pretty=format:"' . $format . '"'); - } - - /** - * Sets the project description. - * - * @param string $new - */ - public function set_description($new) { - $path = $this->git_directory_path(); - file_put_contents($path."/description", $new); - } - - /** - * Gets the project description. - * - * @return string - */ - public function get_description() { - $path = $this->git_directory_path(); - return file_get_contents($path."/description"); - } - - /** - * Sets custom environment options for calling Git - * - * @param string key - * @param string value - */ - public function setenv($key, $value) { - $this->envopts[$key] = $value; - } - -} - -/* End of file */ \ No newline at end of file diff --git a/git/autoload.inc b/git/autoload.inc deleted file mode 100644 index 3f1c2c2..0000000 --- a/git/autoload.inc +++ /dev/null @@ -1,2 +0,0 @@ - '', 'git_system' => ''); try{ - $repo = \SYSTEM\GIT\Git::open(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH)); + $repo = \GIT\Git::open(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH)); $result['git_project'] = ''.$repo->run('rev-parse --short HEAD').'
'; $result['git_project'] .= $repo->run('log -1 --pretty=%B'); @@ -20,7 +21,7 @@ class saimod_sys_git extends \SYSTEM\SAI\SaiModule { } try{ - $repo = \SYSTEM\GIT\Git::open(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH).\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL)); + $repo = \GIT\Git::open(\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEPATH).\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_SYSTEMPATHREL)); $result['git_system'] .= '
  • '; $result['git_system'] = ''.$repo->run('rev-parse --short HEAD').'
    '; $result['git_system'] .= $repo->run('log -1 --pretty=%B');