$WEB_ROOT_FS = realpath(dirname(__FILE__));
$BASE_URL = "/";\r
-global $WEB_ROOT_FS, $BASE_URL, $IS_WEB_REQUEST;
+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;
$IS_WEB_REQUEST = false;\r
if(file_exists("../www/config.php")) require_once("../www/config.php");
if(isset($argv["1"])) {
switch($argv["1"]) {
- case "updatehook":
+ case "update":
gwvpcmdtool_UpdateHook();
break;
+ case "pre-receive":
+ gwvpcmdtool_PreReceive();
+ break;
default:
gwvpcmdtool_Usage();
}
function gwvpcmdtool_UpdateHook()
{
+ global $argv;
+ echo "got ".$argv[2].", ".$argv[3].", ".$argv[4]."\n";
+}
+
+function gwvpcmdtool_PreReceive()
+{
+ global $argv;
+
+ echo "got from prereceive ".$argv[2].", ".$argv[3].", ".$argv[4]."\n";\r
+ passthru("git rev-list --reverse ".$argv[3]." --not --all ");
}
?>
\ No newline at end of file
}
-function gwvpmini_CreateUpdateHookInRepo($repopath)
+function gwvpmini_CreateRepoHooks($repopath, $cmdpath)
{
- $fp = fopen("$repopath/hooks/$repopath", "w");
+ $fp = fopen("$repopath/hooks/pre-receive", "w");
+
+ if(!$fp) error_log("could not create pre-receive hook");
+
+ // TODO: think about this one
+ $script = '#!/bin/bash'."\n\n".'DCOMMIT=`cat`'."\n".'START=`echo $DCOMMIT|cut -d " " -f 1`'."\n".'END=`echo $DCOMMIT|cut -d " " -f 2`'."\n".'REF=`echo $DCOMMIT|cut -d " " -f 3`'."\n\n";
+ $script .= "php $cmdpath pre-receive ";
+ $script .= '$START $END $REF'."\n\n";
+ fwrite($fp, $script);
+
+ fclose($fp);
+
+ chmod("$repopath/hooks/pre-receive", 0755);
+
+
+ $fp = fopen("$repopath/hooks/update", "w");
if(!$fp) error_log("could not create update hook");
// TODO: think about this one
+ $script = "#!/bin/bash\n\n";
+ $script .= "php $cmdpath update ";
+ $script .= '$1 $2 $3'."\n\n";
+ fwrite($fp, $script);
+ fclose($fp);
+
+ chmod("$repopath/hooks/update", 0755);
}
function gwvpmini_gitBackendInterface()
{
// and this is where i re-code the git backend interface from scratch
- global $BASE_URL;
+ global $BASE_URL, $cmd_line_tool;
header_remove("Pragma");\r
header_remove("Cache-Control");\r
chdir("$repo_base/$repo.git");
exec("/usr/bin/git update-server-info");
+ if(!file_exists("$repo_base/$repo.git/hooks/pre-receive") || !file_exists("$repo_base/$repo.git/hooks/update")) {
+ error_log("WRITING HOOKS");
+ gwvpmini_CreateRepoHooks("$repo_base/$repo.git", $cmd_line_tool);
+ }
+
// so now we have the repo
// next we determine if this is a read or a write
}
//sleep(2);
-
+
+ $userdets = gwvpmini_getUser($username);
// this is where the fun, it ends.
$myoutput = "";
$procenv["GATEWAY_INTERFACE"] = "CGI/1.1";
$procenv["PATH_TRANSLATED"] = "/$repo_base/$repo.git/$euri";
$procenv["REQUEST_METHOD"] = "$rmeth";
+ $procenv["GIT_COMMITTER_NAME"] = $userdets["fullname"];
+ $procenv["GIT_COMMITTER_EMAIL"] = $userdets["email"];
$procenv["GIT_HTTP_EXPORT_ALL"] = "1";
$procenv["QUERY_STRING"] = "$qs";
$procenv["HTTP_USER_AGENT"] = "git/1.7.1";
$procenv["REMOTE_ADDR"] = $_SERVER["REMOTE_ADDR"];
$procenv["AUTH_TYPE"] = "Basic";
+ error_log("PROCENV: ".print_r($procenv,true));
+
if(isset($_SERVER["CONTENT_TYPE"])) {
$procenv["CONTENT_TYPE"] = $_SERVER["CONTENT_TYPE"];
} else {
$name = $repo["name"];
$desc = $repo["desc"];
$repo_base = gwvpmini_getConfigVal("repodir");
- $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2> /dev/null";
+ $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
echo "<tr><td><a href=\"$BASE_URL/view/$name\">$name</a></td><td>$desc</td>";
echo "<td>";\r
error_log("CMD: $cmd");
$name = $repo["name"];\r
$desc = $repo["desc"];
$repo_base = gwvpmini_getConfigVal("repodir");\r
- $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2> /dev/null";
+ $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
error_log("CMD: $cmd");
//system("$cmd");
$fls = popen($cmd, "r");
echo "<tr><td><a href=\"$BASE_URL/view/$name\">$name</a></td><td>$desc</td>";
echo "<td>";
$repo_base = gwvpmini_getConfigVal("repodir");
- $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2> /dev/null";
+ $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
error_log("CMD: $cmd");
//system("$cmd");
$fls = popen($cmd, "r");
$WEB_ROOT_FS = realpath(dirname(__FILE__));\r
$BASE_URL = dirname($_SERVER["PHP_SELF"]);\r
\r
-global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $db_username, $db_password, $IS_WEB_REQUEST;
+global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $db_username, $db_password, $IS_WEB_REQUEST, $cmd_line_tool;
$IS_WEB_REQUEST = true;\r
return;
}
+error_log("CMDLINETOOL: ".$cmd_line_tool);
+
// need to make this db agnostic
if(!gwvpmini_DBExists($db_name)) {
if(!is_dir("$data_directory/repos")) mkdir("$data_directory/repos");