forked from cake-build/resources
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Parse and use cake.config (if it exists) for configuration
- Bash parsing cake.config for Tools path - Make use of https://github.com/lipkau/PsIni/blob/master/Functions/Get-IniContent.ps1 - Implements cake-build#15 for build.ps1
- Loading branch information
Showing
2 changed files
with
281 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -90,13 +90,171 @@ function GetProxyEnabledWebClient | |
return $wc | ||
} | ||
|
||
Function Get-IniContent { | ||
<# | ||
.Synopsis | ||
Gets the content of an INI file | ||
.Description | ||
Gets the content of an INI file and returns it as a hashtable | ||
.Notes | ||
Author : Oliver Lipkau <[email protected]> | ||
Source : https://github.com/lipkau/PsIni | ||
http://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8fb-ebd7a76e8d91 | ||
Version : 1.0.0 - 2010/03/12 - OL - Initial release | ||
1.0.1 - 2014/12/11 - OL - Typo (Thx SLDR) | ||
Typo (Thx Dave Stiff) | ||
1.0.2 - 2015/06/06 - OL - Improvment to switch (Thx Tallandtree) | ||
1.0.3 - 2015/06/18 - OL - Migrate to semantic versioning (GitHub issue#4) | ||
1.0.4 - 2015/06/18 - OL - Remove check for .ini extension (GitHub Issue#6) | ||
1.1.0 - 2015/07/14 - CB - Improve round-tripping and be a bit more liberal (GitHub Pull #7) | ||
OL - Small Improvments and cleanup | ||
1.1.1 - 2015/07/14 - CB - changed .outputs section to be OrderedDictionary | ||
1.1.2 - 2016/08/18 - SS - Add some more verbose outputs as the ini is parsed, | ||
allow non-existent paths for new ini handling, | ||
test for variable existence using local scope, | ||
added additional debug output. | ||
#Requires -Version 2.0 | ||
.Inputs | ||
System.String | ||
.Outputs | ||
System.Collections.Specialized.OrderedDictionary | ||
.Parameter FilePath | ||
Specifies the path to the input file. | ||
.Parameter CommentChar | ||
Specify what characters should be describe a comment. | ||
Lines starting with the characters provided will be rendered as comments. | ||
Default: ";" | ||
.Parameter IgnoreComments | ||
Remove lines determined to be comments from the resulting dictionary. | ||
.Example | ||
$FileContent = Get-IniContent "C:\myinifile.ini" | ||
----------- | ||
Description | ||
Saves the content of the c:\myinifile.ini in a hashtable called $FileContent | ||
.Example | ||
$inifilepath | $FileContent = Get-IniContent | ||
----------- | ||
Description | ||
Gets the content of the ini file passed through the pipe into a hashtable called $FileContent | ||
.Example | ||
C:\PS>$FileContent = Get-IniContent "c:\settings.ini" | ||
C:\PS>$FileContent["Section"]["Key"] | ||
----------- | ||
Description | ||
Returns the key "Key" of the section "Section" from the C:\settings.ini file | ||
.Link | ||
Out-IniFile | ||
#> | ||
|
||
[CmdletBinding()] | ||
Param( | ||
[ValidateNotNullOrEmpty()] | ||
[Parameter(ValueFromPipeline=$True,Mandatory=$True)] | ||
[string]$FilePath, | ||
[char[]]$CommentChar = @(";"), | ||
[switch]$IgnoreComments | ||
) | ||
|
||
Begin | ||
{ | ||
Write-Debug "PsBoundParameters:" | ||
$PSBoundParameters.GetEnumerator() | ForEach-Object { Write-Debug $_ } | ||
if ($PSBoundParameters['Debug']) { $DebugPreference = 'Continue' } | ||
Write-Debug "DebugPreference: $DebugPreference" | ||
|
||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started" | ||
|
||
$commentRegex = "^([$($CommentChar -join '')].*)$" | ||
Write-Debug ("commentRegex is {0}." -f $commentRegex) | ||
} | ||
|
||
Process | ||
{ | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath" | ||
|
||
$ini = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
|
||
if (!(Test-Path $Filepath)) | ||
{ | ||
Write-Verbose ("Warning: `"{0}`" was not found." -f $Filepath) | ||
return $ini | ||
} | ||
|
||
$commentCount = 0 | ||
switch -regex -file $FilePath | ||
{ | ||
"^\s*\[(.+)\]\s*$" # Section | ||
{ | ||
$section = $matches[1] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding section : $section" | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
$CommentCount = 0 | ||
continue | ||
} | ||
$commentRegex # Comment | ||
{ | ||
if (!$IgnoreComments) | ||
{ | ||
if (!(test-path "variable:local:section")) | ||
{ | ||
$section = "_" | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$value = $matches[1] | ||
$CommentCount++ | ||
Write-Debug ("Incremented CommentCount is now {0}." -f $CommentCount) | ||
$name = "Comment" + $CommentCount | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding $name with value: $value" | ||
$ini[$section][$name] = $value | ||
} | ||
else { Write-Debug ("Ignoring comment {0}." -f $matches[1]) } | ||
|
||
continue | ||
} | ||
"(.+?)\s*=\s*(.*)" # Key | ||
{ | ||
if (!(test-path "variable:local:section")) | ||
{ | ||
$section = "_" | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$name,$value = $matches[1..2] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding key $name with value: $value" | ||
$ini[$section][$name] = $value | ||
continue | ||
} | ||
} | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath" | ||
Return $ini | ||
} | ||
|
||
End | ||
{Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended"} | ||
} | ||
|
||
Write-Host "Preparing to run build script..." | ||
|
||
if(!$PSScriptRoot){ | ||
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent | ||
} | ||
|
||
$CAKE_CONFIG = Join-Path $PSScriptRoot "cake.config" | ||
|
||
$TOOLS_DIR = Join-Path $PSScriptRoot "tools" | ||
|
||
if (Test-Path $CAKE_CONFIG) { | ||
$ini = Get-IniContent $CAKE_CONFIG | ||
|
||
if ($ini["Paths"] -and $ini["Paths"]["Tools"]) { | ||
$TOOLS_DIR = $ini["Paths"]["Tools"] | ||
|
||
# Ensure absolute path | ||
if (-not [IO.Path]::IsPathRooted($TOOLS_DIR)) { | ||
$TOOLS_DIR = Join-Path $PSScriptRoot $TOOLS_DIR | ||
} | ||
} | ||
} | ||
|
||
$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins" | ||
$MODULES_DIR = Join-Path $TOOLS_DIR "Modules" | ||
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters