Как проверить статус репо с помощью posh-git в функции PowerShell?

У нас есть оркестровка psake, которая предлагает пользователю следующее сообщение перед вызовом «git clean -xdf»:

Об удалении всех неотслеживаемых файлов. Нажмите «Y», чтобы продолжить, или любую другую клавишу, чтобы отменить.

Мы хотели бы показывать это приглашение ТОЛЬКО, если в репозитории есть неотслеживаемые файлы, которые можно удалить, запустив команду clean -xdf.

Любые предложения о том, как использовать posh-git для ответа на вопрос «есть ли какие-либо неотслеживаемые изменения в репозитории?» из PowerShell?

Вот существующая оркестровка, для справки...

task CleanAll -description "Runs a git clean -xdf" {
    Write-Host "About to delete any uncommitted changes.  Press 'Y' to continue or any other key to cancel." -foregroundcolor "yellow"
    $continue = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp").Character
    IF ($continue -eq "Y" -or $continue -eq "y")
    {
        git clean -xdf
    }
    ELSE
    {
        Write-Error "CleanAll canceled."
    }
}

person bopapa_1979    schedule 12.03.2015    source источник
comment
git clean -xdf не отменяет изменения в отслеживаемых файлах, он удаляет неотслеживаемые и игнорируемые файлы.   -  person Etan Reisner    schedule 12.03.2015
comment
@EtanReisner - Достаточно честно. Но вопрос действительно об условном отображении или пропуске подсказки, и это не отвечает на этот вопрос. Я обновлю вопрос, чтобы быть более правильным. Несмотря ни на что, спасибо за ответ.   -  person bopapa_1979    schedule 13.03.2015
comment
Вопрос мог быть о недоразумении. Если вы думали, что это то, что сделал git clean, возможно, вы пытались сделать это без всякой причины, поскольку это не так. И более того, как лучше всего ответить на вопрос, зависит (в некоторой степени) от того, какие изменения/и т.д. вам действительно нужно проверить.   -  person Etan Reisner    schedule 13.03.2015
comment
@EtanReisner, спасибо за критику. Есть предложения, как действовать?   -  person bopapa_1979    schedule 13.03.2015
comment
Используйте вывод git status --porcelain или git status -z и найдите ?? маркеры в файлах. Это неотслеживаемые файлы. Я не могу написать это для powershell с головы до ног. В качестве альтернативы просто проверьте, выводит ли что-нибудь git clean -xdn.   -  person Etan Reisner    schedule 13.03.2015
comment
@EtanReisner - Это очень полезно, спасибо. Как только я заработаю, я опубликую результаты здесь для всех остальных. Спасибо еще раз. Кроме того, я приму к сведению ваши комментарии выше и поработаю над написанием более качественных вопросов для начала.   -  person bopapa_1979    schedule 17.03.2015


Ответы (1)


После помощи @EtanReisner я смог заставить работать следующее решение. Он проверяет наличие неотслеживаемых изменений и выдает подсказки, если таковые имеются. В противном случае он просто делает git clean -xdf.

$gitStatus = (@(git status --porcelain) | Out-String)

IF ($gitStatus.Contains("??"))
{
    Write-Host "About to delete any untracked files.  Press 'Y' to continue or any other key to cancel." -foregroundcolor "yellow"
    $continue = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp").Character
    IF ($continue -eq "Y" -or $continue -eq "y")
    {
        git clean -xdf
    }
    ELSE
    {
        Write-Error "CleanAll canceled."
    }
}

git clean -xdf
person bopapa_1979    schedule 18.03.2015