function git_read_projects($projectroot, $projectlist, $projdata = FALSE) { echo '<h1>' . $projectroot . '</h1>'; $projects = array(); if (isset($projectroot)) { if (is_dir($projectroot)) { if (isset($projectlist)) { foreach ($projectlist as $cat => $plist) { if (is_array($plist)) { $projs = array(); foreach ($plist as $pname => $ppath) { if (is_dir($projectroot . $ppath) && is_file($projectroot . $ppath . "/HEAD")) { if ($projdata) { $projs[] = git_project_info($projectroot, $ppath); } else { $projs[] = $ppath; } } } if (count($projs) > 0) { sort($projs); $projects[$cat] = $projs; } } } } else { $projects = git_recurse_projects($projectroot); $len = count($projects); $cut = strlen($projectroot); for ($i = 0; $i < $len; ++$i) { $p = substr($projects[$i], $cut + 1); if ($projdata) { $projects[$i] = git_project_info($projectroot, $p); } else { $projects[$i] = $p; } } } } else { return "Projectroot is not a directory"; } } else { return "No projectroot set"; } return $projects; }
function git_recurse_projects($dir) { $projects = array(); if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if (strpos($file, '.') !== 0 && is_dir($dir . "/" . $file)) { if (is_file($dir . "/" . $file . "/HEAD")) { $projects[] = $dir . "/" . $file; } else { $p2 = git_recurse_projects($dir . "/" . $file); $projects = array_merge($projects, $p2); } } } closedir($dh); } return $projects; }