$CALL_ME_FUNCTIONS["repoadmin"] = "gwvpmini_RepoCallMe";
-$HOME_PAGE_PROVIDERS["gitlog"] = "gwvpmini_GitLogProvider";\r
+$HOME_PAGE_PROVIDERS["00gitlog"] = "gwvpmini_GitLogProvider";\r
\r
\r
// the home_page_provders bit is an array\r
function gwvpmini_RepoCallMe()\r
{\r
\r
- error_log("in repoadmin callme - err?");
- error_log(print_r($_REQUEST, true));\r
+ // error_log("in repoadmin callme - err?");
+ // error_log(print_r($_REQUEST, true));\r
if(isset($_REQUEST["q"])) {
- error_log("in repoadmin callme, for Q");\r
+ // error_log("in repoadmin callme, for Q");\r
$query = $_REQUEST["q"];\r
$qspl = explode("/", $query);\r
if(isset($qspl[0])) {\r
if($qspl[0] == "repos") {
- error_log("in repos call");
+ // error_log("in repos call");
if(isset($qspl[1])) {
if($qspl[1] == "create") {
return "gwvpmini_RepoCreate";
return "gwvpmini_RepoMainPage";
}
} else {\r
- error_log("i got here, where next?");\r
+ // error_log("i got here, where next?");\r
return "gwvpmini_RepoMainPage";
}\r
} else return false;\r
global $BASE_URL;
if(gwvpmini_isLoggedIn()) {
- gwvpmini_GitCreateRepoForm();
$repos = gwvpmini_GetOwnedRepos($_SESSION["username"]);
if(!$repos) {
echo "You currently own no repos<br>";
foreach($repos as $repo) {
$name = $repo["name"];
$desc = $repo["desc"];
+
+ if($desc == "") $desc = "none";
+
+ $repo_base = gwvpmini_getConfigVal("repodir");
+ $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
- $repo_base = gwvpmini_getConfigVal("repodir");\r
- $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2>&1";\r
- error_log("CMD: $cmd");\r
- system("$cmd");\r
+ // error_log("CMD: $cmd");
+ //system("$cmd");
+ $fls = popen($cmd, "r");
+ $tks = "";
+ if($fls !== false) while(!feof($fls)) {
+ $tks .= fread($fls,1024);
+ }
+
+ if($tks == "") {
+ echo "No Log Info Yet";
+ } else echo $tks;
echo "</td>";
echo "</tr>";
}
echo "</table>";
}
+ gwvpmini_GitCreateRepoForm();\r
+
+
+ $contreps = gwvpmini_GetContributedRepos($_SESSION["username"]);
+
+ if($contreps !== false) {
+ echo "<h2>Repos you contribute to</h2>";
+ echo "<table border=\"1\"><tr><th>Repo Name</th><th>Owner</th><th>Repo Description</th><th>Last Log</th></tr>";
+ foreach($contreps as $repo) {
+ $name = $repo["name"];\r
+ $desc = $repo["desc"];
+ $repo_base = gwvpmini_getConfigVal("repodir");\r
+ $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
+ // error_log("CMD: $cmd");
+ //system("$cmd");
+ $fls = popen($cmd, "r");
+ $tks = "";
+ if($fls !== false) while(!feof($fls)) {
+ $tks .= fread($fls,1024);
+ }
+
+ if($tks == "") {
+ $lastlog = "No Log Info Yet";
+ } else $lastlog = $tks;
+
+ $owner = gwvpmini_getUser(null, null, $repo["owner"]);
+ $repname = "<a href=\"$BASE_URL/view/$name\">$name</a>";
+ $repown = gwvpmini_HtmlGravatar($owner["email"], 30, "<br>")."<a href=\"$BASE_URL/user/".$owner["username"]."\">".$owner["username"]."</a>";
+
+
+ echo "<tr><td>$repname</td><td>$repown</td><td>$desc</td><td>$lastlog</td></tr>";
+ }
+ echo "</table>";
+ }
}
return true;
}
foreach($repos as $repo) {
$name = $repo["name"];
$desc = $repo["desc"];
+
+ if($desc == "") $desc = "-";
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>&1";
- error_log("CMD: $cmd");
- system("$cmd");
+ $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
+ // error_log("CMD: $cmd");
+ //system("$cmd");
+ $fls = popen($cmd, "r");
+ $tks = "";
+ if($fls !== false) while(!feof($fls)) {
+ $tks .= fread($fls,1024);
+ }
+
+ if($tks == "") {
+ echo "No Log Info Yet";
+ } else echo $tks;
echo "</td>";
echo "</tr>";
}
echo "<form method=\"post\" action=\"$BASE_URL/repos/create\">";
echo "<table border=\"1\">";
echo "<tr><th colspan=\"2\">Create Repo</th></tr>";
- echo "<tr><th>Repo Name</th><td><input type=\"text\" name=\"reponame\"></td></tr>";
- echo "<tr><th>Repo Description</th><td><input type=\"text\" name=\"repodesc\"></td></tr>";
+ echo "<tr><th>Repo Name</th><td><input type=\"text\" name=\"reponame\"></td><td>Name of your repo - letters, numbers _ and - only</td></tr>";
+ echo "<tr><th>Repo Description</th><td><input type=\"text\" name=\"repodesc\"></td><td>Description of your repo</td></tr>";
echo "<tr><th>Read Permissions</th><td>";
echo "<select name=\"perms\">";
echo "<option value=\"perms-public\">Anyone Can Read</option>";
echo "<option value=\"perms-registered\">Must be Registered To Read</option>";
echo "<option value=\"perms-onlywrite\">Only Writers can Read</option>";
- echo "</select>";
- echo "</td></tr>";
+ echo "</select></td><td>The basic permissions for the initial repo creation</td></tr>";
+ echo "<tr><th>Clone From</th><td><input type=\"text\" name=\"clonefrom\"></td><td>Either a repo name (existing on this site) or a git url to clone from (blank for none)</td></tr>";
echo "<tr><td colspan=\"2\"><input type=\"submit\" name=\"Create\" value=\"Create\"></td></tr>";
echo "</table>";
echo "</form>";
// TODO: check the stuff out
// first reponame
$inputcheck = true;
+
// remove a .git at the end if it was input
$_REQUEST["reponame"] = preg_replace("/\.git$/", "", $_REQUEST["reponame"]);
$inputcheckerror = "Repo name contains invalid characters, repos can only contain a-z, A-Z, 0-9, _, - and .";
}
+ $clonefrom = false;
+ $fromremote = false;
+ if(isset($_REQUEST["clonefrom"])) {
+ if($_REQUEST["clonefrom"] != "") {
+ $clonefrom = $_REQUEST["clonefrom"];
+ if(preg_match("/git.*:\/\/.*/", $clonefrom)>0) {
+ $fromremote = true;
+ }
+ if(preg_match("/http.*\:\/\//", $clonefrom)>0) $fromremote = true;
+ }
+ }
+
+ if($clonefrom !== false && $fromremote == false) {
+ // check the local repo exists
+ $rn = gwvpmini_getRepo(null, $clonefrom, null);
+ $uid = $_SESSION["id"];
+
+ if($rn == false) {
+ gwvpmini_SendMessage("error", "local repo $clonefrom given as upstream clone, however $clonefrom doesnt exist on this site (or you cant read it unbake)");
+ header("Location: $BASE_URL/repos");
+ return;
+ }
+
+ // resolve repo permissions on the read/clone
+ if(gwvpmini_GetRepoPerm($rn["id"], $uid) < 1) {
+ gwvpmini_SendMessage("error", "local repo $clonefrom given as upstream clone, however $clonefrom doesnt exist on this site (or you cant read it bake)");
+ header("Location: $BASE_URL/repos");
+ return;
+ }
+ }
+
+ $defperms = "a";
+ switch($_REQUEST["perms"]) {
+ case "perms-registered":
+ $defperms = "r";
+ break;
+ case "perms-onlywrite":
+ $defperms = "x";
+ break;
+ }
+
if(!$inputcheck) {
gwvpmini_SendMessage("error", "$inputcheckerror");\r
header("Location: $BASE_URL/repos");
gwvpmini_SendMessage("error", "Repo ".$_REQUEST["reponame"]." already exists");\r
header("Location: $BASE_URL/repos");
} else {
- gwvpmini_createGitRepo($_REQUEST["reponame"], $_SESSION["id"], $_REQUEST["repodesc"], $_REQUEST["perms"]);
- gwvpmini_SendMessage("info", "Repo ".$_REQUEST["reponame"]." has been created");
+ if(gwvpmini_createGitRepo($_REQUEST["reponame"], $_SESSION["id"], $_REQUEST["repodesc"], $defperms, $clonefrom, $fromremote)) {
+ gwvpmini_SendMessage("info", "Repo ".$_REQUEST["reponame"]." has been created");
+ }
header("Location: $BASE_URL/repos");
}
} else {
if(file_exists("$repo_base/$reponame.git")) return true;
}
+
+function gwvpmini_RemoveRepo($rid)
+{
+ $repo_base = gwvpmini_getConfigVal("repodir");
+
+ $repdet = gwvpmini_getRepo(null, null, $rid);
+
+ $rname = $repdet["name"];
+
+ // error_log("FROM PANTS:".print_r($repdet,true)." ----------- ".print_r($rname, true));
+
+ if($repdet != false && $rname != "") {
+ if(file_exists("$repo_base/$rname.git")) {
+ // recursive remove - frightening
+ if(gwvpmini_RecursiveDelete("$repo_base/$rname.git")) {
+ gwvpmini_RemoveRepoDB($rid);
+ }
+ }
+ } return false;
+}
+
+function gwvpmini_RecursiveDelete($fpath)
+{
+ // error_log("RECURSEDETELE: ".$fpath);
+ if(is_file($fpath)){\r
+ return @unlink($fpath);\r
+ }\r
+ elseif(is_dir($fpath)){\r
+ $scan = glob(rtrim($fpath,'/').'/*');\r
+ foreach($scan as $index=>$path){\r
+ gwvpmini_RecursiveDelete($path);\r
+ }\r
+ return @rmdir($fpath);\r
+ }
+}
+
+function gwvpmini_CompressCommitId($cid)
+{
+ $compressedcid = substr($cid, 0, 5)."...".substr($cid, strlen($cid)-5, strlen($cid));
+
+ return $compressedcid;
+}
+
?>
\ No newline at end of file