Skip to content

Instantly share code, notes, and snippets.

@WyriHaximus
Created February 13, 2017 15:41
Show Gist options
  • Save WyriHaximus/5353484dcede8a326b00bb641c3fc27f to your computer and use it in GitHub Desktop.
Save WyriHaximus/5353484dcede8a326b00bb641c3fc27f to your computer and use it in GitHub Desktop.
<?php declare(strict_types=1);
Promise::fromObservable(unwrapObservableFromPromise($this->github->user($user)->then(function (GithubUser $user) use ($repo) {
return $user->repository($repo);
})->then(function (GithubRepository $repository) {
return resolve($repository->contents());
}))->filter(function ($resource) {
return $resource instanceof FileInterface;
})->filter(function (FileInterface $file) {
return $file->name() === '.travis.yml';
})->take(1), $this->scheduler)->then(function () use ($user, $repo) {
return $this->travis->repository($user . '/' . $repo);
})->otherwise(function () use ($user, $repo) {
return resolve($this->travis->user()->then(function (TravisUser $user) {
return $user->sync()->then(function () use ($user) {
$deferred = new Deferred();
$func = function () use ($user, $deferred, &$func) {
$user->refresh()->then(function (TravisUser $user) use ($deferred, &$func) {
if (!$user->isSyncing()) {
return $deferred->resolve($user);
}
$this->loop->addTimer(3, $func);
});
};
$func();
return $deferred->promise();
});
})->then(function () use ($user, $repo) {
return $this->travis->repository($user . '/' . $repo);
}));
})->then(function (TravisRepository $repository) {
return $repository->isActive()->then(function (bool $isActive) use ($repository) {
if (!$isActive) {
return $repository->enable();
}
return resolve();
});
})->done(null, function ($error) {
$this->logger->error($error);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment