2012-08-29 30 views
11

Tengo que escribir un script que automatice la extracción de un repositorio mercurial. ¿Hay alguna forma de que pueda realizar un hg pull -u que incluya pasar el nombre de usuario y la contraseña solicitados en el mismo comando? Sé que hay un método interactivo que es el comportamiento predeterminado, y no quiero guardar el nombre de usuario y la contraseña en hgrc o en otro lugar, ya que será utilizado por varios usuarios, por lo que hay una forma de pasar el nombre de usuario y la contraseña a través del ¿línea de comando? Intenté usar proc_open en PHP, pero eso no funcionaba tan bien como se hacía eco en STDIN.Mercurial (HG) parámetros de extracción: nombre de usuario y contraseña

+0

¿Por qué no utilizar las teclas SSH? –

Respuesta

15

he encontrado dos soluciones:

1.Proporcionar claramente la URL, incluyendo credenciales completas:

hg pull -u https://user:[email protected]/path

2. Proporcionar las credenciales con --config, utilizando * como un prefijo (de la respuesta de Victor):

hg pull -u --config auth.x.prefix=* --config auth.x.username=user --config auth.x.password=pass

+1

Bien, ambos funcionan :) – radtek

-1

Usted puede ser capaz de utilizar el interruptor --config de hacerlo de esta manera:

hg --config auth.username=USERNAME --config auth.password=PASSWORD pull -u 

Yo personalmente nunca he hecho esto, pero espero que esto ayuda.

+4

No no funciona, haciendo caso omiso de la clave [auth] no válida 'nombre de usuario' ignorando clave [auth] no válida 'contraseña' – radtek

4

Pasando la contraseña en la línea de comando es inseguro ya que otros usuarios pueden verlo usando ps y similar. Lo que debe hacer es o bien:

  1. comunicarse con hg en las tuberías que vuelva de proc_open. Tendrá que analizar detenidamente la salida de Mercurial y darle el nombre de usuario y la contraseña en stdin. Ejecutar Mercurial como:

    hg --config ui.interactive=yes 
    

    para asegurarse de que va a hablar con usted - de lo contrario me temo que detecta que no hay TTY y la costumbre le pedirá a todos.

  2. Escriba un archivo de configuración temporal con un [auth] section. Se parece a esto:

    [auth] 
    x.prefix = output of "hg paths default" 
    x.username = USERNAME 
    x.password = PASSWORD 
    

    (El x no es importante, que puede ser cualquier cosa.) Asegúrese de que el archivo sólo es legible por el usuario que se está ejecutando el script como. Luego configure la variable de entorno HGRCPATH para que apunte al archivo y ejecute Mercurial. ¡Borre el archivo cuando haya terminado!

Hay una libhg PHP library para la command server, pero no veo nada acerca de los nombres de usuario o contraseñas, para tirar o clon de esa biblioteca. La biblioteca está en progreso, pero cuando sea más madura sugiero usarla. Pero por ahora los enfoques anteriores deberían ayudarte.

5

La solución 2 es específica de un repositorio. Do

[auth] 
x.prefix = * 
x.username = USERNAME 
x.password = PASSWORD 

para que se aplique a todos los repositorios. Además, si coloca esto en "~/.hgrc" y otorga ese permiso de 600, no tiene que hacer el truco HGRCPATH. Solo déjalo ahí.

2

Eso es trabajaron:

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 
Cuestiones relacionadas