Почему Mercurial игнорирует путь репо, который я указал в Powershell? - PullRequest
1 голос
/ 27 января 2012

Я пытаюсь написать скрипт Powershell, чтобы сделать некоторые вещи с выводом, который я получаю из команды Mercurial log. Вот что у меня так далеко:

param([string] $Path, [string] $From, [string] $To)
$file_list = hg log -R ${Path} -r ${From}:${To} --style fileList
$file_list

Когда я запускаю этот скрипт .ps1 из приглашения (текущий рабочий каталог - мой рабочий стол), я получаю следующую ошибку:

hg.exe : abort: :tip not under root

Я добавил кавычки вокруг команды, чтобы я мог точно видеть, что запускается так:

param([string] $Path, [string] $From, [string] $To)
$file_list = "hg log -R ${Path} -r ${From}:${To} --style fileList"
$file_list

Когда я называю это так:

.\MyScript.ps1 -Path .\Projects\MyProject -From 80 -To tip

Вывод - именно то, что я хотел:

hg log -R .\Projects\MyProject -r 80:tip --style fileList

Если я скопирую и вставлю этот вывод прямо в мою командную строку, команда log будет работать правильно.

Я не могу найти хорошую документацию по этому сообщению об ошибке. Я знаю, что этот каталог является репо. Разве это на самом деле не использует каталог, который я указал для корня репо? Делает ли Powershell что-то на пути, по которому я иду?

Ответы [ 4 ]

2 голосов
/ 27 января 2012

У Powershell есть проблемы с передачей аргументов в exe.

Простое присвоение командной строки строке и просмотр содержимого этой строки вам здесь не помогут.

Существует утилита под названием echoargs.exe, которая входит в состав расширений Powershell Community.

Получите это и передайте ему аргументы, которые вы передаете в hg, это будет отражать фактические аргументы, которые были предоставлены Powershell.

1 голос
/ 29 января 2012

Похоже, что это было двоеточие между $ {From} и $ {To}.Я исправил это, убрав двоеточие с помощью обратного удара (`).Изменение сценария на:

param([string] $Path, [string] $From, [string] $To)
$file_list = hg log -R ${Path} -r ${From}`:${To} --style fileList
$file_list

запускает команду журнала, как и ожидалось.

Короче, остерегайтесь двоеточий в Powershell !

0 голосов
/ 28 января 2012

Для вызова exe s с аргументами в Powershell, я использую &.

. Для меня всегда было полезно поместить путь exe в переменную, а затем каждый из моих аргументовдругие переменные, чтобы поддерживать порядок (просто что-то вроде $arg=-d myArg), а затем вызывать следующее:

& "$path" "$arg1" "$arg2" "$arg3" и т. д.

0 голосов
/ 27 января 2012

Вы не можете просто передать хранилище в качестве первого аргумента; его нужно передать параметру -R. Эта версия вашей PowerShell будет работать:

param([string] $Path, [string] $From, [string] $To)
$file_list  = hg log -R ${Path} -r ${From}:${To} --style fileList
$file_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...