83 lines
2.2 KiB
PowerShell
83 lines
2.2 KiB
PowerShell
|
# This is meant to be used with build.ps1, and is not a standalone script.
|
||
|
|
||
|
function check-FileForChanges
|
||
|
{
|
||
|
param(
|
||
|
[Parameter(Mandatory=$true)]
|
||
|
[string]$path_file
|
||
|
)
|
||
|
|
||
|
if (-not (Test-Path $path_file -PathType Leaf)) {
|
||
|
Write-Error "The provided path is not a valid file: $path_file"
|
||
|
return $false
|
||
|
}
|
||
|
$file_name = Split-Path $path_file -Leaf
|
||
|
$path_csv = Join-Path $path_build ($file_name + "_file_hash.csv")
|
||
|
|
||
|
$csv_file_hash = $null
|
||
|
if (Test-Path $path_csv) {
|
||
|
$csv_file_hash = Import-Csv $path_csv | Select-Object -ExpandProperty value
|
||
|
}
|
||
|
|
||
|
$current_hash_info = Get-FileHash -Path $path_file -Algorithm MD5
|
||
|
$current_file_hash = $current_hash_info.Hash
|
||
|
|
||
|
# Save the current hash to the CSV
|
||
|
[PSCustomObject]@{
|
||
|
name = $path_file
|
||
|
value = $current_file_hash
|
||
|
} | Export-Csv $path_csv -NoTypeInformation
|
||
|
|
||
|
if ($csv_file_hash -and $csv_file_hash -eq $current_file_hash) {
|
||
|
return $false
|
||
|
} else {
|
||
|
return $true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Check to see if the module has changed files since the last build
|
||
|
function check-ModuleForChanges
|
||
|
{
|
||
|
param( [string]$path_module, [array]$excludes )
|
||
|
|
||
|
$module_name = split-path $path_module -leaf
|
||
|
$path_csv = Join-Path $path_build ("module_" + $module_name + "_hashes.csv")
|
||
|
|
||
|
$csv_file_hashes = $null
|
||
|
if ( test-path $path_csv ) {
|
||
|
$csv_file_hashes = @{}
|
||
|
import-csv $path_csv | foreach-object {
|
||
|
$csv_file_hashes[ $_.name ] = $_.value
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$file_hashes = @{}
|
||
|
get-childitem -path $path_module -file -Exclude $excludes -Recurse | foreach-object {
|
||
|
$id = $_.fullname
|
||
|
$hash_info = get-filehash -path $id -Algorithm MD5
|
||
|
$file_hashes[ $id ] = $hash_info.Hash
|
||
|
}
|
||
|
|
||
|
$file_hashes.GetEnumerator() | foreach-object { [PSCustomObject]$_ } |
|
||
|
export-csv $path_csv -NoTypeInformation
|
||
|
|
||
|
if ( -not $csv_file_hashes ) { return $true }
|
||
|
if ( $csv_file_hashes.Count -ne $file_hashes.Count ) { return $true }
|
||
|
|
||
|
foreach ( $key in $csv_file_hashes.Keys ) {
|
||
|
if ( $csv_file_hashes[ $key ] -ne $file_hashes[ $key ] ) {
|
||
|
return $true
|
||
|
}
|
||
|
}
|
||
|
return $false
|
||
|
}
|
||
|
|
||
|
function mark-ModuleDirty {
|
||
|
param( [string]$path_module )
|
||
|
|
||
|
$module_name = split-path $path_module -leaf
|
||
|
$path_csv = Join-Path $path_build ("module_" + $module_name + "_hashes.csv")
|
||
|
|
||
|
remove-item -Force -Path $path_csv
|
||
|
}
|