{$proxy},%n {$proxy}date{$proxy}: {$proxy}%ad{$proxy},%n {$proxy}message{$proxy}: {$proxy}%s{$proxy}%n},'",
[
["pipe", "r"],
["pipe", "w"],
["pipe", "w"],
],
$pipes
);
$output = stream_get_contents($pipes[1]);
$string = str_replace(['"', $proxy], ['\\"', '"'], $output);
$string = "[" . rtrim($string, ",") . "]";
$json = json_decode($string, true);
return $json;
}
function parse_status(): array {
$process = proc_open(
"git status --porcelain=v2 --branch",
[
["pipe", "r"],
["pipe", "w"],
["pipe", "w"],
],
$pipes
);
$output = stream_get_contents($pipes[1]);
$status = ["files" => []];
foreach (explode("\n", $output) as $line) {
if (empty($line)) {
continue;
}
$start = substr($line, 0, 1);
if ($start == "#") {
if (str_contains($line, "branch.oid")) {
$status["oid"] = substr($line, strlen("# branch.oid "));
}
else if (str_contains($line, "branch.head")) {
$status["head"] = substr($line, strlen("# branch.head "));
}
else if (str_contains($line, "branch.upstream")) {
$status["upstream"] = substr($line, strlen("# branch.upstream "));
}
else if (str_contains($line, "branch.ab")) {
$status["ab"] = substr($line, strlen("# branch.ab "));
}
}
else {
$parts = explode(" ", $line);
$file = [
"filename" => $parts[count($parts) - 1],
"staged" => false,
"unstaged" => false,
"untracked" => false,
"new_file" => false,
"modified" => false,
];
if ($start == "1") {
$track_status = $parts[1];
if (substr($track_status, 0, 1) == "A") {
$file["staged"] = true;
$file["new_file"] = true;
}
else if (substr($track_status, 0, 1) == "M") {
$file["staged"] = true;
$file["modified"] = true;
}
if (substr($track_status, 1, 1) == "M") {
$file["unstaged"] = true;
$file["modified"] = true;
}
$file = array_merge($file, [
"previous_mode" => $parts[3],
"new_mode" => $parts[4],
"previous_id" => $parts[6],
"new_id" => $parts[7],
]);
}
else if ($start == "?") {
$file["untracked"] = true;
}
$status["files"][] = $file;
}
}
return $status;
}
foreach ($projects as $project) {
chdir($project);
echo $project . "
";
$status = parse_status();
foreach ($status["files"] as $file) {
var_dump($file);
}
foreach (parse_log() as $commit) {
// echo "$commit[message]
";
}
}