Мне нужно написать script, который автоматизирует вытягивание из меркуриального репо. В любом случае я могу выполнить hg pull -u
, который включает передачу запрошенного имени пользователя и пароля в той же команде? Я знаю, что существует интерактивный метод, который является поведением по умолчанию, и я не хочу сохранять имя пользователя и пароль в hgrc или в другом месте, потому что он будет использоваться несколькими пользователями, так что есть способ передать имя пользователя и пароль с помощью командная строка?
Я пробовал использовать proc_open
в PHP, но это не работало так же хорошо, как эхо в STDIN.
Параметры перенаправления Mercurial (HG): имя пользователя и пароль
Ответ 1
Я нашел два решения:
1. Явно укажите URL-адрес, включая полные учетные данные:
hg pull -u https://user:[email protected]/path
2. Укажите учетные данные с помощью --config, используя * в качестве префикса (от ответа Виктора):
hg pull -u --config auth.x.prefix=* --config auth.x.username=user --config auth.x.password=pass
Ответ 2
Решение 2 относится к репозиторию. У
[auth]
x.prefix = *
x.username = USERNAME
x.password = PASSWORD
чтобы он применим ко всем хранилищам. Кроме того, если вы помещаете это в "~/.hgrc" и даете это разрешение 600, вам не нужно делать трюк HGRCPATH. Просто оставьте его там.
Ответ 3
Передача пароля в командной строке небезопасна, поскольку другие пользователи могут видеть ее с помощью 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
не важно, это может быть что угодно.) Убедитесь, что файл доступен только для чтения пользователем, которым вы пользуетесь script as. Затем установите переменную средыHGRCPATH
, чтобы указать на файл и выполнить Mercurial. Удалите файл, когда закончите!
Существует библиотека libhg PHP для сервера команд , но я ничего не вижу о именах пользователей или паролях для pull или clone в этой библиотеке. Библиотека работает, но когда она более зрелая, я предлагаю ее использовать. Но на данный момент эти подходы должны помочь вам.
Ответ 4
Это сработало:
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
Ответ 5
Возможно, вы сможете использовать переключатель --config
, чтобы сделать это следующим образом:
hg --config auth.username=USERNAME --config auth.password=PASSWORD pull -u
Я лично никогда этого не делал, но, надеюсь, это помогает.