From c05c510242a32b196d0c943a36f2514075e3e73d Mon Sep 17 00:00:00 2001 From: Paul J R Date: Fri, 26 Oct 2012 20:54:04 +1100 Subject: [PATCH] add some functions to pull git infomation from a repo --- bin/gwvpminicmdtool.php | 16 ++++++++----- gwvpmini/gwvpmini_gitbackend.php | 17 ++++++++------ gwvpmini/gwvpmini_gitrepo.php | 43 ++++++++++++++++++++++++++++++++++++++ www/config.php | 4 +++ www/index.php | 1 + 5 files changed, 68 insertions(+), 13 deletions(-) diff --git a/bin/gwvpminicmdtool.php b/bin/gwvpminicmdtool.php index 3f59778..3d3e10d 100644 --- a/bin/gwvpminicmdtool.php +++ b/bin/gwvpminicmdtool.php @@ -4,6 +4,8 @@ $WEB_ROOT_FS = realpath(dirname(__FILE__)); $BASE_URL = "/"; global $WEB_ROOT_FS, $BASE_URL, $IS_WEB_REQUEST, $data_directory, $db_type, $db_name, $db_username, $db_password, $IS_WEB_REQUEST, $cmd_line_tool; +global $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; + $IS_WEB_REQUEST = false; if(file_exists("$WEB_ROOT_FS/../www/config.php")) require_once("$WEB_ROOT_FS/../www/config.php"); @@ -74,7 +76,7 @@ function gwvpcmdtool_Usage() function gwvpcmdtool_BackGroundClone() { // here we parse arguments and have stuff with things and its 6am why am i doing this right now? - global $data_directory, $argv; + global $data_directory, $argv, $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; $repo_base = gwvpmini_getConfigVal("repodir"); @@ -85,7 +87,7 @@ function gwvpcmdtool_BackGroundClone() echo "Would actually clone $from to $to in $data_directory\n"; //sleep(20); - $cmd = "git clone --bare $from $repo_base/$to.git"; + $cmd = "$git_cli_cmd clone --bare $from $repo_base/$to.git"; exec($cmd); $rn = gwvpmini_getRepo(null, $to, null); $rid = $rn["id"]; @@ -100,7 +102,7 @@ function gwvpcmdtool_BackGroundClone() // update will log things like branch and tag creations function gwvpcmdtool_UpdateHook() { - global $argv; + global $argv, $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; //echo "got ".$argv[2].", ".$argv[3].", ".$argv[4]."\n"; if(preg_match("/^000000+$/", $argv[5])) { // createion of tag or branch @@ -121,7 +123,7 @@ function gwvpcmdtool_UpdateHook() // pre-receive logs all commit info function gwvpcmdtool_PreReceive() { - global $argv; + global $argv, $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; //echo "got from prereceive ".$argv[2].", ".$argv[3].", ".$argv[4]."\n"; @@ -131,7 +133,7 @@ function gwvpcmdtool_PreReceive() $regspl = explode("/", $ref); $branch = $regspl[2]; - $fp = popen("git rev-list --reverse ".$argv[5]." --not --all ", "r"); + $fp = popen("$git_cli_cmd rev-list --reverse ".$argv[5]." --not --all ", "r"); if($fp) while(!feof($fp)) { $line = trim(fgets($fp)); if($line != "") { @@ -149,7 +151,9 @@ function gwvpcmdtool_PreReceive() function gwvpcmdtool_getCommitIdDetails($commitid) { - $rs = popen("git log --pretty=format:\"%at%n%ce%n%an%n%s\" $commitid -1 2> /dev/null", "r"); + global $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; + + $rs = popen("$git_cli_cmd log --pretty=format:\"%at%n%ce%n%an%n%s\" $commitid -1 2> /dev/null", "r"); $ret = array(); if($rs) { $ret["date"] = trim(fgets($rs)); diff --git a/gwvpmini/gwvpmini_gitbackend.php b/gwvpmini/gwvpmini_gitbackend.php index 8ea3511..c2e5455 100644 --- a/gwvpmini/gwvpmini_gitbackend.php +++ b/gwvpmini/gwvpmini_gitbackend.php @@ -59,7 +59,7 @@ function gwvpmini_CreateRepoHooks($repopath, $cmdpath, $reponame) function gwvpmini_gitBackendInterface() { // and this is where i re-code the git backend interface from scratch - global $BASE_URL, $cmd_line_tool; + global $BASE_URL, $cmd_line_tool, $git_cli_cmd; header_remove("Pragma"); header_remove("Cache-Control"); @@ -226,6 +226,9 @@ function gwvpmini_canManageRepo($userid, $repoid) // TODO: this whole bit needs a re-write - seriously, like totally! function gwvpmini_callGitBackend($username, $repo) { + + global $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; + // this is where things become a nightmare $fh = fopen('php://input', "r"); @@ -291,7 +294,7 @@ function gwvpmini_callGitBackend($username, $repo) $pwd = "/$repo_base/"; - $proc = proc_open("/usr/lib/git-core/git-http-backend", array(array("pipe","rb"),array("pipe","wb"),array("file","/tmp/err", "a")), $pipes, $pwd, $procenv); + $proc = proc_open("$git_backend_cmd", array(array("pipe","rb"),array("pipe","wb"),array("file","/tmp/err", "a")), $pipes, $pwd, $procenv); $untilblank = false; while(!$untilblank&&!feof($pipes[1])) { @@ -452,18 +455,18 @@ function gwvpmini_repoExists($name) // 2 - only owner can see anything function gwvpmini_createGitRepo($name, $ownerid, $desc, $defperms, $clonefrom, $isremoteclone) { - global $cmd_line_tool; + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; $repo_base = gwvpmini_getConfigVal("repodir"); if($clonefrom !== false) { error_log("how did i end up in clonefrom? $clonefrom"); if(!$isremoteclone) { - exec("/usr/bin/git clone --bare $repo_base/$clonefrom.git $repo_base/$name.git >> /tmp/gitlog 2>&1"); + exec("$git_cli_cmd clone --bare $repo_base/$clonefrom.git $repo_base/$name.git >> /tmp/gitlog 2>&1"); gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom); } else { // we do this from an outside call in the background - $cmd = "/usr/bin/php $cmd_line_tool $clonefrom $name backgroundclone >> /tmp/gitlog 2>&1 &"; + $cmd = "$php_cli_cmd $cmd_line_tool $clonefrom $name backgroundclone >> /tmp/gitlog 2>&1 &"; error_log("cmd called as $cmd"); exec($cmd); gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom); @@ -477,9 +480,9 @@ function gwvpmini_createGitRepo($name, $ownerid, $desc, $defperms, $clonefrom, $ // phew, this works, but i tell you this - bundles arent quite as nice as they should be // error_log("would create $repo_base/$name.git"); - exec("/usr/bin/git init $repo_base/$name.git --bare >> /tmp/gitlog 2>&1"); + exec("$git_cli_cmd init $repo_base/$name.git --bare >> /tmp/gitlog 2>&1"); chdir("$repo_base/$name.git"); - exec("/usr/bin/git update-server-info"); + exec("$git_cli_cmd update-server-info"); // gwvpmini_AddRepo($reponame, $repodesc, $repoowner, $defaultperms = 0) gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom); diff --git a/gwvpmini/gwvpmini_gitrepo.php b/gwvpmini/gwvpmini_gitrepo.php index e20532e..01a6862 100644 --- a/gwvpmini/gwvpmini_gitrepo.php +++ b/gwvpmini/gwvpmini_gitrepo.php @@ -351,5 +351,48 @@ function gwvpmini_CompressCommitId($cid) return $compressedcid; } + +function gwvpmini_GetCommitDetail($repo, $commitid) +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%an'"; + exec($cmd, $commitername, $returnvar); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%ae'"; + exec($cmd, $commiteremail, $returnvar); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%ct'"; + exec($cmd, $commitertime, $returnvar); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%s'"; + exec($cmd, $commiterlog, $returnvar); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%b'"; + exec($cmd, $commiterbody, $returnvar); +} + +function gwvpmini_GetCommitList($repo, $branch, $num=20) +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git log $commitid -1 --format='%an'"; + exec($cmd, $commitername, $returnvar); + +} + +function gwvpmini_GetRefList($repo) +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$cmd_line_tool --git-dir=$repo_base/$repo.git for-each-ref $commitid --format='%(objecttype):%(objectname):%(refname)'"; + exec($cmd, $reflist, $returnvar); +} ?> \ No newline at end of file diff --git a/www/config.php b/www/config.php index 6c195f4..c062045 100644 --- a/www/config.php +++ b/www/config.php @@ -13,5 +13,9 @@ $db_password = ""; $cmd_line_tool = realpath("../bin/gwvpminicmdtool.php"); +$git_backend_cmd = "/usr/lib/git-core/git-http-backend"; +$git_cli_cmd = "/usr/bin/git"; +$php_cli_cmd = "/usr/bin/php"; + //error_log("included config file"); ?> \ No newline at end of file diff --git a/www/index.php b/www/index.php index 4dc08e8..b894fd8 100644 --- a/www/index.php +++ b/www/index.php @@ -4,6 +4,7 @@ $WEB_ROOT_FS = realpath(dirname(__FILE__)); $BASE_URL = dirname($_SERVER["PHP_SELF"]); global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $db_username, $db_password, $IS_WEB_REQUEST, $cmd_line_tool; +global $git_backend_cmd, $git_cli_cmd, $php_cli_cmd, $data_directory, $cmd_line_tool; $IS_WEB_REQUEST = true; -- 1.7.0.4