Нужно регулярное выражение для извлечения раздела описания из строк версии моего тега Git - PullRequest
0 голосов
/ 05 сентября 2018

В настоящее время у меня есть следующий сценарий PS, чтобы извлечь версию SW из тега Git и интегрировать ее во встроенную сборку. Это работает для тегов, таких как v1.2.3, и создает версии файлов и версий продуктов, например, например. 1.2.3.16 и 1.2.3.16-13b05b79

# Get version info from Git. For example: v1.2.3-45-g6789abc
$gitVersion = git describe --match "v[0-9]*" --long --always --dirty;

# Get name of current branch
$gitBranch = git rev-parse --abbrev-ref HEAD;

# Write Git information to version.txt
$versionFile = $args[1] + "\version.txt";
"version: " + $gitVersion > $versionFile;
"branch: " + $gitBranch >> $versionFile;

# Parse Git version info into semantic pieces
$gitVersion -match '[v](.*)-(\d+)-[g](.+)$';
$gitTag = $Matches[1];
$gitCount = $Matches[2];
$gitSHA1 = $Matches[3];

# Define file variables
$assemblyFile = $args[0] + "\Properties\AssemblyInfo.cs";

# Read template file, overwrite place holders with git version info
$newAssemblyContent = Get-Content $assemblyFile |
    %{$_ -replace '\$FILEVERSION\$', ($gitTag + "." + $gitCount) } |
    %{$_ -replace '\$INFOVERSION\$', ($gitTag + "." + $gitCount + "-" + $gitSHA1) };

echo "Injecting Git Version Info to AssemblyInfo.cs"
$newAssemblyContent > $assemblyFile;

Теперь я хотел бы расширить регулярное выражение в этом сценарии, чтобы я мог использовать теги с кратким описанием, например v1.2.3-description, где description может иметь переменную длину. В идеале, регулярное выражение должно учитывать тире в описании, так что v1.2.3-description-with-dashes также будет действительным и любые другие символы, которые разрешены в тегах Git.

Что делает это трудным для меня (я пробовал), так это то, что команда git describe выведет это как v1.2.3-description-with-dashes-16, как я могу различить тире, принадлежащие выходу Git, и те, которые принадлежат описанию.

1 Ответ

0 голосов
/ 05 сентября 2018

Используя RegEx (и используя новые примеры), вот что вы можете сделать:

$gitVersion -match '(?<tag>v\d+\.\d+\.\d+)(?:-?(?<description>\D+)?)(?:-?(?<count>\d+)?)(?:-?(?<sha1>gd[0-9a-f]+))(?:-?(?<dirty>.+)?)'

$gitTag         = $Matches['tag']
$gitDescription = ($Matches['description']).Trim("-")
$gitCount       = if($Matches['count']) { $Matches['count'] } else { 1 }  # if no count is found, we assume 1 ??
$gitSHA1        = $Matches['sha1']
$gitDirty       = $Matches['dirty']

TestResults:

teststring                                          tag     description               count sha1      dirty
--------------------------------------------------- ------- ------------------------- ----- --------- -----
v1.2.3-123-gd9b5a775-dirty                          v1.2.3                            123   gd9b5a775 dirty
v1.2.3-description-123-gd9b5a775-dirty              v1.2.3  description-              123   gd9b5a775 dirty
v1.2.3-description-with-dashes-123-gd9b5a775-dirty  v1.2.3  description-with-dashes-  123   gd9b5a775 dirty
v1.2.3-description-with-dashes-123-gd9b5a775        v1.2.3  description-with-dashes-  123   gd9b5a775   
v1.2.3-description-with-dashes-gd9b5a775            v1.2.3  description-with-dashes-        gd9b5a775   
v1.2.3-45-gd9b5a775                                 v1.2.3                            45    gd9b5a775   
v1.2.3-gd9b5a775                                    v1.2.3                                  gd9b5a775
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...