Public/Update-ProjectFile.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
function Update-ProjectFile
{
    [CmdletBinding(ConfirmImpact = "Medium", SupportsShouldProcess)]
    Param(
        [Parameter(Mandatory)]
        $Manifest,

        [Parameter(Mandatory, ValueFromPipeline)]
        $InputObject,

        [Alias('m', "Message")]
        [string]$CommitMessage,

        [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;
                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; }
        }
    }
}