Я должен написать сценарий, который автоматизирует вытягивание из меркуриального репо. В любом случае, я могу выполнить hg pull -u
который включает передачу запрошенного имени пользователя и пароля в одной команде? Я знаю, что есть интерактивный метод, который является поведением по умолчанию, и я не хочу сохранять имя пользователя и пароль в hgrc или в другом месте, потому что он будет использоваться несколькими пользователями, так что есть способ передать имя пользователя и пароль через командная строка? Я попытался использовать proc_open
в PHP, но это не работало так же хорошо, как повторение в STDIN.
Я нашел два решения:
1. Явным образом укажите URL-адрес, включая полные учетные данные:
hg pull -u https://user:pass@host/path
2. Укажите учетные данные с помощью –config, используя * в качестве префикса (из ответа Виктора):
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
среды HGRCPATH
чтобы указать на файл и выполнить Mercurial. Удалите файл, когда закончите!
Для сервера команд есть библиотека libhg PHP , но я ничего не вижу о именах пользователей или паролях для pull или clone в этой библиотеке. Библиотека работает, но когда она более зрелая, я предлагаю ее использовать. Но на данный момент эти подходы должны помочь вам.
Это сработало:
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
Я лично никогда этого не делал, но, надеюсь, это помогает.