为什么Mercurial忽略了我在Powershell中给出的回购路径?

时间:2012-01-27 15:52:05

标签: powershell mercurial

我正在尝试编写一个Powershell脚本来处理我从Mercurial日志命令获得的输出。这是我到目前为止所得到的:

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命令可以正常工作。

我找不到关于此错误消息的任何好文档。我知道这个目录是一个回购。它实际上没有使用我为repo root指定的目录吗? Powershell是否正在为我传入的道路做些什么?

4 个答案:

答案 0 :(得分:2)

Powershell在将参数传递给exe时遇到了问题。

只需将命令行分配给字符串,并且看到该字符串的内容对您没有帮助。

有一个名为echoargs.exe的工具,它是Powershell Community Extensions.

的一部分

获取并将传递给hg的参数传递给它,它将回显Powershell提供的实际参数。

答案 1 :(得分:1)

看起来它是$ {From}和$ {To}之间的冒号。我用一个反引号(`)来逃避冒号来修复它。将脚本更改为:

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

按预期运行log命令。

简而言之,谨防Powershell中的冒号

答案 2 :(得分:0)

您不能仅将存储库作为第一个参数传递;它需要传递给-R参数。此版本的PowerShell可以使用:

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

答案 3 :(得分:0)

要使用Powershell中的参数调用exe,我使用&

对我来说一直有用的是将exe路径放在变量中,然后将其中的每个args放在其他变量中以保持整洁(就像$arg=-d myArg之类的内容)然后调用以下内容:

& "$path" "$arg1" "$arg2" "$arg3"等等。