Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

HTTP API: commit

Commit jako hodnota: slovník rozsahů, který dává historie tohoto repozitáře, co by pracovní strom commitoval a jak se dělí, a verdikt o jedné zprávě podle politiky commitů repozitáře.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

commit

Commit jako hodnota: slovník rozsahů, který dává historie tohoto repozitáře, co by pracovní strom commitoval a jak se dělí, a verdikt o jedné zprávě podle politiky commitů repozitáře.

GET /api/v1/commit/history commit.history

Posoudit rozsah historie

Každý commit v rozsahu gitu proti politice commitů, v jednom průchodu: kolik jich bylo přečteno, kolik git složil a jsou vyňaty, kolik nese chybu a každý commit, který má nález, s tím, co to je. Co čte kontrola, aby odmítla nový dluh, a co odpovídá na `je historie této větve čistá?` bez procesu na commit.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_commit_history
  • $ commit history

Parametry dotazu

názevtyppovinnépopispříklady
rozsah string ne Cokoli, co `git log` přijímá: `origin/master..HEAD`, `v0.6.0..`, holé `HEAD`. Výchozí `HEAD`, tedy celá odsud dosažitelná historie. whole-history: "HEAD"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/commit/history?range=HEAD"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 HistoryReport Posoudit rozsah historie: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/commit/plan commit.plan

Co by pracovní strom commitoval

Pracovní strom tak, jak ho hlásí git — branch, upstream, divergence, každá staged, unstaged a untracked cesta a každý probíhající merge nebo rebase — rozdělený do commitů, které podporuje vlastní členění historie, každý s důkazem pro něj, pod otiskem repozitáře, worktree, HEAD a přesné sady změn, takže plán, podle kterého se jedná později, lze odmítnout, místo aby se použil na strom, pro který nebyl vytvořen.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_commit_plan
  • Zdroj MCP {"name": "commit-plan", "uri": "majordomus://commit/plan"}
  • $ commit plan

Žádné parametry.

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/commit/plan"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 CommitPlan Co by pracovní strom commitoval: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/commit/scopes commit.scopes

Slovník rozsahů

Každý scope, který historie commitů tohoto repozitáře používá, jak často, a adresáře, o kterých se pro každý píše — naučeno z historie, nikoli deklarováno v tabulce, takže subsystém commitnutý dnes je ve slovníku dnes a ten, kterého se nikdo nedotkl, sám klesne dolů.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_commit_scopes
  • Zdroj MCP {"name": "commit-scopes", "uri": "majordomus://commit/scopes"}
  • $ commit scopes

Žádné parametry.

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/commit/scopes"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 ScopesReport Slovník rozsahů: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/commit/validate commit.validate

Posoudit jednu zprávu commitu

Jedna zpráva proti politice commitů tohoto repozitáře: gramatika, šířka předmětu, zda je scope takový, jaký historie používá, zda existuje každý záznam, který zpráva jmenuje, zda oprava nese test a zda zásadní změna sama sebe vysvětluje — jako typovaná zjištění se závažnostmi, nebo výjimka pro předmět, který složil git. Tentýž verdikt, kterým odmítá hook commit-msg a skrz který čte historii kontrola.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_commit_validate
  • $ commit validate

Parametry dotazu

názevtyppovinnépopispříklady
zpráva string ano Zpráva commitu tak, jak by byla uložena. Řádky komentářů se ignorují stejně jako v gitu, takže se posuzuje to, co by bylo commitnuto. konvenční: "feat(commit): the rule is decided by a command"merge: "Merge pull request #249 from korczis/fix"not-conventional: "update stuff"
cesty array of string ne Cesty, které by commit obsahoval. Vynecháte-li je, soudy, které je potřebují — zda oprava nese test — se neprovedou, místo aby se hádaly.

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/commit/validate?message=feat%28commit%29%3A%20the%20rule%20is%20decided%20by%20a%20command"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 CommitVerdict Posoudit jednu commit zprávu: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.

Schémata

Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.

ChangeStage

"staged" | "unstaged" | "untracked"
Kde se jedna cesta nachází mezi indexem a pracovním stromem.

use majordomus_cli::commit::ChangeStage;
// ordered so that what would be in the next commit sorts first
assert!(ChangeStage::Staged < ChangeStage::Unstaged);
assert!(ChangeStage::Unstaged < ChangeStage::Untracked);
  • stagedV indexu jiné než v HEAD: bylo by v dalším commitu.
  • unstagedJiné v pracovním stromu než v indexu: nebylo by.
  • untrackedVůbec nesledováno.

Používá PathChange

CommitExemption

"git_authored"
Proč commit nebyl posouzen.

use majordomus_cli::commit::{judge, CommitExemption, CommitPolicy, CommitSubject};
let v = judge(&CommitSubject::of("Merge pull request #1 from a/b"), &CommitPolicy::default());
assert_eq!(v.exempt, Some(CommitExemption::GitAuthored));
  • git_authoredpředmět složil git: merge, revert, fixup.

Používá CommitVerdict JudgedCommit

CommitGroup

object
Jeden commit, který plán navrhuje. Jeden commit, který plán navrhuje: jeho zpráva, jeho cesty a proč jsou ty cesty jeden commit.

use majordomus_cli::commit::{plan::group, CommitGroup, ScopeVocabulary};
let mut v = ScopeVocabulary::default();
v.learn("commit", "src/commit", 40);
let g: Vec<CommitGroup> = group(&["src/commit/a.rs".into()], &v, &[]);
// the subject is empty on purpose: what a change did is the one thing no evidence in
// the tree can state
assert_eq!(g[0].message.header.subject, "");
assert_eq!(g[0].message.header.scope.as_deref(), Some("commit"));
assert!(g[0].rationale.contains("40 prior commit"), "{}", g[0].rationale);
vlastnosttyppovinnépopis
zpráva CommitMessage → CommitMessage ano Zpráva tak, jak byla navržena. Shrnutí je jediné pole, které má člověk nahradit: nic zde nemůže vědět, proč se změna udělala, a plánovač, který by o tom napsal sebevědomou větu, by do historie psal fikci.
cesty array of string ano Cesty, v pořadí.
zdůvodnění string ano Proč jsou tyto cesty jeden commit, v důkazech, které si čtenář může ověřit.
scope_from ScopeSuggestion | null → ScopeSuggestion ne Návrh rozsahu a to, z čeho byl odvozen, pokud nějaký byl.

Používá CommitPlan

CommitHeader

object
Hlavička zprávy commitu: její první řádek, rozebraný na části.

word je typ tak, jak jej autor napsal, a kind je to, co dané slovo jmenuje; liší se přesně tehdy, když slovo není jedno z jedenácti, která konvence definuje, a držení obou umožňuje čtenáři vidět wip(site): halfway through tak, jak je autor napsal, zatímco posuzovatel stále hlásí, že wip není typ.

use majordomus_cli::commit::CommitHeader;
use majordomus_cli::release::ChangeKind;
let h = CommitHeader::parse("fix(plan): the fingerprint names what moved");
assert_eq!(h.word, "fix");
assert_eq!(h.kind, ChangeKind::Fix);
assert_eq!(h.scope.as_deref(), Some("plan"));
assert!(!h.breaking);
assert_eq!(h.subject, "the fingerprint names what moved");
vlastnosttyppovinnépopis
slovo string ano Typ, jak je napsán: feat, fix, wip, nebo prázdný řetězec, když předmět nenese žádnou hlavičku type: .
druh ReleaseChangeKind → ReleaseChangeKind ano Co Self::word jmenuje; ChangeKind::Other pro slovo, které konvence nedefinuje, a pro předmět bez hlavy.
scope string | null ne Rozsah v závorce, pokud existuje.
zpětně nekompatibilní boolean ano Zda head nesl !, které označuje zásadní změnu. Trailer BREAKING CHANGE: je vlastnost těla a čte ho crate::commit::CommitMessage.
předmět string ano Co commit říká, že udělal. U hlavičky, která se neparsuje, je to celý první řádek beze změny, a u neznámého slova typu se slovo zachová: nic, co autor napsal, se cestou neztratí.

Používá CommitMessage

CommitMessage

object
Rozebraná zpráva commitu: hlavička, tělo, trailery.

use majordomus_cli::commit::CommitMessage;
let m = CommitMessage::parse("feat(a): a thing\n\nThe body.\n\nRefs: I1305\n");
assert_eq!(m.header.subject, "a thing");
assert_eq!(m.body, "The body.");
assert_eq!(m.trailers.len(), 1);
vlastnosttyppovinnépopis
hlavička CommitHeader → CommitHeader ano První řádek, rozparsovaný.
tělo string ano Vše mezi hlavičkou a blokem patičky, bez okolních prázdných řádků. Prázdné, když je zpráva jen předmět.
trailery pole CommitTrailer → CommitTrailer ano Key: value řádků posledního odstavce v pořadí, v jakém byly napsány.

Používají CommitGroup CommitVerdict

CommitPlan

object
Plán nad pracovním stromem.

use majordomus_cli::commit::{CommitPlan, PlanFingerprint, WorkingTreeState};
let plan = CommitPlan {
    fingerprint: PlanFingerprint::of("/r/.git", "/r", &WorkingTreeState::default()),
    tree: WorkingTreeState::default(),
    groups: Vec::new(),
    diagnostics: Vec::new(),
};
assert!(plan.groups.is_empty(), "a clean tree proposes nothing");
vlastnosttyppovinnépopis
otisk PlanFingerprint → PlanFingerprint ano Z čeho byl plán odvozen a co ho činí zastaralým.
strom WorkingTreeState → WorkingTreeState ano Strom tak, jak stál.
skupiny pole CommitGroup → CommitGroup ano Navržené commity v pořadí, v jakém mají být vytvořeny.
diagnostika pole Diagnostic → Diagnostic ano Co by měl člověk vědět, než podle toho jedná.

Používá commit.plan

CommitTrailer

object
Jeden řádek Key: value v bloku trailerů na konci zprávy commitu.

use majordomus_cli::commit::CommitMessage;
use majordomus_cli::commit::CommitTrailer;
let m = CommitMessage::parse("fix(x): a thing\n\nWhy.\n\nRefs: I1305\n");
let t: &CommitTrailer = &m.trailers[0];
assert_eq!(t.key, "Refs");
assert_eq!(t.value, "I1305");
vlastnosttyppovinnépopis
klíč string ano Klíč tak, jak je napsán: Refs, Co-Authored-By, BREAKING CHANGE.
hodnota string ano Vše za dvojtečkou a jednou mezerou.

Používá CommitMessage

CommitVerdict

object
K čemu soudce dospěl: zpráva tak, jak byla zpracována, zda byl nalezen nějaký problém úrovně error, výjimka, když předmět složil git a ne člověk, a každý nález v pořadí CommitRule::ALL — což je pořadí, v jakém se důkazy pro ně ve zprávě objevují, takže je člověk čte v pořadí, v jakém je opraví.

use majordomus_cli::commit::{judge, CommitPolicy, CommitSubject, CommitVerdict};
let v: CommitVerdict = judge(&CommitSubject::of("update stuff"), &CommitPolicy::default());
assert!(!v.passed);
assert_eq!(v.findings[0].code, "commit.not_conventional");
assert_eq!(v.message.header.subject, "update stuff", "what was judged, not what was typed");
vlastnosttyppovinnépopis
zpráva CommitMessage → CommitMessage ano Zpráva tak, jak byla naparsována; co se posuzovalo, ne co bylo napsáno.
prošlo boolean ano Zda nebylo nalezeno nic se závažností chyby.
exempt CommitExemption | null → CommitExemption ne Proč commit nebyl posouzen, když nebyl.
zjištění pole Diagnostic → Diagnostic ano Každé zjištění v pořadí CommitRule::ALL.

Používá commit.validate

HistoryReport

object
Rozsah historie, posouzený. Rozsah historie, posouzený jedním průchodem.

use majordomus_cli::commit::verdict::HistoryReport;
let r = HistoryReport {
    range: "HEAD".into(),
    total: 1755,
    exempt: 561,
    failing: 54,
    commits: Vec::new(),
};
// a commit with nothing to say is counted and not listed: a report of a thousand
// passing commits is a report nobody reads
assert!(r.commits.is_empty());
assert_eq!(r.total - r.exempt, 1194);
vlastnosttyppovinnépopis
rozsah string ano Rozsah, jak byl požadován.
celkem integer (uint) ano Kolik commitů bylo přečteno.
exempt integer (uint) ano Kolik jich bylo vyňato, protože jejich předmět složil git.
selhávající integer (uint) ano Kolik jich nese zjištění závažnosti error.
commity pole JudgedCommit → JudgedCommit ano Každý commit, který nese zjištění, od nejnovějšího. Commit, který nemá co říct, se započítá a nevypíše: zpráva, která by vypsala tisíc prošlých commitů, by byla zprávou, kterou nikdo nečte.

Používá commit.history

JudgedCommit

object
Jeden commit historie, posouzený.

use majordomus_cli::commit::verdict::JudgedCommit;
// what a history report lists: only the commits that have something to say
let row = JudgedCommit {
    commit: "a1b2c3d4e".into(),
    subject: "update stuff".into(),
    passed: false,
    exempt: None,
    findings: Vec::new(),
};
assert!(!row.passed);
vlastnosttyppovinnépopis
commit string ano Název commitu tak, jak ho dal git.
předmět string ano Jeho řádek předmětu.
prošlo boolean ano Zda prošlo.
exempt CommitExemption | null → CommitExemption ne Proč nebylo posouzeno, když nebylo.
zjištění pole Diagnostic → Diagnostic ano Každý nález.

Používá HistoryReport

PathChange

object
Jedna cesta a kde stojí.

use majordomus_cli::commit::ChangeStage;
use majordomus_cli::commit::plan::PathChange;
// staged and modified again since: the commit would carry the staged half only
let c = PathChange {
    path: "src/a.rs".into(), stage: ChangeStage::Staged, status: "MM".into(), partial: true,
};
assert!(c.partial);
vlastnosttyppovinnépopis
path string ano Relativní k repozitáři, lomítka dopředu.
fáze ChangeStage → ChangeStage ano Zda je staged, unstaged nebo untracked. Cesta změněná jak v indexu, tak v pracovním stromu se objeví jednou, jako ChangeStage::Staged, s nastaveným partial.
status string ano Dvoupísmenný stav, který git ohlásil, doslovně.
částečně boolean ne Nastaví se, když je cesta v indexu a od té doby znovu změněna: commit potvrdí jen připravenou polovinu, což je věc, kterou je třeba člověku říct, ne nechat ho objevit.

Používá WorkingTreeState

PlanFingerprint

object
Z čeho byl plán odvozen.

Porovnáván, nikdy nevěřen: plán, jehož otisk se liší od stromu před ním, popisuje strom, který už neexistuje.

use majordomus_cli::commit::{PlanFingerprint, WorkingTreeState};
let f = PlanFingerprint::of("/repo/.git", "/repo", &WorkingTreeState::default());
assert_eq!(f.head, "unborn", "a repository with no commits says so");
vlastnosttyppovinnépopis
repozitář string ano Repozitář: společný adresář gitu, který sdílí každý worktree jednoho repozitáře a žádné dva repozitáře.
worktree string ano Worktree: vlastní cesta tohoto checkoutu. Dva worktrees jednoho repozitáře mají stejný repozitář a různé worktrees, což drží jejich plány od sebe.
head string ano HEAD, když byl plán odvozen, nebo unborn.
změny string ano SHA-256 přes každou změnu, její fázi a stav, v pořadí. Znovustagování jednoho souboru ho změní; dotek souboru, který plán neobsahuje, ne.

Používá CommitPlan

ScopeSuggestion

object
Do jakého rozsahu patří sada cest a důkazy o tom.

use majordomus_cli::commit::{ScopeSuggestion, ScopeVocabulary};
let mut v = ScopeVocabulary::default();
// two scopes with equal claim to one directory: reported, never broken silently
v.learn("a", "src", 7);
v.learn("b", "src", 7);
let s: ScopeSuggestion = v.suggest(&["src/x.rs".into()]).expect("a tie");
assert!(s.ambiguous);
vlastnosttyppovinnépopis
scope string ano Rozsah.
commity integer (uint) ano Kolik dřívějších commitů spojuje tento rozsah s adresáři, v nichž tyto cesty jsou.
adresář string ano Adresářová předpona, při které byla asociace nejsilnější.
nejednoznačné boolean ano Zda jiný rozsah byl asociován stejně silně. Remíza se hlásí, nerozhoduje se tiše: plánovač, který by hádal, by vymýšlel jediné pole zprávy commitu, podle kterého se čtenář orientuje.

Používá CommitGroup

ScopeUse

object
Jeden rozsah, který historie používá, a kolik.

use majordomus_cli::commit::scopes::ScopeUse;
let u = ScopeUse { scope: "commit".into(), commits: 40, directories: vec!["src/commit".into()] };
assert_eq!(u.commits, 40);
vlastnosttyppovinnépopis
scope string ano Slovo rozsahu, tak jak ho commity píší.
commity integer (uint) ano Kolik z vzorkovaných commitů to použilo.
adresáře array of string ano Prefixy adresářů, kterých se ty commity dotkly, od nejčastějších, nejvýše pět.

Používá ScopeVocabulary

ScopeVocabulary

object
Slovník tak, jak byl pozorován, s tím, co bylo pozorováno.

use majordomus_cli::commit::ScopeVocabulary;
// an empty vocabulary knows nothing and says so, rather than guessing
let v = ScopeVocabulary::default();
assert!(!v.knows("anything"));
assert!(v.words().is_empty());
vlastnosttyppovinnépopis
scopes pole ScopeUse → ScopeUse ano Každý rozsah, podle toho, jak často se používá, poté podle názvu. Pořadí je odpovědí na „jaké rozsahy tento repozitář používá“, proto je to pořadí, v jakém to člověk čte.
vzorkováno integer (uint) ano Kolik commitů bylo přečteno, aby se to zjistilo.
nedostupné string | null ne Nastaví se, když se nešlo zeptat gitu; slovník je pak prázdný, ne chybný.

Používá ScopesReport

ScopesReport

object
Slovník s politikou, která ho čte.

use majordomus_cli::capability::builtin::commit::ScopesReport;
use majordomus_cli::commit::ScopeVocabulary;
let r = ScopesReport { vocabulary: ScopeVocabulary::default(), sample: 1500 };
assert_eq!(r.sample, majordomus_cli::commit::scopes::SAMPLE);
vlastnosttyppovinnépopis
slovník ScopeVocabulary → ScopeVocabulary ano Každý rozsah, který historie používá, nejpoužívanější první, s adresáři, o nichž se používá.
vzorek integer (uint) ano Kolik commitů zpět se slovník učí.

Používá commit.scopes

WorkingTreeState

object
Co git právě teď říká o pracovním stromu.

use majordomus_cli::commit::WorkingTreeState;
let clean = WorkingTreeState::default();
assert!(clean.is_clean());
assert!(clean.staged().is_empty());
vlastnosttyppovinnépopis
větev string | null ne Větev, nebo None, když je HEAD odpojený.
head string | null ne Plné jméno HEAD, nebo None v repozitáři bez commitů.
upstream string | null ne Upstream ref, když ho větev má.
napřed integer (uint) ano Commity, které tato větev má a její upstream nemá.
pozadu integer (uint) ano Commity, které má upstream a tato větev ne.
in_progress string | null ne Probíhající merge, rebase, cherry-pick nebo bisect, pokud nějaký je.
změny pole PathChange → PathChange ano Každá změna, seřazená podle fáze, pak podle cesty.

Používá CommitPlan

Prohledává názvy a popisy všech stránek, které tento web publikuje.