2012-03-20 4 views
0

Je suis en train de créer un commit mercurial complexe en python. Je veux également être autorisé à passer des paramètres en utilisant OptionParser. Voici l'essentiel de ce que j'ai jusqu'à présent:Mercurial Commit Hook avec fonction principale Python

.hg/hgrc config:

[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:]) 

Quand je lance hg commit -m 'message' je reçois une erreur: « Utilisation : hg [options] hg: erreur: pas une telle option: -m ". Lorsque j'essaye hg commit --test-dir '/somedir' j'obtiens une erreur: "hg commit: option --test-dir non reconnu".

Enfin j'ai essayé spécifiant commit = python:/mydir/pythonFile.py:main --test-dir '/somedir' dans la configuration hgrc et je suis arrivé cette erreur: « AttributeError: objet « module » n'a pas d'attribut « principal --test-dir «/somedir » » »

Merci pour votre Aidez-moi.

Répondre

1

Je pense que votre problème peut être d'essayer d'importer quelque chose qui ne fait pas partie de python empaqueté avec mercurial. Si ce que vous avez besoin est de transmettre des informations supplémentaires au crochet de telle sorte que vous pouvez le configurer différemment selon les branches prises en pension/etc, vous pouvez utiliser

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

où ini_section est le bit [] dans le Mercurial.ini/.hgrc fichier et param_key est le nom de l'entrée donc quelque chose comme

[my_hook_params] 
test-dir=/somedir 

puis utilisez

test_dir = ui.config('my_hook_params', 'test-dir', default='otherdir/', untrusted=False)