0

Python で複雑な水銀コミット フックを作成しようとしています。OptionParser を使用してパラメーターを渡すことも許可したいと考えています。これが私がこれまでに持っているものの要点です:

.hg/hgrc 構成:

[hooks]
commit = python:/mydir/pythonFile.py:main
# using python:/mydir/pythonFile.py doesn't work for some reason either

pythonFile.py:

def main(ui, repo, **kwargs):
    from optparse import OptionParser

    parser = OptionParser()
    parser.add_option('--test-dir', action='store', type="string",
                  dest='test_dir', default='otherdir/',
                  help='help info')
    (options, args) = parser.parse_args()

    # do some stuff here
    someFunc(options.test_dir)

if __name__ == '__main__':
    import sys
    main(sys.argv[0], sys.argv[1], sys.argv[2:])

実行するhg commit -m 'message'と、「使用法: hg [オプション] hg: エラー: そのようなオプションはありません: -m」というエラーが表示されます。試してみるhg commit --test-dir '/somedir'と、「hg commit: オプション --test-dir が認識されません」というエラーが表示されます。

最後にcommit = python:/mydir/pythonFile.py:main --test-dir '/somedir'、hgrc 構成で指定しようとしたところ、次のエラーが発生しました: "AttributeError: 'module' object has no attribute 'main --test-dir '/somedir''"

ご協力ありがとうございました。

4

1 に答える 1

1

あなたの問題は、mercurial でパッケージ化された python の一部ではないものをインポートしようとしている可能性があると思います。必要なことがフックに追加情報を渡すことであり、異なるリポジトリ/ブランチなどに対して異なる設定ができるようにする場合は、次を使用できます。

param_value= ui.config('ini_section', 'param_key', default='', untrusted=False)

ここで、ini_section は mercurial.ini / .hgrc ファイルの [] 内のビットで、param_key はエントリの名前なので、次のようになります。

[my_hook_params]
test-dir=/somedir

次に使用します

test_dir = ui.config('my_hook_params', 'test-dir', default='otherdir/', untrusted=False)
于 2013-02-22T16:20:50.700 に答える