2012-08-29 17 views
11

Ich muss ein Skript schreiben, das das Ziehen aus einem mercurial Repo automatisiert. Gibt es trotzdem eine hg pull -u, die beinhaltet, den angeforderten Benutzernamen und das Passwort im selben Befehl zu übergeben? Ich weiß, dass es eine interaktive Methode gibt, die das Standardverhalten ist, und ich möchte nicht den Benutzernamen und das Passwort in hgrc oder anderswo speichern, weil es von mehreren Benutzern verwendet wird, also gibt es eine Möglichkeit, den Benutzernamen und das Passwort über die Befehlszeile? Ich versuchte mit proc_open in PHP, aber das funktionierte nicht so gut wie Echo zu STDIN.Mercurial (HG) Pull-Parameter: Benutzername und Passwort

+0

Warum nicht SSH-Schlüssel verwenden? –

Antwort

15

fand ich zwei Lösungen:

1.bieten Explizit die URL, einschließlich der vollständigen Anmeldeinformationen:

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

2. die Anmeldeinformationen mit --config Stellen, mit * als Präfix (von Victor Antwort):

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

+1

Schön, beide funktionieren :) – radtek

-1

Sie könnten in der Lage sein, die --config Schalter zu bedienen, dass wie dies zu tun:

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

Ich persönlich habe noch nie getan, aber hoffentlich hilft dies.

+4

Nein funktioniert nicht, ignorieren ungültiger [auth] Schlüssel 'Benutzername' Ignorieren ungültiger [Auth] Schlüssel 'Passwort' – radtek

4

Das Kennwort in der Befehlszeile übergeben ist unsicher, da andere Benutzer es mit ps und ähnlichem sehen können. Was sollten Sie tun, ist entweder:

  1. Kommunizieren mit hg an den Rohren Sie von proc_open zurück. Sie müssen die Ausgabe von Mercurial sorgfältig analysieren und ihm den Benutzernamen und das Passwort auf der Standardeingabe geben. Führen Sie Mercurial als:

    hg --config ui.interactive=yes 
    

    um sicherzustellen, dass es mit dir reden wird - sonst fürchte, ich bin, dass es erkennt, dass es keine TTY ist und Sie werden nicht an allen prompt.

  2. Schreiben Sie eine temporäre Konfigurationsdatei mit einer [auth] section. Es wird wie folgt aussehen:

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

    (Die x nicht wichtig ist, kann es alles sein.) Stellen Sie sicher, dass die Datei vom Benutzer nur lesbar ist, dass Sie als das Skript ausführen. Setzen Sie dann die Umgebungsvariable HGRCPATH so, dass sie auf die Datei zeigt und Mercurial ausführt. Löschen Sie die Datei, wenn Sie fertig sind!

Es gibt eine libhg PHP library für die command server, aber ich sehe nichts über Benutzernamen oder Passwörter für Zug- oder Klon in dieser Bibliothek. Die Bibliothek ist in Arbeit, aber wenn sie reifer ist, schlage ich vor, sie zu benutzen. Aber jetzt sollten die oben genannten Ansätze Ihnen weiterhelfen.

5

Lösung 2 ist spezifisch für ein Repository. Do

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

, damit es für alle Repositories gilt. Wenn Sie dies in "~/.hgrc" setzen und die Erlaubnis von 600 geben, müssen Sie den HGRCPATH-Trick nicht machen. Lass es einfach da.

2

Das ist gearbeitet:

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 
Verwandte Themen