前回 チラ見せしていた、Gitレポジトリの releases ページからのダウンロード数を確認する PowerShell スクリプトの完成形は以下のとおりである。カレントディレクトリのレポジトリの1番目のリモートブランチの releases にある各 assets にあるファイルとそのダウンロード数を標準出力に表示する。
Set-PSDebug -Strict function Get-Repo { $branch = (git remote show -n | Select-Object -First 1) if ( $branch ) { foreach ( $line in (git remote show -n $branch) ){ if ( $line -match "Push +URL: \w+@github.com:([\w-]+/[\w-]+).git" ){ return $matches[1] } } } return $null } $repo = (Get-Repo) if ( -not $repo ){ Write-Host "git information not found" exit 1 } $url = "https://api.github.com/repos/$repo/releases" Invoke-WebRequest -URI $url | ConvertFrom-Json | ForEach-Object { foreach ($p in $_.assets){ Write-Host $p.name $p.download_count } }
$ Download-Count.ps1 | head nyagos-4.4.14_0-linux-amd64.zip 20 nyagos-4.4.14_0-windows-386.zip 1409 nyagos-4.4.14_0-windows-amd64.zip 1770 nyagos-4.4.13_3-linux-amd64.tar.gz 25 nyagos-4.4.13_3-windows-386.zip 1427 nyagos-4.4.13_3-windows-amd64.zip 1883 nyagos-4.4.13_2-linux-amd64.tar.gz 13 nyagos-4.4.13_2-windows-386.zip 105 nyagos-4.4.13_2-windows-amd64.zip 207 nyagos-4.4.13_1-linux-amd64.tar.gz 23 $
最初の Get-Repo は現在カレントディレクトリがあるレポジトリのリモートブランチの "(ユーザ名)/(レポジトリ名)"
を得る。
ところで、これ最初不具合があって、API からエラーが返されていた。
(元ソースは上書きしてしまっていてないので、記憶から再現)
git remote show -n $branch | ForEach-Object { if ( $_ -match "Push +URL: \w+@github.com:([\w-]+/[\w-]+).git" ){ return $matches[1] } } return $null
これ、なぜか戻り値に nyaosorg/nyagos
と末尾に空白がついてしまう。
おそらくだが、return $matches[1]
の戻る対象先が関数ではなく ForEach-Object ブロックになっていて、$matches[1]
のセットと $null
のリストが関数の戻り値となってしまっていたのだろう。失敗失敗