誰かがSVNリポジトリにコミットするたびに、コードにいくつかのスタイルを適用したいと思い、そのためにコミットされたastyle
変更にsvnフックを使用しますpre-commit
。
次のようにファイル名を取得できますが、スタイルを適用すると、プログラムはファイルからデータを取得できないようです。
for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | cut -b 5-); do
# echo $REPOS/$FILE 1>&2 # prints the files' paths
astyle --style=gnu -n $FILE
done
# commit the changes from astyle here
どうやってこれを達成できるか知っていますか?
答え1
残念ながら悪いニュースがあります。君はできない
で述べたようにsvn-books「Repository Hooksの実装」の章でStop-Signを含むコメント(ご存知のように、それその意味は)
フックスクリプトはほとんどすべての操作を実行できますが、フックスクリプトの作成者は1つの領域に制限を設ける必要があります。つまり、コミットされたトランザクションを変更するためにフックスクリプトを使用しないでください。コミットされているファイルのエラー、欠陥、またはポリシー違反を自動的に修正するためにフックスクリプトを使用したいと思う誘惑があるかもしれませんが、そうすると問題が発生する可能性があります。 Subversion は特定のストレージ データ ビットのクライアント側キャッシュを維持し、この方法でコミット トランザクションを変更すると、これらのキャッシュが目立たなくなるほど古くなる可能性があります。これらの不一致は、予期しない予期しない動作を引き起こす可能性があります。トランザクションを変更する代わりに、事前コミットフックでトランザクションを検証し、必要な要件が満たされない場合は、コミットを拒否する必要があります。ボーナスにより、ユーザーは慎重かつ規制に従う作業習慣の価値を理解します。
CollabNetの最高技術責任者であるJack Repenningも次のように述べています。話すこれ
…悲しいことに言いたいことがあります。いいえ、そうすることはできません。送信されるファイルのファイル内容はい(svnlookの「changed」および「cat」コマンドを介して)フックスクリプトでこれを実行できますが、データベースにすでに入力されているデータのコピーが表示されます(実際にはコミットされていませんが)。これを修正する方法は、最終トランザクションコミットのみを許可または拒否することです。
まだ試してみる勇気がある場合は、コードを理解する代わりに試してみることができます。古いトピック(2009)、著者は「それは修正する取引内容