barryserver-git
Barry Splitting into more pages + commit pages a6603d5 (2 years, 3 months ago)diff --git a/tree.php b/tree.php new file mode 100644 index 0000000..79e154b --- /dev/null +++ b/tree.php @@ -0,0 +1,97 @@ +<?php require_once $_SERVER["DOCUMENT_ROOT"]."/config.php"; ?> +<?php $SIDE_LINKS = array(); ?> +<?php + if (!isset($_GET["repo"])) {header("Location: /");die();} + $repo = $_GET["repo"]??""; + if (isset($_GET["repo"])) { + $PAGE_TITLE = $repo; + } + + if (!is_dir(GIT_DIR."/".$repo.".git")) { ?> +<?php require_once $_SERVER["DOCUMENT_ROOT"]."/head.php"; ?> +<main> + <h1>Repository not found</h1> + <article>The repository you were looking for was not found on this server. Please check the URL and look for errors. If there are no errors, then the repository does not exist. Please use the index to reach any repositories you wish to access.</article> +</main> +<?php require_once $_SERVER["DOCUMENT_ROOT"]."/foot.php"; ?> +<?php die();} + + $branch = $_GET["object"]??DEFAULT_BRANCH; + $path = $_GET["path"]??"."; + chdir(GIT_DIR."/".$repo.".git"); + $commits = shell_exec("git rev-list --all --count"); + if ($commits == 0) { + $SIDE_LINKS["git clone"] = "git://".$_SERVER["SERVER_NAME"]."/".$repo.".git"; + require_once $_SERVER["DOCUMENT_ROOT"]."/head.php"; + echo "<main><h1>".$repo."</h1>\n"; + echo "No commits yet</main>"; + require_once $_SERVER["DOCUMENT_ROOT"]."/foot.php"; + die(); + } + if ($branch === "") { + $SIDE_LINKS["git clone"] = "git://".$_SERVER["SERVER_NAME"]."/".$repo.".git"; + require_once $_SERVER["DOCUMENT_ROOT"]."/head.php"; + echo "<main><h1>".$repo."</h1>\n"; + $branches = shell_exec("git show-branch"); + foreach (explode("\n",$branches) as $cbranch) { + echo preg_replace("/\[(.+)\] (.+)/","<a href=\"/".$repo."/tree/$1\" class=\"branch\">$1</a><br>",$cbranch); + } + } else { + $files = shell_exec("git ls-tree --full-name ".escapeshellarg($branch)." ".escapeshellarg($path)); + if (substr($path,-1) !== "/" && $path !== "") { + if (explode(" ",explode("\n",$files)[0])[1] === "tree") { + header("Location: /".$repo."/tree/".$branch."/".$path."/"); + die(); + } + } + if (substr($path,-1) !== "/" && $path !== "") { + if (count(explode("\n",$files)) === 1) { + header("Location: /".$repo."/blob/".$branch."/".$path); + die(); + } + } + if (substr($path,-1) === "/" && $path !== "") { + if (explode(" ",explode("\n",shell_exec("git ls-tree --full-name ".escapeshellarg($branch)." ".escapeshellarg(substr($path,0,-1))))[0])[1] === "blob") { + header("Location: /".$repo."/blob/".$branch."/".substr($path,0,-1)); + die(); + } + } + $SIDE_LINKS["git clone"] = "git://".$_SERVER["SERVER_NAME"]."/".$repo.".git"; + if ($path == ".") {$SIDE_LINKS["Branches"] = "/".$repo."/tree/";} + $SIDE_LINKS["Show History"] = "/".$repo."/commits/".$branch."/".$path; + if ($path !== ".") { + $PAGE_TITLE = basename($path)."/ @ ".$PAGE_TITLE; + } + require_once $_SERVER["DOCUMENT_ROOT"]."/head.php"; ?> +<main> + <h1><?= $repo ?></h1> +<?php $lastcommit = shell_exec("git log --summary --quiet --oneline --abbrev-commit --format=format:'<b>%an</b> %s <span><a href=\"/".escapeshellcmd($repo)."/commit/%H/".escapeshellcmd($path)."\">%h</a> (%ar)</span>' -n 1 ".escapeshellarg($branch)." -- ".escapeshellarg($path)); + echo "<span class=\"last-commit\">".$lastcommit."</span>"; + $folderstxt = ""; + if ($path !== ".") {$folderstxt .= " <a href=\"../\" class=\"folder\">../</a><br>\n";} + $filestxt = ""; + foreach (explode("\n",$files) as $file) { + $name = explode(" ",$file); + if ($name[1] == "tree") { + $folderstxt .= " <a href=\"/".$repo."/tree/".$branch."/".explode("\t",$name[2])[1]."/\" class=\"folder\">".end(explode("/",explode("\t",$name[2])[1]))."/</a><br>\n"; + } + if ($name[1] == "blob") { + $filestxt .= " <a href=\"/".$repo."/blob/".$branch."/".explode("\t",$name[2])[1]."\" class=\"file\">".end(explode("/",explode("\t",$name[2])[1]))."</a><br>\n"; + } + } + echo $folderstxt; + echo $filestxt; + if ($readmefile = shell_exec("git ls-tree --full-name ".escapeshellarg($branch)." ".escapeshellarg($rest)."README.")) { + $readme = shell_exec("git cat-file -p ".explode("\t",explode(" ",explode("\n",$readmefile)[0])[2])[0]." | md2html"); + echo "\n </main><main>".$readme; + } + } +?> +</main> +<?php +if ($path === "." && $branch) { +$desc = file_get_contents(GIT_DIR."/".$repo.".git/description"); +echo "<main class=\"aside\"><h1>About</h1>".$desc."</main>"; +} +?> +<?php require_once $_SERVER["DOCUMENT_ROOT"]."/foot.php"; ?>