Spec-Zone.ru › Wagtail

Внесение кода

Этот раздел предназначен для основной команды Wagtail или для всех, кто интересуется процессом внесения кода в Wagtail.

Код должен быть внесён только после его проверки, по крайней мере, одним другим рецензентом или участником коммита, если только изменения не являются небольшими изменениями документации или исправлением опечатки. Если после проверки будут внесены дополнительные изменения кода, их можно внести без дальнейшей проверки, если они не вызывают споров и достаточно незначительны, чтобы с минимальной вероятностью ввести новые ошибки.

Большинство внесений кода будут осуществляться в виде запросов на вытягивание (pull request) с GitHub. Запросы на вытягивание не должны сливаться с GitHub, за исключением небольших исправлений документации, которые можно слить с опцией «Сжатие и слияние». Вместо этого код должен быть извлечён участником коммита локально, изменения изучены и переведены на новую ветку (rebased), CHANGELOG.txt и заметки к релизу обновлены, а затем код должен быть отправлен на ветку main. Этот процесс подробно описан ниже.

Выполнение локального извлечения кода

Если код был отправлен в виде запроса на вытягивание, вы должны получить изменения и извлечь их в свой репозиторий Wagtail. Простой способ сделать это — добавить следующий git псевдоним в ваш ~/.gitconfig (предполагая, что upstream является wagtail/wagtail) :

[alias]
    pr = !sh -c \"git fetch upstream pull/${1}/head:pr/${1} && git checkout pr/${1}\"

Теперь вы можете извлечь запрос на вытягивание номер xxxx, выполнив git pr xxxx.

Перевод на main

После того, как вы получили код, вы должны перевести коммиты на ветку main. Перевод на новую ветку (rebase) предпочтительнее слияния, так как коммиты слияния усложняют чтение истории коммитов при небольших изменениях.

Вы можете исправить любые мелкие ошибки в коммитах, такие как опечатки и форматирование, в рамках перевода на новую ветку. git rebase --interactive — отличный инструмент для этой работы.

В идеале, воспользуйтесь этим как возможностью сжать изменения в несколько коммитов, чтобы каждый коммит вносил одно осмысленное изменение (и не ломал ничего). Если это невозможно из-за характера изменений, приемлемо либо сжать их в один коммит, либо оставить все коммиты не сжатыми, в зависимости от того, что будет более читаемо в истории коммитов.

# Get the latest commits from Wagtail
git fetch upstream
git checkout main
git merge --ff-only upstream/main
# Rebase this pull request on to main
git checkout pr/xxxx
git rebase main
# Update main to this commit
git checkout main
git merge --ff-only pr/xxxx

Обновление CHANGELOG.txt и заметок к релизу

Примечание

Это должны делать только участники основной команды коммитов, после того как изменения будут проверены и приняты.

Каждое значительное изменение в Wagtail должно получить запись в CHANGELOG.txt, и в заметки к релизу текущей версии.

CHANGELOG.txt содержит краткое описание каждой новой функции, рефакторинга или исправления ошибки в каждом релизе. Каждое описание должно быть в одной строке. Исправления ошибок должны быть сгруппированы в конце списка для каждого релиза и предваряться «Fix:». Имя участника должно быть добавлено в конце описания в скобках. Например:

* Fix: Tags added on the multiple image uploader are now saved correctly (Alex Smith)

Заметки к релизу каждой версии содержат более подробное описание каждого изменения. Также должны быть включены заметки о совместимости с предыдущими версиями. Крупные новые функции или изменения должны получить свой собственный раздел, в то время как более мелкие изменения и исправления ошибок должны быть сгруппированы в отдельный раздел. Смотрите примеры в предыдущих заметках к релизу. Заметки к релизу каждой версии находятся в docs/releases/x.x.x.md.

Если участник — новый человек, и это его первое участие в Wagtail, его следует добавить в список CONTRIBUTORS.rst. Участники добавляются в хронологическом порядке, с добавлением новых участников в конец списка. Используйте их предпочитаемое имя. Обычно имя участника можно найти на его странице GitHub. Если сомневаетесь, или имя не указано на его странице, спросите их, как они хотят, чтобы их называли.

Если изменения, которые нужно слить, достаточно малы, чтобы уместиться в один коммит, исправьте этот единственный коммит, добавив в него дополнения к CHANGELOG.txt, заметкам к релизу и участникам:

git add CHANGELOG.txt docs/releases/x.x.x.md CONTRIBUTORS.md
git commit --amend --no-edit

Если изменения не помещаются в один коммит, создайте новый коммит с обновлениями CHANGELOG.txt, заметок к релизу и участников. Сообщение коммита должно быть следующим Release notes for #xxxx:

git add CHANGELOG.txt docs/releases/x.x.x.md CONTRIBUTORS.md
git commit -m 'Release notes for #xxxx'

Отправка на main

Теперь изменения готовы для отправки на ветку main.

# Check that everything looks OK
git log upstream/main..main --oneline
git push --dry-run upstream main
# Push the commits!
git push upstream main
git branch -d pr/xxxx

Если вы допустили ошибку

Это нормально! Все допускают ошибки. Если вы осознаете, что недавние объединённые изменения оказывают негативное влияние, создайте новый запрос на вытягивание с отката изменений и слийте его без ожидания проверки. Запрос на вытягивание послужит дополнительной документацией по изменениям и пройдёт тесты CI.

Добавление коммитов в запрос на вытягивание другого участника

Пользователи GitHub с правами записи в wagtail/wagtail (члены ядра) могут добавлять коммиты в ветку запроса на вытягивание участника.

Учитывая, что имя пользователя участника johndoe, а его ветка запроса на вытягивание называется foo:

git clone git@github.com:wagtail/wagtail.git
cd wagtail
git remote add johndoe git@github.com:johndoe/wagtail.git
git fetch johndoe foo
git checkout johndoe/foo
# Make changes
# Commit changes
git push johndoe HEAD:foo

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/contributing/committing.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API