Я предполагаю, что вы хотите изменить стиль для исследовательских целей, и вопрос просто гипотетический. Джоэл С., кажется, считает, что ответы, в которых просто говорится, что вы делаете что-то не так, вовсе не являются хорошими ответами, поэтому я попытаюсь дать вам несколько путей для решения вашей проблемы.
Самая близкая вещь, которую svn делает с точки зрения преобразований, это то, что она может изменить строку, заканчивающуюся при оформлении заказа, и изменить ее снова при регистрации. Это позволяет репозиторию иметь единое представление об окончании строки, а для разных клиентов - изменять файлы в соответствии со своими предпочтениями. Хотя эта функция звучит довольно прямо, у многих людей возникают проблемы с ее корректной работой. Просто Google 'svn eol-style' .
Поскольку svn не предоставляет никаких настраиваемых фильтров на стороне клиента, я думаю, было бы безопасно предположить, что вам понадобится изменить клиент svn и скомпилировать его для своих собственных целей. Возможно, вы могли бы отправить патч или расширение обратно в SVN.
Итак, на данный момент вы должны загрузить исходный код svn и иметь возможность получить его для компиляции клиента. На этом этапе обратите ваше внимание на libsvn_subr/subst.c
. Этот файл содержит процедуры для перевода в и из различных форматов. В настоящее время он занимается переводом на расширение ключевых слов и eol's.
Вам просто нужно создать новое свойство, которое может называться member-variable-style
. Для файлов, для которых установлен этот флаг, вы можете вызвать специальное преобразование в коде subst.c
. Вы могли бы отследить ссылку в svn на код преобразования, посмотрев на вызовы svn_subst_translate_stream3
.
OK. Это была легкая часть. Теперь вам нужно получить функцию для правильного перевода вашего кода из одной формы в другую. Вы не можете просто вытащить процессор cpp из gcc, потому что нет гарантии, что код будет корректным / скомпилированным. Вы должны приложить все усилия, чтобы создать правила lexing, которые, мы надеемся, будут правильно делать с правильными переменными. Для переменных, начинающихся с m_ или даже m, это довольно просто сделать. К сожалению, для члена вашей команды, который вообще не использует m_, может быть довольно сложно определить, что является переменной-членом в C ++. К счастью, существует немало исследований в этой области, проведенных людьми, которые создают код с подсветкой синтаксиса. Я бы покопался и нашел какой-то код, который хорошо выделяет код C ++.
Наконец, так как эти преобразования могут стать довольно сложными, я бы посоветовал вам использовать оболочку svn для программы фильтрации на этом этапе. Это не было бы большим для производительности, но это сделало бы намного легче написать и отладить ваш фильтр. Затем вы можете написать свой фильтр на Perl или на языке по вашему выбору. Хороший пример использования внешней программы внешнего фильтра см. Sirect redirectors .
.
Удачи!