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;
}