Remove dead PHP code
This commit is contained in:
parent
43dba9c53d
commit
0e3e1a978f
|
@ -21,11 +21,6 @@ echo "hi\n";
|
||||||
function outrunner($msg) {
|
function outrunner($msg) {
|
||||||
try {
|
try {
|
||||||
runner($msg);
|
runner($msg);
|
||||||
} catch (\GHE\ExecException $e) {
|
|
||||||
var_dump($msg);
|
|
||||||
var_dump($e->getMessage());
|
|
||||||
var_dump($e->getCode());
|
|
||||||
var_dump($e->getOutput());
|
|
||||||
} catch (\PhpAmqpLib\Exception\AMQPProtocolChannelException $e) {
|
} catch (\PhpAmqpLib\Exception\AMQPProtocolChannelException $e) {
|
||||||
echo "Channel exception:\n";
|
echo "Channel exception:\n";
|
||||||
var_dump($e);
|
var_dump($e);
|
||||||
|
|
|
@ -76,13 +76,7 @@ function reply_to_issue($body, $output, $success, $system) {
|
||||||
|
|
||||||
|
|
||||||
function outrunner($msg) {
|
function outrunner($msg) {
|
||||||
try {
|
return runner($msg);
|
||||||
return runner($msg);
|
|
||||||
} catch (GHE\ExecException $e) {
|
|
||||||
var_dump($e->getMessage());
|
|
||||||
var_dump($e->getCode());
|
|
||||||
var_dump($e->getOutput());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,32 +10,7 @@ class ACL {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function getUsers() {
|
|
||||||
return [
|
|
||||||
'7c6f434c',
|
|
||||||
'copumpkin',
|
|
||||||
'disassembler',
|
|
||||||
'domenkozar',
|
|
||||||
'fpletz',
|
|
||||||
'fridh',
|
|
||||||
'globin',
|
|
||||||
'grahamc',
|
|
||||||
'lnl7',
|
|
||||||
'mic92',
|
|
||||||
'orivej',
|
|
||||||
'shlevy',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
static public function isRepoEligible($repo) {
|
static public function isRepoEligible($repo) {
|
||||||
return in_array(strtolower($repo), self::getRepos());
|
return in_array(strtolower($repo), self::getRepos());
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function isUserAuthorized($user) {
|
|
||||||
return in_array(strtolower($user), self::getUsers());
|
|
||||||
}
|
|
||||||
|
|
||||||
static public function authorizeUserRepo($user, $repo) {
|
|
||||||
return self::isRepoEligible($repo) && self::isUserAuthorized($user);
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,119 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class Checkout {
|
|
||||||
|
|
||||||
protected $root;
|
|
||||||
protected $type;
|
|
||||||
|
|
||||||
function __construct($root, $type) {
|
|
||||||
$this->root = $root;
|
|
||||||
$this->type = $type;
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkOutRef($repo_name, $clone_url, $id, $ref) {
|
|
||||||
$this->prefetchRepoCache($repo_name, $clone_url);
|
|
||||||
|
|
||||||
$pname = $this->pathToRepoCache($repo_name);
|
|
||||||
$bname = $this->pathToBuildDir($repo_name, $id);
|
|
||||||
|
|
||||||
$guard = $this->guard($bname);
|
|
||||||
if (!is_dir($bname)) {
|
|
||||||
echo "Cloning https://github.com/" . $repo_name . "/pull/" . $id . " to $bname\n";
|
|
||||||
Exec::exec('git clone --shared --reference-if-able %s %s %s',
|
|
||||||
[
|
|
||||||
$pname,
|
|
||||||
$clone_url,
|
|
||||||
$bname
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!chdir($bname)) {
|
|
||||||
throw new CoFailedException("Failed to chdir to $bname\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "fetching https://github.com/" . $repo_name . "/pull/" . $id . " in $bname\n";
|
|
||||||
Exec::exec('git fetch origin');
|
|
||||||
try {
|
|
||||||
Exec::exec('git am --abort');
|
|
||||||
} catch (ExecException $e) {
|
|
||||||
// non-zero exit if no am is in progress
|
|
||||||
}
|
|
||||||
Exec::exec('git reset --hard %s', [$ref]);
|
|
||||||
|
|
||||||
|
|
||||||
$this->release($guard);
|
|
||||||
|
|
||||||
return $bname;
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyPatches($bname, $patch_url) {
|
|
||||||
if (!chdir($bname)) {
|
|
||||||
throw new CoFailedException("Failed to chdir to $bname\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
$guard = $this->guard($bname);
|
|
||||||
Exec::exec('curl -L %s | git am --no-gpg-sign -', [$patch_url]);
|
|
||||||
$this->release($guard);
|
|
||||||
}
|
|
||||||
|
|
||||||
function prefetchRepoCache($name, $clone_url) {
|
|
||||||
if (!chdir($this->root)) {
|
|
||||||
throw new CoFailedException("Failed to chdir to " . $this->root);
|
|
||||||
}
|
|
||||||
|
|
||||||
$pname = $this->pathToRepoCache($name);
|
|
||||||
|
|
||||||
$guard = $this->guard($pname);
|
|
||||||
|
|
||||||
if (!is_dir($pname)) {
|
|
||||||
echo "Cloning " . $name . " to $pname\n";
|
|
||||||
Exec::exec('git clone --bare %s %s',
|
|
||||||
[
|
|
||||||
$clone_url,
|
|
||||||
$pname
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->release($guard);
|
|
||||||
|
|
||||||
if (!chdir($pname)) {
|
|
||||||
throw new CoFailedException("Failed to chdir to $pname");
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "Fetching $name in $pname\n";
|
|
||||||
Exec::exec('git fetch origin');
|
|
||||||
}
|
|
||||||
|
|
||||||
function pathToRepoCache($name) {
|
|
||||||
return $this->root . "/repo-" . md5($name);
|
|
||||||
}
|
|
||||||
|
|
||||||
function pathToBuildDir($repo, $id_number) {
|
|
||||||
$id = (int) $id_number;
|
|
||||||
$repo_hash = md5($repo);
|
|
||||||
$type = $this->type;
|
|
||||||
|
|
||||||
return $this->root . "/$type-$repo_hash-$id";
|
|
||||||
}
|
|
||||||
|
|
||||||
function guard($path) {
|
|
||||||
echo "about to lock $path\n";
|
|
||||||
$res = fopen("$path.lock", 'c');
|
|
||||||
while (!flock($res, LOCK_EX)) {
|
|
||||||
echo "waiting for lock on $path...\n";
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
echo "got lock on $path\n";
|
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
function release($res) {
|
|
||||||
fclose($res);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class CoFailedException extends \Exception {}
|
|
|
@ -1,49 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class CommitStatus {
|
|
||||||
|
|
||||||
protected $ghclient;
|
|
||||||
protected $owner;
|
|
||||||
protected $repo;
|
|
||||||
protected $sha;
|
|
||||||
protected $name;
|
|
||||||
|
|
||||||
function __construct($ghclient, $owner, $repo, $sha, $name) {
|
|
||||||
$this->ghclient = $ghclient;
|
|
||||||
$this->owner = $owner;
|
|
||||||
$this->repo = $repo;
|
|
||||||
$this->sha = $sha;
|
|
||||||
$this->name = $name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pending($description) {
|
|
||||||
$this->mark('pending', $description);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function error($description) {
|
|
||||||
$this->mark('error', $description);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function failure($description) {
|
|
||||||
$this->mark('failure', $description);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function success($description) {
|
|
||||||
$this->mark('success', $description);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mark($state, $description) {
|
|
||||||
$this->ghclient->api('repository')->statuses()->create(
|
|
||||||
$this->owner,
|
|
||||||
$this->repo,
|
|
||||||
$this->sha,
|
|
||||||
[
|
|
||||||
'state' => $state,
|
|
||||||
'context' => $this->name,
|
|
||||||
'description' => $description,
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class Exec {
|
|
||||||
public static function exec($cmd, $args = array()) {
|
|
||||||
$safeArgs = array_map('escapeshellarg', $args);
|
|
||||||
$interiorCmd = vsprintf($cmd, $safeArgs);
|
|
||||||
|
|
||||||
$exteriorCmd = sprintf('/bin/sh -o pipefail -euc %s 2>&1',
|
|
||||||
escapeshellarg($interiorCmd));
|
|
||||||
|
|
||||||
exec($exteriorCmd, $output, $return);
|
|
||||||
|
|
||||||
if ($return > 0) {
|
|
||||||
throw new ExecException($cmd, $args, $output, $return);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ExecException extends \Exception {
|
|
||||||
protected $args;
|
|
||||||
protected $output;
|
|
||||||
|
|
||||||
public function __construct($cmd, $args, $output, $return) {
|
|
||||||
$this->args = $args;
|
|
||||||
$this->output = $output;
|
|
||||||
|
|
||||||
parent::__construct("Error calling $cmd", $return);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getArgs() {
|
|
||||||
return $this->args;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getOutput() {
|
|
||||||
return $this->output;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
|
@ -1,62 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class RebuildTagClassifier {
|
|
||||||
|
|
||||||
public static function parseAndLabel($text) {
|
|
||||||
$counts = self::parse($text);
|
|
||||||
|
|
||||||
if (!isset($counts['x86_64-darwin'])) {
|
|
||||||
$counts['x86_64-darwin'] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($counts['x86_64-linux'])) {
|
|
||||||
$counts['x86_64-linux'] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$labels = [];
|
|
||||||
foreach ($counts as $arch => $count) {
|
|
||||||
$label[] = self::labelForArchCount($arch, $count);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $label;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function parse($output) {
|
|
||||||
$counts = [];
|
|
||||||
foreach ($output as $line) {
|
|
||||||
if (preg_match('/^\s*(\d+) (.*)$/', $line, $matches)) {
|
|
||||||
$counts[$matches[2]] = (int)$matches[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $counts;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function labelForArchCount($arch, $count) {
|
|
||||||
if ($arch == "x86_64-linux") {
|
|
||||||
$prefix = "10.rebuild-linux: ";
|
|
||||||
} elseif ($arch == "x86_64-darwin") {
|
|
||||||
$prefix = "10.rebuild-darwin: ";
|
|
||||||
} else {
|
|
||||||
throw new RebuildTagClassifierArchException("Unknown arch $arch");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($count > 500) {
|
|
||||||
$suffix = "501+";
|
|
||||||
} else if ($count > 100) {
|
|
||||||
$suffix = "101-500";
|
|
||||||
} else if ($count > 10) {
|
|
||||||
$suffix = "11-100";
|
|
||||||
} else if ($count > 0) {
|
|
||||||
$suffix = "1-10";
|
|
||||||
} else {
|
|
||||||
$suffix = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $prefix . $suffix;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class RebuildTagClassifierArchException extends \Exception {}
|
|
|
@ -1,68 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class TestExec extends \PHPUnit\Framework\TestCase
|
|
||||||
{
|
|
||||||
/** Exec::exec('curl -L %s | git am --no-gpg-sign -');
|
|
||||||
|
|
||||||
*/
|
|
||||||
function testExecBasic() {
|
|
||||||
$this->assertEquals(
|
|
||||||
['oof'],
|
|
||||||
Exec::exec('echo foo | rev')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecArgs() {
|
|
||||||
$this->assertEquals(
|
|
||||||
['rab'],
|
|
||||||
Exec::exec('echo %s | rev', ['bar'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecArgsDangerous() {
|
|
||||||
$this->assertEquals(
|
|
||||||
['$(whoami)'],
|
|
||||||
Exec::exec('echo %s', ['$(whoami)'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecFailureExceptions() {
|
|
||||||
$this->expectException(ExecException::class);
|
|
||||||
$this->expectExceptionCode(123);
|
|
||||||
$this->expectExceptionMessage("Error calling exit 123");
|
|
||||||
Exec::exec('exit 123');
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecFailureExceptionsOutput() {
|
|
||||||
try {
|
|
||||||
Exec::exec('echo %s; exit %s', ["heya", 10]);
|
|
||||||
$this->assertFalse(true, "Should have excepted!");
|
|
||||||
} catch (ExecException $e) {
|
|
||||||
$this->assertEquals(10, $e->getCode());
|
|
||||||
$this->assertEquals(["heya", 10], $e->getArgs());
|
|
||||||
$this->assertEquals(["heya"], $e->getOutput());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function testExecFailureExceptionPipefailEnd() {
|
|
||||||
try {
|
|
||||||
var_dump(Exec::exec('echo "foo" | (exit 2);'));
|
|
||||||
$this->assertFalse(true, "Should have excepted!");
|
|
||||||
} catch (ExecException $e) {
|
|
||||||
$this->assertEquals(2, $e->getCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecFailureExceptionPipefailStart() {
|
|
||||||
try {
|
|
||||||
var_dump(Exec::exec('(echo "foo"; exit 3) | rev;'));
|
|
||||||
$this->assertFalse(true, "Should have excepted!");
|
|
||||||
} catch (ExecException $e) {
|
|
||||||
$this->assertEquals(3, $e->getCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,101 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
|
|
||||||
namespace GHE;
|
|
||||||
|
|
||||||
class TestRebuildTagClassifier extends \PHPUnit\Framework\TestCase
|
|
||||||
{
|
|
||||||
function testParseLabelJustOne() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["10.rebuild-linux: 1-10", "10.rebuild-darwin: 0"],
|
|
||||||
RebuildTagClassifier::parseAndLabel([
|
|
||||||
"Estimating rebuild amount by counting changed Hydra jobs.",
|
|
||||||
" 1 x86_64-linux",
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseAndLabelGarbage() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["10.rebuild-darwin: 0", "10.rebuild-linux: 0", ],
|
|
||||||
RebuildTagClassifier::parseAndLabel(["foo", "bar"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseAndLabelLinuxOnly() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["10.rebuild-linux: 1-10", "10.rebuild-darwin: 0", ],
|
|
||||||
RebuildTagClassifier::parseAndLabel([" 5 x86_64-linux"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseAndLabelDarwinOnly() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["10.rebuild-darwin: 1-10", "10.rebuild-linux: 0", ],
|
|
||||||
RebuildTagClassifier::parseAndLabel([" 5 x86_64-darwin"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseAndLabelLinuxAndDarwin() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["10.rebuild-linux: 1-10", "10.rebuild-darwin: 11-100", ],
|
|
||||||
RebuildTagClassifier::parseAndLabel([" 5 x86_64-linux", " 17 x86_64-darwin"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function testExecParseNone() {
|
|
||||||
$this->assertEquals(
|
|
||||||
[],
|
|
||||||
RebuildTagClassifier::parse([])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseGarbage() {
|
|
||||||
$this->assertEquals(
|
|
||||||
[],
|
|
||||||
RebuildTagClassifier::parse(["foo", "bar"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseLinuxOnly() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["x86_64-linux" => 5],
|
|
||||||
RebuildTagClassifier::parse([" 5 x86_64-linux"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testParseJustOne() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["x86_64-linux" => 1],
|
|
||||||
RebuildTagClassifier::parse([
|
|
||||||
"Estimating rebuild amount by counting changed Hydra jobs.",
|
|
||||||
" 1 x86_64-linux",
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseDarwinOnly() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["x86_64-darwin" => 5],
|
|
||||||
RebuildTagClassifier::parse([" 5 x86_64-darwin"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testExecParseLinuxAndDarwin() {
|
|
||||||
$this->assertEquals(
|
|
||||||
["x86_64-linux" => 5, "x86_64-darwin" => 17],
|
|
||||||
RebuildTagClassifier::parse([" 5 x86_64-linux", " 17 x86_64-darwin"])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testLabelForArchCount() {
|
|
||||||
$this->assertEquals("10.rebuild-linux: 501+", RebuildTagClassifier::labelForArchCount("x86_64-linux", 501));
|
|
||||||
$this->assertEquals("10.rebuild-linux: 101-500", RebuildTagClassifier::labelForArchCount("x86_64-linux", 150));
|
|
||||||
$this->assertEquals("10.rebuild-darwin: 101-500", RebuildTagClassifier::labelForArchCount("x86_64-darwin", 150));
|
|
||||||
}
|
|
||||||
|
|
||||||
function testLabelForUnknownArch() {
|
|
||||||
$this->expectException(RebuildTagClassifierArchException::class);
|
|
||||||
RebuildTagClassifier::labelForArchCount("lmao", 150);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue