Перейти к содержанию
zoryn/ maintainer-assistant

zoryn commit

Нативная замена gear-commit. Создаёт git-коммит, используя последнюю запись changelog из spec-файла как сообщение коммита.

Использование

zoryn commit [--spec FILE] [-m|--message TEXT] [--no-edit] [-a|--all]
             [--amend] [-C DIR] [-d] [-- GIT-ARGS]

Subject коммита — version-release последней записи changelog (с префиксом epoch:, если в spec есть Epoch:). Body — текст этой же записи с удалённой строкой-заголовком, обрезанными пустыми строками сверху и снизу и %%%.

Spec-файл определяется автоматически через .gear/rules (директива spec:) или единственный *.spec в корне репозитория.

По умолчанию подготовленное сообщение открывается в том же редакторе, который использовал бы git commit — резолв через git var GIT_EDITOR (учитывает GIT_EDITORcore.editorVISUALEDITOR → встроенный default, с финальным fallback на vi). Сохраните буфер для коммита, выйдите без сохранения для отмены.

Опции

  • --spec FILE — использовать указанный spec-файл вместо автоопределения.
  • -m, --message TEXT — использовать TEXT напрямую (взаимоисключающий с --spec).
  • --no-edit — пропустить редактор и закоммитить подготовленное сообщение.
  • -a, --all — передать -a в git commit (поставить все отслеживаемые изменения).
  • --amend — изменить последний коммит.
  • GIT-ARGS — дополнительные позиционные аргументы для git commit (отделять --, например zoryn commit -- --signoff).

Семантика сохранения в редакторе

Для редакторов семейства vim (vim, vi, nvim, gvim, view, rvim, vimx, ex) zoryn commit использует строгий протокол сохранения: подготовленное сообщение передаётся через stdin, буфер переименовывается командой :file <out>. Буфер помечается как изменённый — ZZ, :wq, :x для неизменённого подготовленного буфера записывают файл и коммитят (в отличие от открытия vim напрямую на реальном файле с тем же содержимым).

Сохранение определяется по наличию файла:

ДействиеРезультат
ZZ / :wq / :xкоммит
:q!отмена: «commit message was not saved»
сохранение пустого буфераотмена: «commit message is empty»
редактор с ненулевым кодомотмена с кодом выхода редактора

Для остальных редакторов zoryn commit откатывается к git commit -F <tmpfile> --edit — стандартная git-семантика (любой чистый выход коммитит).

Совместимость с git hooks

zoryn commit экспортирует GEAR_COMMIT=1GEAR_COMMIT_AMEND=1 с --amend) в окружение git commit, так что существующие хуки prepare-commit-msg / commit-msg, проверяющие эти переменные для распознавания вызовов gear-commit, продолжают работать без изменений.

Примеры

zoryn commit                              # автоопределение spec, редактор с changelog
zoryn commit --no-edit                    # закоммитить changelog без редактора
zoryn commit -a                           # все отслеживаемые изменения и коммит
zoryn commit --amend                      # изменить последний коммит
zoryn commit --spec .gear/mypackage.spec  # указанный spec
zoryn commit -m "fix build on aarch64"    # своё сообщение
zoryn commit -- --signoff                 # доп. аргументы в git commit