Окремий репозиторій на файловій системі для кожного користувача в розрізі кожної версії-кандидату. Отримання інформації про конфлікти з Gerrit.

Підхід базується на використанні окремого локального репозиторію для кожного користувача в розрізі окремої версії-кандидату.

gerrit flow summary

Synchronisation scheduler

gerrit flow sync scheduler

Scheduler відповідальний за:

  • rebase on master (актуалізація змін)

  • fetch changes from ref (отримання змін, що внесені іншими користувачами)

Актуалізація змін може буде виконана шляхом виклику відповідного Gerrit RestAPI методу

Кожна операція синхронізації буде примінена для кожного з локальних репозиторіїв на файловій системі.

Кожен запит на збереження змін від користувача призведе до створення нового Patchset в Gerrit Merge Request, що відповідає версії-кандидату, в рамках якої відбуваються зміни. TODO: investigate how many patchsets we can have in MR?
Кожен новий Patchset в Gerrit Merge Request не може конфліктувати з попередніми Patchset в цьому ж MR. Якщо новий Patchset має конфліктуючі зміни з попереднім Patchset, то автоматично використовуються зміни, що знаходяться в останньому Patchset. В розрізі організації роботи в amin-portal дана поведінка може призвести до перетирання одним користувачем попередні зміни інших користувачів в рамках однієї версії-кандидату.

Pros

  • Механізм максимально сумісний з існуючим механізмом організації роботи з репозиторіями на файловій системі та Gerrit.

  • Шляхом використання репозиторію для кожного окремого користувача механізм дозволяє використовувати lock на репозиторій в цілому і не мати залежності між користувачами при внесенні ними змін одночасно.

Cons

  • Можливе затирання змін користувачів без додакової нотифікації про це (затирання відбувається на стороні Gerrit Merge Request)

  • Repository lock блокує всі операції від користувачів (наприклад під час scheduled job для актуалізації змін в версії-кандидаті)