-split '', работающий локально в Powershell, не работает в задаче Powershell для конвейера Azure - PullRequest
1 голос
/ 26 июня 2019

Я использую команду git diff, чтобы получить файл, который изменился между двумя последними коммитами и в зависимости от действия должен по-разному работать с файлами. Поэтому я должен извлечь действие над файлом и именем файла.

Для переименованного файла:

Ниже приведена команда git diff, которая переименована в файл swagger с swaggerA.json на swaggerB.json

R100 swaggerA.json swaggerB.json

Это мой код:

$files=$(git diff HEAD~ HEAD --name-status) 
$temp=$files -split ' '
echo $temp 
echo $temp.Length
$name=$temp[1]
echo "this is $name file"
write-host $name 
$output=$name.Split(' ')
$length=$output.Length
$output[0] 
$output[1] 
$output[$length-1]

Приведенный выше скрипт должен быть идеально разделен на 3 части:

1) R100

2) swaggerAjson

3) swaggerB.json

Но этого не происходит в задаче Powershell конвейера Azure, и каждый раз выдает всю строку.

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

git diff [cid]..[cid] --name-status выводит строки значений, разделенных табуляцией, поэтому разбиение на обычное пространство вам не поможет:

$changes = git diff HEAD~ HEAD --name-status |ForEach-Object {
    # split on tab "`t"
    $change,$orig,$new = $_ -split "`t"
    [pscustomobject]@{
        Change = $change
        Original = $orig
        Current = $new
    }
}
3 голосов
/ 26 июня 2019

Поскольку gid diff возвращает строку со скрытым символом ASCII (`t), если мы копируем результаты в Notepad ++ (а в настройках нажимаем «Показать все символы»), мы можем видеть это:

enter image description here

Так что нам нужно заменить его обычным пробелом перед разбиением:

$files = $files -replace '[^\p{L}\p{Nd}/(/./_]', ' '

Теперь это будет работать, и вы получите строкуразделено:)

...