Gerrit/Závislosti Cross-repozitářů
Závislosti mezi repozitáři jsou commity do jiných repozitářů, které commit vyžaduje pro správné fungování. Například chcete přidat novou funkcionalitu do rozšíření, ale neexistuje pro něj žádný háček, takže odešlete základní záplatu, která přidá nový háček, a záplatu k rozšíření, která přidá obslužný program pro tento háček. Deklarace základní záplaty jako závislosti rozšiřující záplaty zajišťuje, že rozšiřující záplata nebude testována a nebude sloučena bez základní záplaty.
Jak deklarovat závislosti mezi repozitáři
Závislosti mezi repozitáři lze deklarovat pomocí tagu Depends-On ve zprávě commitu, což je syntaxe podobná propojení patchů s úlohami Phabricatoru: Ve zprávě commitu napíšete něco jako
Subscribe to Foo hook
The extension now uses the Foo hook to make foo.
Bug: T0123456
Depends-On: I123456abc...
Change-Id: I456790def...
kde I123456abc... je 40místné Gerrit ID druhého commitu (které se nachází v řádku Change-Id zprávy commitu daného commitu).
To má dva účinky:
- Zuul (strážce brány systému kontinuální integrace MediaWiki) odmítne sloučit patch, dokud nebudou sloučeny všechny závislosti.
- Kdykoli systém CI sestaví testovací prostředí, všechny závislosti jsou vybrány z hlavních větví příslušných repozitářů. Takže i když vaše rozšiřující testy závisí na nové základní funkcionalitě, testy budou fungovat správně.
Both of these also work recursively, if the dependencies themselves have dependencies.
Možné problémy
Pokud jednu ze závislostí nelze sloučit (obvykle proto, že má konflikt sloučení a potřebuje rebase), systém CI odmítne spustit testy a jenkins-bot místo toho ohlásí chybu typu Tuto změnu nebo jednu z jejích závislostí mezi repozitáři nebylo možné automaticky sloučit s aktuálním stavem jejího repozitáře..
V některých vzácných případech může tato samá zpráva naznačovat poškození v repozitáři Git, viz T134062.
Depends-On may not work properly if more than one change in Gerrit has the same Change-Id, such as when a dependency is cherry-picked onto a release branch.
In such cases, jenkins-bot may or may not report an error like This change depends on a change that failed to merge.
As a workaround, remove the existing Change-Id whenever you cherry-pick a cross-repo dependency onto another branch.
If you forgot to do this and already published the cherry-pick, you will not be able to use Depends-On unless you reupload the cross-repo dependencies under different Change-Ids (abandoning all but one of them will not fix the problem).
Další informace
- Dokumentace (upozorňujeme, že tato stránka popisuje jiný způsob deklarace závislostí mezi repozitáři, který není podporován verzí Zuulu používanou Wikimedií)
- Dokumentace Zuul (viz poznámka výše)
- Oznámení e-mailem