問題タブ [mercurial-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - MercurialHookの環境変数の設定
マーキュリアルフックからサーバーに一連の環境変数を設定するシェルスクリプトを呼び出そうとしています。新しい変更グループが着信すると、シェルスクリプトは正常に呼び出されますが、環境変数はシェルスクリプトの呼び出しを超えて引き継がれません。
リポジトリ上の私のhgrcファイルは次のようになります。
シェルスクリプトの出力、次にenvコマンドの出力を確認できますが、envコマンドには、シェルスクリプトによって設定された新しい環境変数が含まれていません。
シェルスクリプトを単独で実行すると正常に動作することを確認しましたが、Mercurialフックのコンテキストで実行すると、環境が適切に設定されません。
version-control - Mercurial フックが正しく実行されない
これは非常に簡単に実行できるはずですが、何らかの理由で私の Mercurial リポジトリでは機能しません。私が望むのは、hg update
誰かがプッシュするたびにリモートリポジトリが自動的に実行されることだけです。だから私は私の .hg/hgrc ファイルにこれを持っています:
シンプルですね。しかし、何らかの理由で、これは決して実行されません。これを行うシェルスクリプトも書いてみました。.hg/hgrc は次のようになります。
hg-update は次のようになります。
繰り返しますが、これは更新されません。の内容はhg help
に書き出されますがworks.txt
、 には何も書き出されませんhg update
。ここで私が見逃している明らかなものはありますか?これは何日も私を悩ませてきましたが、私はそれを機能させることができないようです.
アップデート
繰り返し-v
ますが、ワークステーションからリモート リポジトリにプッシュするコマンド ラインでスイッチを使用しても、それらのecho
行が.hg/hgrc
. ただし、同じファイルシステム (SSH 経由でログインしている) のリポジトリのクローンからプッシュすると、次のようになります。
したがって、機能しますが、同じファイルシステムからプッシュする場合のみです。ネットワーク経由で別のワークステーションからリポジトリにプッシュしようとしても機能しません。
version-control - Mercurialフックを使用して、バージョン管理用のデータベースダンプを作成/ロードする
Drupalプロジェクトのソースファイルをバージョン管理するためにMercurialを使い始めました(私はVCSとMercurialの初心者の両方です)。ただし、データベースは、日付の付いた.sql.gzファイルのディレクトリを使用して「バージョン管理」されています。
必要なのは、リポジトリ内のどこかに単一のデータベースダンプファイルを作成することです。このファイルは、データベースが変更されると現在のダンプで上書きされ、別のバージョンにロールバックするときにデータベースにインポートされます。
私はそれを手動で行いました、そしてそれは働きました。しかし、私が本当に望んでいるのは、コミット/更新のたびに自動的にダンプ/ロードを行うものです。TortoiseHgのツールを使用するのが好きで、別のスクリプトを実行する気がないので、最初にデータベースをダンプしてからコミットするmakefileのような外部のものよりも、Mercurialにフックする方が本当に好きです。
mysql .... < dumpfile.sql
さて、フック上のようなものは、update
更新のたびにデータベースダンプをロードする簡単な方法のようです。しかし、自動ダンプはどうですか?
SVNのpre-commitフックについても同様の質問があり、受け入れられた答えは、おそらくそれは悪い考えであるというものでした。Mercurialに適用されますか?たぶん別のフック(prechangegroup
?)が機能するでしょうか?
編集:
私は自分のローカルマシンでそれを自分で使用していることを指摘する必要があります。シングルユーザーを超えて拡張することはできません。
mercurial - 便利な水銀フック
あなたが遭遇したいくつかの有用なMercurialフックは何ですか?
いくつかのフックの例はMercurialの本にあります:
個人的には、これらはあまり役に立ちません。を見たいのですが:
- 複数のヘッドを拒否する
- マージを使用して変更グループを拒否します(ユーザーに常にリベースさせたい場合に便利です)
- コミットメッセージに特別な文字列が含まれていない限り、マージを使用して変更グループを拒否します
- FogbugzまたはTFSへの自動リンク(bugzillaフックと同様)
- ブラックリストは、特定のチェンジセットIDを持つプッシュを拒否します。(MQを使用して他のクローンから変更をプルする場合に便利です)
batとbash、またはPythonのいずれかを持つフックに固執してください。そうすれば、*nixユーザーとWindowsユーザーの両方が使用できます。
mercurial - TortoiseHg へのフックの追加
TortoiseHg を使用していて、レポにフックを適用したいと考えています。私のレポの .hg/hgrc ファイルは次のとおりです。
問題は、TortoiseHg の PYTHONPATH 変数がどこに設定されているかわかりません。どうすれば変更できますか? または、TortoiseHg の Python インタープリターから見えるようにするには、どこに Python ファイルを置きますか?
TortoiseHg のドキュメントや Google でフックについての言及が見つかりませんか?
mercurial - Mercurial 発信フック
ローカル リポジトリにプッシュするときにバックアップ リモート リポジトリにプッシュする Mercurial フックを作成しようとしています。「発信」フックをフックできると思っていましたが、これはきれいではない無限ループを作成します。それで、ポストプッシュフックのようなものがありますか、それともプッシュしているリポジトリに「着信」フックを持たせて、代わりにリモートバックアップにプッシュするのが最善でしょうか?
mercurial - 大きなバイナリファイルのコミットを禁止するMercurialフック
トランザクションをコミットする前に実行されるMercurialフックが必要です。これにより、コミットされるバイナリファイルが1メガバイトを超える場合にトランザクションが中止されます。1つの問題を除いて正常に動作する次のコードを見つけました。チェンジセットにファイルの削除が含まれる場合、このフックは例外をスローします。
フック(私は使用していpretxncommit = python:checksize.newbinsize
ます):
例外:
私はMercurialフックを書くことに慣れていないので、何が起こっているのかかなり混乱しています。hgがすでにファイルを認識しているのに、フックがファイルが削除されたことを気にするのはなぜですか?このフックを修正して、常に機能するようにする方法はありますか?
更新(解決済み): 変更セットで削除されたファイルを除外するようにフックを変更しました。
ssh - コミッター名に基づいてプッシュを拒否する
最近、mercurial ressoitory をセットアップしました。すべての pusing は ssh 経由で行われます。現在、LDAP アカウントを持つユーザーのみが変更をリポジトリにプッシュできます。ただし、ローカル リポジトリにコミットする場合、 --user を使用して任意のコミッター名を使用できます。コミッター名が LDAP アカウント名と一致しない状況が発生する可能性があります。これは避けたい。
これが起こらないようにするための最善の方法は何でしょうか? この問題に対処するには、フックが最適な方法でしょうか? これをローカルフックにしたくはありませんが、リポジトリと同じマシンに存在するフックです。プッシュのイベントでコミッター名が LDAP アカウントと一致するかどうか、および適切なエラー メッセージが返されないかどうかを確認する必要があります。
これは賢明な進め方のように思えますか、それとも私は間違った方法で問題に取り組んでいますか?
windows - Mercurial インプロセス フックを取得して Windows で実行する
Mercurial インプロセス フックを Windows で実行しようとしています。
問題はフックの書き方ではありません(既存のものを使用したいのですが、この場合は Mercurial 統合用のBugTracker.Netのフックです。ファイルへの直接リンクは見つかりませんでしたが、ここでBT.net をダウンロードします。「mercurial」サブフォルダーにあります)。
問題は、Mercurial にそれを実行するように指示する方法です。
ドキュメントを読むのにかなりの時間を費やしましたが、今は立ち往生しています。
(Pythonの特定の知識があればおそらく簡単でしょう-私は持っていません)
hgrc ファイル (リポジトリの .hg フォルダー内) に行を挿入する必要があることはわかっています。
HG Bookに次のような例があります。
Mercurial サイトには別の例があり、次のようになります。
今、私は「着信」フックが欲しいので、少なくとも私はこれをしなければならないことを知っています:
問題は「X」を求めることです。
ファイル名はhg_hook_for_btnet.pyで、ファイルには次のような行があります。
それは「機能」自体の名前だと思います。
したがって、私の行は次のようになります。
しかし、プッシュすると[Errno 2] No such file or directoryというエラー メッセージが表示されます。
すでにさまざまなバリエーションを試しましたが、うまくいかず、何が間違っているのかわかりません。
- 最初にpython:が必要ですか?
- ファイル拡張子.pyを指定する必要がありますか?
- Mercurial サイトの例 (上記参照) に示されているように、/path/to/...は必要ですか?
- はいの場合、パスの正しい構文は何ですか? ( c:\MyRepo\だけでは機能しません - Python では構文が異なる必要があります)
また、フック ファイルを正しいフォルダに配置しましたか?
現在、リポジトリのメイン フォルダー (.hg フォルダーと同じレベル) にあります。
編集:
マーティン、私はこれを次のように変更しました:
今、別のメッセージが表示されます: [ Errno 22] 引数
が無効です。repo
ui
では、これはフック スクリプトが壊れているということですか?
(私が言ったように-私はPythonについて何も知りません。これはオープンソースのバグトラッカーからの既存のフックスクリプトです)
編集2:
インプロセスと別のプロセスに関する混乱をお詫びします-違いがあることは知っていますが、フックがPythonで記述されている場合、自動的にインプロセスである必要があると想定しました(間違っていたことがわかりました:-)
さて、編集した回答の構文で、スクリプトは少なくとも実行されます。
私はPython 2.7をインストールしており(ここで質問する前にすでにインストールしています)、スクリプトの最初の行を#!C:\Python27\python.exe
.
今、私はこれを取得します:
したがって、スクリプトは実行されますが、まだいくつかのエラーがあります。
これは Bugtracker.NET 関連の問題のようです。そのため、BT.NET メーリング リストでさらにアドバイスを求めます。
でも、助けてくれてありがとう。あなたがいなかったら、私はここまで来れなかったでしょう!
python - チェンジグループ内のチェンジセットのリストを取得します (mercurial python hook)
変更されたすべてのファイルで JSLint/PyChecker/etc を実行する Mercurial フックが必要です。ただし、すべての hg クライアントを制御できるわけではなく、これをマスター リポジトリ (制御できる) へのプッシュ時に実行したいので、マスターの pretxnchangegroup フックが最適と思われます。
コミットされる変更グループにあるすべての変更セットのリストを取得するにはどうすればよいですか?
precommit フックを使用する他のソリューションがあるようですが、クライアントが JSLint に失敗するコミットを既に持っている可能性があるため、これらは機能しません。この場合、新しいコミットでエラーを修正し、(悪いコミットと新しいコミットの両方) をサーバーに正常にプッシュできる必要があります。サーバーは、変更グループで変更されたすべてのファイルの、各ブランチの最新の変更セットを確認するだけで済みます。