.
*/
/* TITLE: Title of the site */
$TITLE = "BarryServer : Git";
/* ROOT: The location of this script in your document root
* e.g. "example.com/abc/git.php" = "/abc",
* "example.com/git.php" = ""
*/
$ROOT = "";
/* SCRIPT: Name of the script after alias by server
* e.g. "example.com/git" -> "example.com/git.php" = "/git"
*/
$SCRIPT = "";
/* ORIGINAL: The location of all the git repositories */
$ORIGINAL = "/home/git";
/* BRANCH: The default branch to use */
$BRANCH = "master";
/* DESCRIPTION: Description of the site */
$DESCRIPTION = "A BarryServer Git Browser";
/* FOOTER: Text displayed at the bottom of each page */
$FOOTER = "BarryServer Git Browser";
ob_start();
?>
".$TITLE."";
$full = $ROOT.$SCRIPT;
foreach (explode("/", substr($path,1)) as $part) {
$full .= "/".$part;
echo "/".$part."";
}
echo "
\n";
if ($path === "/") {
echo " git clone git://".$_SERVER["SERVER_NAME"]."/<repo>.git
\n";
$repos = preg_grep("/(.git)$/", scandir($ORIGINAL));
foreach ($repos as $repo) {
$desc = file_get_contents($ORIGINAL."/".$repo."/description");
echo "".substr($repo,0,-4)." :: ".$desc."
";
}
} else {
$repo = explode("/", substr($path,1))[0];
if (!is_dir($ORIGINAL."/".$repo.".git")) {
echo " \n 404! Repository not found!
\n";
echo " [RETURN]\n \n";
} else {
$branch = explode("/", substr($path,1))[1];
echo " git clone ";
if ($branch !== $BRANCH && $branch !== "") {echo "-b ".$branch." ";}
echo "git://".$_SERVER["SERVER_NAME"]."/".$repo.".git\n";
$rest = implode("/",array_slice(explode("/", substr($path,1)),2));
chdir($ORIGINAL."/".$repo.".git");
if (!isset($branch)) {header("Location: ".$ROOT.$SCRIPT."/".$repo."/");}
if (substr($path,-1) !== "/" && $rest === "" && $branch !== "" && isset($branch)) {header("Location: ".$ROOT.$SCRIPT."/".$repo."/".$branch."/");}
if ($branch === "") {
echo "
\n";
$branches = shell_exec("git show-branch");
foreach (explode("\n",$branches) as $cbranch) {
echo preg_replace("/\[(.+)\] (.+)/","$1",$cbranch)."
";
}
} else {
$files = shell_exec("git ls-tree --full-name ".$branch." ".$rest);
if (substr($rest,-1) !== "/" && $rest !== "") {
if (explode(" ",explode("\n",$files)[0])[1] === "tree") {header("Location: ".$ROOT.$SCRIPT."/".$repo."/".$branch."/".$rest."/");}
}
if (substr($rest,-1) === "/" && $rest !== "") {
if (explode(" ",explode("\n",shell_exec("git ls-tree --full-name ".$branch." ".substr($rest,0,-1)))[0])[1] === "blob") {header("Location: ".$ROOT.$SCRIPT."/".$repo."/".$branch."/".substr($rest,0,-1));}
}
if ($rest === "") {$ctype = "tree";} else {
if (substr($rest,-1) === "/") {
$ctype = "tree";
} else {
$ctyle = "blob";
}
}
if ($ctype === "tree") {
$folderstxt = "";
if ($rest !== "") {$folderstxt .= " ../
\n";}
$filestxt = "";
foreach (explode("\n",$files) as $file) {
$name = explode(" ",$file);
if ($name[1] == "tree") {
$folderstxt .= " ".end(explode("/",explode("\t",$name[2])[1]))."/
\n";
}
if ($name[1] == "blob") {
$filestxt .= " ".end(explode("/",explode("\t",$name[2])[1]))."
\n";
}
}
echo "
\n";
echo $folderstxt;
echo $filestxt;
if ($readmefile = shell_exec("git ls-tree --full-name ".$branch." ".$rest."README")) {
$readme = shell_exec("git cat-file -p ".explode("\t",explode(" ",explode("\n",$readmefile)[0])[2])[0]);
$readme = preg_replace("/>/",">",$readme);
$readme = preg_replace("/","<",$readme);
$readme = preg_replace("/(^|\n)# (.+)/","$2
",$readme);
$readme = preg_replace("/(^|\n)## (.+)/","$2
",$readme);
$readme = preg_replace("/(^|\n)### (.+)/","$2
",$readme);
$readme = preg_replace("/(^|\n)#### (.+)/","$2
",$readme);
$readme = preg_replace("/(^|\n)##### (.+)/","$2
",$readme);
$readme = preg_replace("/(^|\n)###### (.+)/","$2
",$readme);
$readme = preg_replace("/```([^`]+)```/","$1
",$readme);
$readme = preg_replace("/`([^`]+)`/","$1",$readme);
$readme = preg_replace("/(^|\n)---($|\n)/","
",$readme);
$readme = preg_replace("/\n\n/","
",$readme);
$readme = preg_replace("/(^|\n) - (.*)/","$2",$readme);
$readme = preg_replace("/\[img src=\"([^\"]+)\"\]/","",$readme);
$readme = preg_replace("/\[link src=\"([^\"]+)\"\]/","$1",$readme);
echo "
\n ".$readme;
}
} else {
if (shell_exec("git ls-tree --full-name ".$branch." ".$rest)) {
$content = shell_exec("git cat-file -p ".explode("\t",explode(" ",explode("\n",$files)[0])[2])[0]);
if (isset($_GET["raw"])) {
ob_clean();
header("Content-type: text/plain");
echo $content;
die();
}
echo "Raw View";
echo "\n".htmlspecialchars($content)."
\n";
} else {
echo " \n 404! File not found!
\n";
echo " [RETURN]\n \n";
}
}
}
}
}
if ($DESCRIPTION !== "" && $path === "/") {
echo "
\n";
echo " ".$DESCRIPTION."\n";
}
if ($FOOTER !== "") {
echo "
\n";
echo " \n";
}
?>