X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=public%2Fmirror.php;h=57970db17d73da21aedc18e732d98717713ec00d;hb=68c3880ed7004766b6d7208dbd576c74439d68d8;hp=7c80fef26ec248fd34e3020f7e20d6a4689dfe0d;hpb=6e871d7422315a8b631e2d8031dea10785fd308c;p=m6w6%2Freplicator diff --git a/public/mirror.php b/public/mirror.php index 7c80fef..57970db 100644 --- a/public/mirror.php +++ b/public/mirror.php @@ -41,29 +41,31 @@ switch ($evt) { $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($json->repository->owner->name, $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; }