Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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

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