NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Git for Laravel

Pull requesty, issues a súbory

Všetky ostatné čítania fungujú rovnako — zoznamy vracajú Page, jednotlivé zdroje typovaný objekt:

$repo = Git::github()->repo('acme/api');

$repo->pullRequests();                         // Page<PullRequest>, open by default
$repo->pullRequests('closed', perPage: 50);
$repo->pullRequest(7)->get();                  // GitLab MRs, Bitbucket PRs
$repo->issues();                               // Page<Issue>
$repo->issue(12);
$repo->tags();                                 // Page<Tag>
$repo->releases();                             // Page<Release>
$repo->release('v1.0');                        // by tag or id
$repo->contents('README.md', ref: 'main');     // FileContent (decoded); no ref = the default branch
$repo->compare('main', 'feature');             // Comparison
$repo->contributors();                         // Page<Contributor>
$repo->languages();                            // ['PHP' => 12345, ...]

pullRequests() a issues() prijímajú stav (predvolene open); balík ho preloží do zápisu konkrétnej platformy, takže open znamená opened na GitLabe a OPEN na Bitbuckete a closed si od Bitbucketu vyžiada DECLINED aj SUPERSEDED. Merge requesty z GitLabu aj pull requesty z Bitbucketu sa vracajú ako ten istý objekt PullRequest. contents() bez refu číta na každej platforme predvolenú vetvu.

  • issues() na GitHube vypíše len issues — endpoint vracia aj pull requesty, tie sa preto vynechajú; hasMore sa naďalej riadi hlavičkou Link, takže stránka môže obsahovať menej položiek než perPage. issue() s číslom pull requestu vyhodí rovnakú RequestException 404 ako chýbajúce issue.
  • release() na GitHube najprv skúsi tag a potom — pri čisto číselnej hodnote, ktorej nezodpovedá žiadny tag — číselné id releasu.
  • contents() na GitHube vráti celý súbor až do 100 MB; súbory nad 1 MB číta cez endpoint blobov. Cesta k adresáru vyhodí OutOfScopeException s názvom cesty.
  • compare() vráti aj commity medzi oboma refmi od najstaršieho spolu s totalCommits a — na GitHube — so status: ComparisonStatus Ahead, Behind, Identical alebo Diverged. GitHub pošle najnovších 250 commitov, no započíta všetky, takže totalCommits väčšie ako count($diff->commits) znamená orezaný zoznam; súbory končia na 300. GitLab vyplní commits aj totalCommits, no status nechá null, lebo nevie rozlíšiť diverged od ahead — rovnako ako stav, ktorý GitHub nezdokumentoval.

Súbory a diffy

$repo = Git::github()->repo('acme/api');

$file = $repo->contents('composer.json', ref: 'main');
$file->path;      // "composer.json"
$file->content;   // the decoded file body
$file->sha;       // blob sha — what updateFile() needs
$file->size;      // bytes

$diff = $repo->compare('main', 'feature/ci');
$diff->aheadBy;
$diff->behindBy;
$diff->status;        // ?ComparisonStatus — Ahead, Behind, Identical or Diverged (GitHub)
$diff->totalCommits;  // ?int — every commit between the two refs
$diff->commits;       // list<Commit>, oldest first

$truncated = $diff->totalCommits > count($diff->commits); // GitHub sends the newest 250

foreach ($diff->files as $changed) {    // list<ComparisonFile>
    $changed->filename;
    $changed->status;                   // e.g. "modified"
    $changed->additions;
    $changed->deletions;
}

Výsledné objekty

ObjektPolia
PullRequestprovider, id, number, title, body, state, sourceBranch, targetBranch, author, url, createdAt, draft, headSha, headRepository
Issueprovider, id, number, title, body, state, author, url, createdAt
Tagprovider, name, sha, url
Releaseprovider, id, tagName, name, body, draft, prerelease, url, createdAt
FileContentpath, content (dekódovaný), sha, size, url
Comparisonbase, head, aheadBy, behindBy, files (zoznam ComparisonFile: filename, status, additions, deletions), status (ComparisonStatus), totalCommits, commits (zoznam Commit od najstaršieho)
Branchprovider, name, sha
Activityprovider, id, type (ActivityType), ref, before, after, actor, occurredAt
Contributorid, name, avatar, contributions
Commentid, body, author, url, createdAt
Author / Ownername, email, avatar / id, name, avatar

Schopnosti sa medzi providermi líšia — napríklad Bitbucket tu nemá issues, tagy ani releasy. Volanie, ktoré provider nepodporuje, vyhodí FeatureNotSupportedException; ak sa chcete rozhodovať podľa podpory, pozrite sekciu Detekcia funkcií.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.