Параметры перенаправления Mercurial (HG): имя пользователя и пароль

Я должен написать сценарий, который автоматизирует вытягивание из меркуриального репо. В любом случае, я могу выполнить hg pull -u который включает передачу запрошенного имени пользователя и пароля в одной команде? Я знаю, что есть интерактивный метод, который является поведением по умолчанию, и я не хочу сохранять имя пользователя и пароль в hgrc или в другом месте, потому что он будет использоваться несколькими пользователями, так что есть способ передать имя пользователя и пароль через командная строка? Я попытался использовать proc_open в PHP, но это не работало так же хорошо, как повторение в STDIN.

Solutions Collecting From Web of "Параметры перенаправления Mercurial (HG): имя пользователя и пароль"

Я нашел два решения:

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 и т.п. То, что вы должны сделать, это либо:

  1. Общайтесь с hg на трубах, которые вы возвращаете из proc_open . Вам нужно тщательно проанализировать вывод из Mercurial и передать ему имя пользователя и пароль на stdin. Запустите Mercurial как:

     hg --config ui.interactive=yes 

    чтобы он говорил с вами – иначе я боюсь, что он обнаружит, что нет TTY и не попросит вас вообще.

  2. Напишите временный файл конфигурации с разделом [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 

Я лично никогда этого не делал, но, надеюсь, это помогает.