LINUX.ORG.RU

Emacs, Mercurial и форматирование.

 , , ,


0

3

Вопросов сразу несколько, но между ними есть связь.

Итак, есть репозитерий с кодом на C. Хочу чтобы все коммиттеры автоматом форматировали код перед отправкой. Думал найду ответ на первой же странице выдачи Гугла, но ошибся. Все коммиттеры на Ubuntu, но не все пользуются Emacs'ом. Правильно я понимаю, что надо чтобы hg вызывал astyle перед фиксацией изминений?

Мне скорее всего не понравится формат который будет выбран для репозитория (давайте считать что это будет BSD), потому хочется в Emacs'е всё видеть немного по-другому. Как заставить Emacs форматировать файл в стиле GNU? Желательно ещё чтобы при этом файл при сохранении незримо для меня форматировался обратно в BSD. Можно ли Eclipse (на нём коллеги сидят) научить аналогичному трюку?

Не будет ли при таком обращении с кодом страшнючих проблем с diff'ами или чем-то ещё?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Правильно я понимаю, что надо чтобы hg вызывал astyle перед фиксацией изминений?

Если именно перед фиксацией, тебе придется распространять hooks по всем девелоперским тачкам. Если тебя устроит проверка при помещении в общий репозиторий, можно сделать хук на сервере.

Как заставить Emacs форматировать файл в стиле GNU? Желательно ещё чтобы при этом файл при сохранении незримо для меня форматировался обратно в BSD

На этом пути лежит безумие, но Мэтт в бесконечной мудрости своей дал тебе filters:

   decode/encode
       Filters  for  transforming  files on checkout/checkin. This would typi‐
       cally be used for newline processing or  other  localization/canonical‐
       ization of files.

Не будет ли при таком обращении с кодом страшнючих проблем с diff'ами или чем-то ещё?

Если всё делать правильно, то нет.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Мэтт в бесконечной мудрости дал бы git.

На этом пути лежит безумие, но Мэтт в бесконечной мудрости своей дал тебе filters:

В бесконечной мудрости Мэтт дал бы git, но средство управления ревизиями для текущего проекта выбирал не я.

Не будет ли при таком обращении с кодом страшнючих проблем с diff'ами или чем-то ещё?

Если всё делать правильно, то нет.

Я тоже так подумал. Если я буду делать three way merge, например, то сливать я буду три версии формата GNU, а результат будет отформатирован в BSD, ничего страшного. Страшно будет если я попытаюсь diff выложить на pastebin или послать почтой. Но чтобы этого не делать у меня есть Mercurial.

Filters for transforming files on checkout/checkin.

Спасибо за наводку.

Camel ★★★★★
() автор топика

Если вдруг вспомните, то позже напишите для истории, как пошло. Получилось ли автоматом преобразовывать как удобнее вам, или в результате геморроя остановились на принятии их code-style?

Подпишусь на тему.

У меня на работе не вышло это, в качестве эксперимента, потому как code-style включал не только отступы, но и соглашения об именовании, которые пришлось принять мне, чем мучиться с преобразованиями. В результате я всеравно доволен: главное не какой code-style, а его единообразие и применяемость всеми в проекте.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: Мэтт в бесконечной мудрости дал бы git. от Camel

В бесконечной мудрости Мэтт дал бы git

Git - это инструмент инопланетян и тех, кто хочет быть их рабами. Не это путь мудрых %)

Если я буду делать three way merge, например, то сливать я буду три версии формата GNU, а результат будет отформатирован в BSD

Смотря что понимать под «результатом». Незафиксированный результат merge в рабочем каталоге будет отформатирован в GNU. При фиксации он будет переформатирован в BSD, но в твоем рабочем каталоге этого видно не будет.

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

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

Вообще есть проблема табы vs пробелы, лишние пробелы. Тогда можно глянуть сюда
https://github.com/glasserc/ethan-wspace

Как заставить Emacs форматировать файл в стиле GNU?

Подумай, как потом возможно привести все обратно? Стоит хоть сколько-нибудь значительно изменить файл, как это приведет к большему числу проблем, чем те, которые решает.

iVS ★★★★★
()

Я вижу здесь 2 независимые проблемы:

1. Коммит разработчика может нарушить coding style, вне зависимости от того, чем пользуется разработчик.

ИМХО не нужно создавать фильтры на checkin. Нужен hook, блокирующий коммиты, которые нарушают coding style. Преобразование стиля - проблема разработчика, а не администратора репозитория.

2. Разработчику, использующему Emacs, хотелось бы иметь прозрачную схему преобразования из BSD в GNU coding standard.

+1 к tailgunner - схема с фильтром на checkout слишком хрупкая. Хорошего способа реализовать требуемое я не знаю. Правильный вариант, ИМХО, - создать ветку в BSD-стиле, служащую прослойкой между вашей веткой в GNU стиле и удалённым репозиторием в BSD стиле:

mylocalbranch-gnu <---> upstream-gnu <---> upstream-bsd <---> удалённый репозиторий

Cheater
()

Все коммиттеры на Ubuntu, но не все пользуются Emacs'ом. Правильно я понимаю, что надо...

просто всех заставить пользоваться emacs'ом. Для их же блага.

alexeiz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.