1

我有一个运行 mercurial 命令失败的任务,因为 mercurial 没有返回 0 而是 1。

当 mercurial 返回 1 并不意味着它是一个错误,但没有什么可做的。根据文档:

Returns 0 if push was successful, 1 if nothing to push.

如何处理我的任务中的返回,以便当 hg 命令返回 0 或 1 时它不会中断。

这是失败的功能

Function Invoke-HgBookmark([string]$bookmarkname)
{
    $repo = GetCredentials
    & $hg.file bookmark -f $bookmarkname
    Invoke-Expression "$($hg.file) push -B $bookmarkname $repo"
    if ($LASTEXITCODE -eq 0 -Or $LASTEXITCODE -eq 1)
    {
        return 0
    }
    else
    {
        return -1
    }
}

Psake 正在使用以下代码调用我的函数:

try {
    $global:lastexitcode = 0                 
    & $cmd
   if ($lastexitcode -ne 0) {
        throw ("Exec: " + $errorMessage)
    }
    break
}
4

1 回答 1

3

在函数中,$global:LastExitCode在它退出之前设置为所需的值。您必须使用global:前缀才能修改全局变量。否则,PowerShell 会执行“写时复制”操作并修改函数本地的同名变量。

于 2014-01-06T18:52:07.040 回答