.
 */
/* 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) - (.*)/","$2",$readme);
						$readme = preg_replace("/\n\n/","
",$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";
	}
?>