Mercurialリポジトリからのプルを自動化するスクリプトを作成する必要があります。とにかくhg pull -u
、同じコマンドで要求されたユーザー名とパスワードを渡すことを含むを実行できますか?デフォルトの動作であるインタラクティブな方法があることを知っています。ユーザー名とパスワードは複数のユーザーによって使用されるため、hgrcやその他の場所に保存したくないので、ユーザー名とパスワードをコマンドライン?PHPで使用proc_open
してみましたが、STDINにエコーアウトするだけでなく機能しませんでした。
5 に答える
私は2つの解決策を見つけました:
1.完全な資格情報を含むURLを明示的に提供します。
hg pull -u https://user:pass@host/path
2.プレフィックスとして*を使用して--configで資格情報を提供します(Victorの回答から):
hg pull -u --config auth.x.prefix=* --config auth.x.username=user --config auth.x.password=pass
ソリューション2はリポジトリに固有です。行う
[auth]
x.prefix = *
x.username = USERNAME
x.password = PASSWORD
すべてのリポジトリに適用できるようにします。また、これを「〜/ .hgrc」に入れて600の許可を与えると、HGRCPATHトリックを実行する必要はありません。そのままにしておきます。
コマンドラインでパスワードを渡すことは、他のユーザーが同様の方法でパスワードを確認できるため、安全ps
ではありません。あなたがすべきことは次のいずれかです:
hg
から戻ってきたパイプで通信しますproc_open
。Mercurialからの出力を注意深く解析し、stdinでユーザー名とパスワードを入力する必要があります。Mercurialを次のように実行します。hg --config ui.interactive=yes
それがあなたと話をすることを確実にするために—そうでなければ、TTYがないことを検出し、あなたにまったくプロンプトを出さないのではないかと心配しています。
[auth]
セクションを含む一時構成ファイルを作成します。次のようになります。[auth] x.prefix = output of "hg paths default" x.username = USERNAME x.password = PASSWORD
(これ
x
は重要ではありません。何でもかまいません。)ファイルは、スクリプトを実行しているユーザーのみが読み取り可能であることを確認してください。次にHGRCPATH
、ファイルを指すように環境変数を設定し、Mercurialを実行します。完了したらファイルを削除してください。
コマンドサーバー用のlibhgPHPライブラリがありますが、そのライブラリにプルまたはクローン用のユーザー名またはパスワードについては何も表示されません。ライブラリは進行中ですが、より成熟した場合は、それを使用することをお勧めします。しかし今のところ、上記のアプローチはあなたを助けるはずです。
それはうまくいきました:
hg --config auth.rc.prefix=http://host/ --config auth.rc.username=user --config auth.rc.password=password pull -u http://host/full/path/to/repo
--config
スイッチを使用して、次のようにすることができる場合があります。
hg --config auth.username=USERNAME --config auth.password=PASSWORD pull -u
私は個人的にこれを行ったことがありませんが、うまくいけばこれが役立つでしょう。