X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=public%2Fmirror.php;h=27f3c61697454b87c354aea9db7ba90e7b96423f;hb=9754f6d5b5c0e15606cfe01d87df89fc0eae57df;hp=7c80fef26ec248fd34e3020f7e20d6a4689dfe0d;hpb=6e871d7422315a8b631e2d8031dea10785fd308c;p=m6w6%2Freplicator diff --git a/public/mirror.php b/public/mirror.php index 7c80fef..27f3c61 100644 --- a/public/mirror.php +++ b/public/mirror.php @@ -37,33 +37,32 @@ switch ($evt) { $response->getBody()->append("Not a configured event"); break; case "ping"; - $response->setResponseCode(204); - $response->setResponseStatus("PONG"); - break; case "push": - if (($json = json_decode($request->getBody()))) { - if (in_array($json->repository->owner->name, $owners, true)) { - $repo = $json->repository->full_name; - $path = $mirror . "/" . $repo; - if (is_dir($path) && chdir($path)) { - passthru("git fetch -p", $rv); - if ($rv == 0) { - $response->setResponseCode(200); - } - } elseif (mkdir($path, 0755, true) && chdir($path)) { - passthru("git clone --mirror " . escapeshellarg($repo) . " .", $rv); - if ($rv == 0) { - $response->setResponseCode(200); - } - } - } else { - $response->setResponseCode(403); - $response->getBody()->append("Invalid owner"); - } - } else { + if (!($json = json_decode($request->getBody()))) { $response->setResponseCode(415); $response->setContentType($request->getHeader("Content-Type")); $response->getBody()->append($request->getBody()); + } elseif (!in_array(isset($json->repository->owner->name)?$json->repository->owner->name:$json->repository->owner->login, $owners, true)) { + $response->setResponseCode(403); + $response->getBody()->append("Invalid owner"); + } else { + $repo = $json->repository->full_name; + $path = $mirror . "/" . $repo; + if (is_dir($path) && chdir($path)) { + passthru("git fetch -vp 2>&1", $rv); + if ($rv == 0) { + $response->setResponseCode(200); + } + } elseif (mkdir($path, 0755, true) && chdir($path)) { + $source = escapeshellarg($json->repository->clone_url); + $description = escapeshellarg($json->repository->description); + passthru("git clone --mirror $source . 2>&1", $rv); + passthru("git config gitweb.description $description 2>&1"); + unlink("description"); + if ($rv == 0) { + $response->setResponseCode(200); + } + } } break; }