Public/Update-NcrementProjectFile.ps1
<#
.SYNOPSIS Updates a project file version number. .DESCRIPTION This cmdlet will modify a project file with the information in the specified [Manifest] object. If the project file passed is not known it will be ignored. .PARAMETER Manifest The file-path or instance of a [Manifest] object. .PARAMETER InputObject The project file. If the file type is unknown it will be ignored. .PARAMETER CommitMessage The git commit message. .PARAMETER Commit When present, any files modified by this cmdlet will be committed to source control. .EXAMPLE Get-ChildItem -Filter "*.csproj" | Update-NcrementProjectFile $manifest -Commit; This example will update the project file version number then commit the changes to source control. #> function Update-NcrementProjectFile { [CmdletBinding(ConfirmImpact = "Medium", SupportsShouldProcess)] Param( [Parameter(Mandatory)] [ValidateNotNull()] $Manifest, [Parameter(Mandatory, ValueFromPipeline)] [ValidateNotNull()] $InputObject, [Alias('m', "Message")] [string]$CommitMessage, [Alias('c')] [switch]$Commit ) BEGIN { [int]$filesModified = 0; [string]$cwd; } PROCESS { $stagedFile = $InputObject | Edit-NetcoreProjectFile -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return $InputObject; } $stagedFile = $InputObject | Edit-NetFrameworkProjectFile -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return Get-Item $stagedFile; } $stagedFile = $InputObject | Edit-VSIXManifest -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return $InputObject; } $stagedFile = $InputObject | Edit-VSIXManifest -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return $InputObject; } $stagedFile = $InputObject | Edit-PackageJson -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return $InputObject; } $stagedFile = $InputObject | Edit-PowershellManifest -Manifest $Manifest | Add-GitFile -Commit:$Commit; if ($stagedFile) { $filesModified++; $cwd = Split-Path $stagedFile -Parent; return $InputObject; } } END { if ($Commit -and ($filesModified -gt 0) -and (Test-Git) -and $PSCmdlet.ShouldProcess($cwd, "git-commit")) { try { $currentVersion = ConvertTo-NcrementVersionNumber $Manifest | Select-Object -ExpandProperty Version; if ([string]::IsNullOrWhiteSpace(($CommitMessage))) { $CommitMessage = "Update the version-number to $currentVersion."; } Push-Location $cwd; &git commit -m $CommitMessage | Out-Null; Write-Verbose "Committed $filesModified file(s) to git repository."; } finally { Pop-Location; } } } } |