2011-12-26 14 views
1

私はsvnプロジェクトの下で作業しています。私はコミットされたソースファイルを解析し、フックスクリプトを使用して自動的にファイル内に新しく追加された行を探します。SVNで新しく追加された行を見つける

答えて

1

のsvnログ+のsvn非難

あなたがのために-rオプションを使用する必要がWC

最初のステップは、

svnlook changed REPO_PATH 

を使用して、変更されたパスを抽出することである

+0

OPには「自動的に」と「フックスクリプト」と記載されています。私はここにフックが見えません... – Dialecticus

+0

2つのこれらのコマンド+いくつかのgrepping +いくつかのロジック、ポストコミットに配置 - フック –

+0

これはサーバー側から行う必要があります – shaggy

1

内始まりsvn log -v -q -l 1のために試してみてくださいポストフックスクリプトで知られているリビジョン(CommittedRev)。

上記は、スクリプトによって解析されなければならない変更されたファイルのリストを示します。

あなたが追加/修正ラインはあなたの特定のリビジョンで変更された行を与える責任をsvnを抽出しようとすると...あなたは非難によって抽出することはできませんどのような

svn blame -rCommittedRev:CommittedRev file:///Repository/ | grep "^ CommittedRev " 

が線であり、削除されています。

+0

svn blameコマンドでエラーを表示しますか? – shaggy

+0

どのようなエラーがありますか? – khmarbaise

1

svnlookを使用して変更の差分を取得し、追加された行を示す+記号で始まる行についてgrepすることができます。

私はSystem.outを参照しているすべての行が追加されたかどうかを確認したい場合たとえば、私は次のパイプラインを使用することができます

svnlook diff -t "$TXN" "$REPOS" | grep -E "^\+" | grep -qE "System\.out" 

を、戻り値をテストする - 0は、それが一致したことを意味しますライン。

+0

ありがとうございました...その有用な – shaggy

1

NO NO NO

フックを使ってこれを実行しないでください!

フックスクリプトを使用すると、ユーザーはフックが完了するのを待っていることになります。代わりに、Jenkinsを使用してタスクを処理します。ジェンキンスはビルドシステムですが、このようなことをしてビルドのステップを完全にスキップすることができます。この方法では、ユーザーはフックスクリプトが完了するまで待つ必要はなく、実行している差分の結果を自動的に投稿できる場所があります。

なぜ、新しく追加された行だけで、すべてが変更されるのではないのですか? svn diffの結果を解析してすべての追加を見つけることができますが、すべての変更に興味があると思います。

+0

クイックチェック(数百ミリ秒まで)の場合、ユーザーはJenkinsのジョブが非同期で通知されるのを待たなければならないのはなぜですか?賢明なプリコミットフックは、問題のあるコミットであれば、コミットが最初に起こらないことを確認できます。 – Avi

+0

@Avi - このフックは、新たに追加された行を確認するためのものです。これらの行をどのようにユーザーに報告するつもりですか?あなたはそれらに電子メールを送りますか?ウェブページを更新しますか?ジェンキンスはレポートを表示する場所があるため、報告する問題を解決します。さらに、ジェンキンスの変化の歴史は全部あります。さらに、変更を解析してからWebページを電子メールまたは更新しようとしているときに、ユーザーを保持しません。フックは、直接的に、そして直ちにユーザーとコミュニケーションするのに最適です。プリコミットフックは、ユーザが何か間違ったことをするのを防ぎます。このために、ジェンキンスはより良いです。 –

+1

私はあなたがこのすべてを質問にどのように読み込んでいるかわかりません。質問は、彼が追加された行の*レポート*を望んでいるとは言わず、単にそれらを見つけたいと思っています。私は彼らと一緒に何かを自動的にやろうとしていました。彼が何をしたいのか分からずに、私は質問に答えると思っていました。(それはどうやってそれをやるのかということでした)、彼は間違っていると言います。 – Avi

関連する問題