2009-05-27 9 views
1

私はmCamelCase規則を使用してメンバ変数の名前を好む男(mSomeVarやmSomeOtherVarなど)と仕事をしています。私はこのフォーマットに耐えられません。私は、m_camelCaseコンビネーションを好んでいます。たとえば、m_someVarまたはm_someOtherVarです。我々はお互いのコードを見てお互いを怒らせる。チェックアウト/更新時にメンバ変数の名前を変更するsvnスクリプト

チームに新しい男を追加しました。彼はプレフィックスを一切使用しません。 svnを使用しているので、サーバーからコードをダウンロードするときにメンバー変数の名前を変更するsvnスクリプトを開発できると考えていました。こうすることで、誰もが自由に名前を付けられたメンバー変数を取得できます。

誰もこの種のことをすることができるサンプルsvnスクリプトを持っていますか?私はコメントヘッダーを変更するスクリプトを見てきましたが、C++プロセッサを含むものが必要です。

答えて

3

Subversionには更新作業のフックがありません。あなたはあるコンベンションから別のコンベンション(リポジトリ標準)への変換を可能にするポストコミットフック*を持つことができます。チェックアウトしてから必要な調整を行いますが、これはsvn diffなどで間違った読みをします。

私の提案は、あなたの同僚と座って、標準に同意することです。しかし、コミット後のフックはスリップアップを捕らえるのにまだ役立つでしょう。

*私は、コミットが発生したと思っています。自動的にチェックアウトし、リポジトリの標準規約に準拠するようにコードを変更し、必要に応じてコミットします。別のオプションは、コードが標準に準拠していない場合にコミットを許可しない事前コミットフックを持つことです。

5

災害のレシピのような音です。これを有効にするには、リポジトリ全体の標準を決める必要があります。ここでは、すべてのファイルで同じ変数命名規則が使用されます。あなたがそれを行うことができれば、みんながそういうコードを作ってみませんか?規則について重要なことは、大会使用ないですが、誰もが実際に同じ規則を使用していること!

誰かを見つけて電話をかける(またはランクを引くことができます)場合は、誰もがそれを吸うだけです。

5

私はあなたが研究目的のためにスタイルを変更したいと思っています。質問は単純に仮説です。 Joel S.は、単にあなたが何か間違っていると言っている答えはまったく良い答えではないと思っているようですので、私はあなたにあなたの問題に近づく道を教えようとします。

svnが変換に関して行う最も近いことは、チェックアウト時に行末を変更し、チェックイン時に再度変更することです。これにより、リポジトリは、行末の単一のアイデアを持ち、異なるクライアントがファイルを好みに変更することができます。この機能はかなり正直に聞こえますが、多くの人が正常に動作するには問題があるようです。単にGoogle のsvn eol-style 'です。

svnはカスタマイズ可能なクライアントサイドフィルタを提供していないので、svnクライアントを変更して自分の目的でコンパイルする必要があると想定すると安全だと思います。パッチやエクステンションをsvnに提出することもできます。

この時点で、svnソースをダウンロードしてクライアントをコンパイルすることができます。この時点で、あなたの注意をlibsvn_subr/subst.cにしてください。このファイルには、さまざまな形式に変換するルーチンが含まれています。現在、キーワードの拡張とeolの翻訳を行っています。

member-variable-styleという新しいプロパティを作成するだけで済みます。このフラグが設定されているファイルの場合は、subst.cコードで特別な変換を呼び出すことができます。 svn_subst_translate_stream3への呼び出しを見れば、svnのリファレンスを変換コードにトラッキングすることができます。

OK。それは簡単な部分でした。これで、コードをあるフォームから別のフォームに正しく変換する関数を取得する必要があります。コードが有効/コンパイルされる保証はないので、単にgccからcppプロセッサーを取り出すことはできません。適切な変数に適切なことを行うことになるような、レキシングルールを作成して、あなたの最善の仕事をする必要があります。 m_またはmで始まるバラバラの場合、これはかなり簡単です。残念ながら、m_をまったく使用しないチームのメンバーにとって、C++のメンバー変数を決定するのはかなり難しいことです。幸運なことに、構文強調表示のコードを作成する人が行った、この分野の研究はかなりあります。私は周りを突っ張り、C++コードを強調表示する良い仕事をするいくつかのコードを見つけました。

最後に、これらの変換がかなり複雑になる可能性があるので、私はこの段階でフィルタプログラムにsvnシェルを用意することをお勧めします。これはパフォーマンスにはあまり適していませんが、フィルタを作成してデバッグする方がはるかに簡単です。 Perlや好みの言語でフィルタを書くことができます。外部フィルタプログラムを使用する良い例については、Squid redirectorsを参照してください。

幸運を祈る!