X-Git-Url: http://git.pjr.cc/?p=gwvp-mini.git;a=blobdiff_plain;f=gwvpmini%2Fgwvpmini_gitrepo.php;h=3c195073cf5a751f9501cc05bc32f1187f435a0f;hp=46c4f95790642942cf7b396bc49bd692dc60a575;hb=HEAD;hpb=b35dc95efeb3c44390afc4eaa0aa295949ef2f9e diff --git a/gwvpmini/gwvpmini_gitrepo.php b/gwvpmini/gwvpmini_gitrepo.php index 46c4f95..3c19507 100644 --- a/gwvpmini/gwvpmini_gitrepo.php +++ b/gwvpmini/gwvpmini_gitrepo.php @@ -55,6 +55,7 @@ function gwvpmini_RepoMainPageBody() if(gwvpmini_isLoggedIn()) { $repos = gwvpmini_GetOwnedRepos($_SESSION["username"]); + error_log("repos, ".print_r($repos, true)); if(!$repos) { echo "You currently own no repos
"; } else { @@ -63,23 +64,37 @@ function gwvpmini_RepoMainPageBody() foreach($repos as $repo) { $name = $repo["name"]; $desc = $repo["desc"]; - $repo_base = gwvpmini_getConfigVal("repodir"); - $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null"; - echo "$name$desc"; - echo ""; - // error_log("CMD: $cmd"); - //system("$cmd"); - $fls = popen($cmd, "r"); - $tks = ""; - if($fls !== false) while(!feof($fls)) { - $tks .= fread($fls,1024); - } + $stat = $repo["status"]; + $llog = ""; + if($stat != 0) { + switch($stat) { + case 1: + $llog = "Repo Administratively Disabled"; + break; + case 2: + $llog = "Repo Cloning from remote"; + break; + } + } else { - if($tks == "") { - echo "No Log Info Yet"; - } else echo $tks; - echo ""; - echo ""; + if($desc == "") $desc = "none"; + + $repo_base = gwvpmini_getConfigVal("repodir"); + $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 == "") { + $llog = "No Log Info Yet"; + } else $llog = $tks; + + } + echo "$name$desc$llog"; } echo ""; } @@ -94,20 +109,32 @@ function gwvpmini_RepoMainPageBody() foreach($contreps as $repo) { $name = $repo["name"]; $desc = $repo["desc"]; - $repo_base = gwvpmini_getConfigVal("repodir"); - $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); + $stat = $repo["status"]; + if($stat != 0) { + switch($stat) { + case 1: + $lastlog = "Repo Administratively Disabled"; + break; + case 2: + $lastlog = "Repo Cloning from remote"; + break; + } + } else { + $repo_base = gwvpmini_getConfigVal("repodir"); + $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; } - if($tks == "") { - $lastlog = "No Log Info Yet"; - } else $lastlog = $tks; - $owner = gwvpmini_getUser(null, null, $repo["owner"]); $repname = "$name"; $repown = gwvpmini_HtmlGravatar($owner["email"], 30, "
")."".$owner["username"].""; @@ -123,7 +150,8 @@ function gwvpmini_RepoMainPageBody() function gwvpmini_GitLogProvider() -{ +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; /* * The home page provider will: * 1) show the last 10 commits for every repository - though, excluding private repos @@ -148,10 +176,12 @@ function gwvpmini_GitLogProvider() foreach($repos as $repo) { $name = $repo["name"]; $desc = $repo["desc"]; + + if($desc == "") $desc = "-"; echo "$name$desc"; echo ""; $repo_base = gwvpmini_getConfigVal("repodir"); - $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null"; + $cmd = "$git_cli_cmd --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null"; // error_log("CMD: $cmd"); //system("$cmd"); $fls = popen($cmd, "r"); @@ -178,15 +208,15 @@ function gwvpmini_GitCreateRepoForm() echo "
"; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; + echo ""; + echo ""; echo ""; echo "
Create Repo
Repo Name
Repo Description
Repo NameName of your repo - letters, numbers _ and - only
Repo DescriptionDescription of your repo
Read Permissions"; echo ""; - echo "
The basic permissions for the initial repo creation
Clone FromEither a repo name (existing on this site) or a git url to clone from (blank for none)
"; echo "
"; @@ -200,6 +230,7 @@ function gwvpmini_RepoCreate() // 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"]); @@ -211,6 +242,47 @@ function gwvpmini_RepoCreate() $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"); header("Location: $BASE_URL/repos"); @@ -220,8 +292,9 @@ function gwvpmini_RepoCreate() gwvpmini_SendMessage("error", "Repo ".$_REQUEST["reponame"]." already exists"); 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 { @@ -279,5 +352,51 @@ function gwvpmini_CompressCommitId($cid) return $compressedcid; } + +function gwvpmini_GetCommitDetail($repo, $commitid) +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%an'"; + exec($cmd, $commitername, $returnvar); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%ae'"; + exec($cmd, $commiteremail, $returnvar); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%ct'"; + exec($cmd, $commitertime, $returnvar); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%s'"; + exec($cmd, $commiterlog, $returnvar); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%b'"; + exec($cmd, $commiterbody, $returnvar); +} + +function gwvpmini_GetCommitList($repo, $branch, $num=20) +{ + global $git_cli_cmd,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git log $commitid -1 --format='%an'"; + exec($cmd, $commitername, $returnvar); + +} + +function gwvpmini_GetRefList($repo) +{ + global $cmd_line_tool,$git_cli_cmd,$php_cli_cmd; + + $repo_base = gwvpmini_getConfigVal("repodir"); + + $cmd = "$git_cli_cmd --git-dir=$repo_base/$repo.git for-each-ref $commitid --format='%(objecttype):%(objectname):%(refname)'"; + error_log("command was $cmd"); + exec($cmd, $reflist, $returnvar); + + return $reflist; +} ?> \ No newline at end of file