3

変更されたすべてのファイルで JSLint/PyChecker/etc を実行する Mercurial フックが必要です。ただし、すべての hg クライアントを制御できるわけではなく、これをマスター リポジトリ (制御できる) へのプッシュ時に実行したいので、マスターの pretxnchangegroup フックが最適と思われます。

コミットされる変更グループにあるすべての変更セットのリストを取得するにはどうすればよいですか?

precommit フックを使用する他のソリューションがあるようですが、クライアントが JSLint に失敗するコミットを既に持っている可能性があるため、これらは機能しません。この場合、新しいコミットでエラーを修正し、(悪いコミットと新しいコミットの両方) をサーバーに正常にプッシュできる必要があります。サーバーは、変更グループで変更されたすべてのファイルの、各ブランチの最新の変更セットを確認するだけで済みます。

4

3 に答える 3

4

あなたが pretxnchangegroup フックを必要としているのは正しいが、すべての新しいリビジョンをチェックしたくない - 人々はあなたが拒否したエラーを後続の変更セットで修正するだろうが、すべての変更セットをチェックしている場合、彼らの作業は決して受け入れられないからです!

代わりに、すべてのヘッドのすべてのファイルをチェックするか、hg status --rev x:y構文を使用して、既に持っているリビジョンと受け取っているヒント リビジョンの間で変更されたファイルのリストを取得し、ヒント リビジョンでのみそれらのファイルのみをチェックします。

すべてのリビジョンのリストが本当に必要な場合は、バージョン 1.6 で新しくなった revset( hg help revsets) を使用しますが、結果だけを確認したいだけで、目的のすべてのリビジョンを確認したいわけではありません。

于 2010-09-01T19:42:15.620 に答える
3

まさにこれを行う pretxnchangegroup フックを作成しました。現在の変更グループで変更されたすべてのファイルが必要な場合は、次の 2 つのコマンドの出力を結合して取得できます。

hg status --rev $HG_NODE:

(末尾のコロンに注意してください)

hg status --change $HG_NODE

同じマシン上の 2 つのリポジトリ間でプッシュする場合、最初のコマンドで十分に見えますが、リモート リポジトリにプッシュする場合、最初のコマンドは、2 番目のコマンドが入る場所である、変更グループの最初の変更セットで変更されたファイルを見逃します。

http://www.selenic.com/mercurial/hgrc.5.htmlによると、「最初の新しい変更セットの ID は $HG_NODE にあります。」

于 2011-02-08T09:05:51.790 に答える
0

これに対する私の答えはまったく役に立ちますか? https://stackoverflow.com/a/8615156/1025457

これは、changegroup 内のノードを反復処理する pretxnchangegroup フックのスケルトンです。

于 2011-12-23T12:18:15.663 に答える