143 lines
3.5 KiB
PowerShell
143 lines
3.5 KiB
PowerShell
function clone-gitrepo { param( [string] $path, [string] $url )
|
|
if (test-path $path) {
|
|
# git -C $path pull
|
|
}
|
|
else {
|
|
Write-Host "Cloning $url ..."
|
|
git clone $url $path
|
|
}
|
|
}
|
|
function Get-IniContent { param( [string] $path_file )
|
|
$ini = @{}
|
|
$currentSection = $null
|
|
switch -regex -file $path_file
|
|
{
|
|
"^\[(.+)\]$" {
|
|
$currentSection = $matches[1].Trim()
|
|
$ini[ $currentSection ] = @{}
|
|
}
|
|
"^(.+?)\s*=\s*(.*)" {
|
|
$key, $value = $matches[1].Trim(), $matches[2].Trim()
|
|
if ($null -ne $currentSection) {
|
|
$ini[ $currentSection ][ $key ] = $value
|
|
}
|
|
}
|
|
}
|
|
return $ini
|
|
}
|
|
|
|
function Invoke-WithColorCodedOutput { param( [scriptblock] $command )
|
|
& $command 2>&1 | ForEach-Object {
|
|
# Write-Host "Type: $($_.GetType().FullName)" # Add this line for debugging
|
|
$color = 'White' # Default text color
|
|
switch ($_) {
|
|
{ $_ -imatch "error" } { $color = 'Red'; break }
|
|
{ $_ -imatch "warning" } { $color = 'Yellow'; break }
|
|
}
|
|
Write-Host "`t$_" -ForegroundColor $color
|
|
}
|
|
}
|
|
|
|
function New-GodotProjectShortcut {
|
|
param (
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$shortcut_name,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$godot_path,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$project_path,
|
|
|
|
[Parameter(Mandatory=$false)]
|
|
[string]$shortcut_folder = [Environment]::GetFolderPath("Desktop"),
|
|
|
|
[Parameter(Mandatory=$false)]
|
|
[string]$icon_path
|
|
)
|
|
|
|
$WshShell = New-Object -ComObject WScript.Shell
|
|
|
|
# Construct the full path for the shortcut
|
|
$path_shortcut = Join-Path $shortcut_folder "$shortcut_name.lnk"
|
|
|
|
# Create the shortcut
|
|
$Shortcut = $WshShell.CreateShortcut($path_shortcut)
|
|
$Shortcut.TargetPath = $godot_path
|
|
$Shortcut.Arguments = "-e `"$ProjectPath`""
|
|
$Shortcut.WorkingDirectory = Split-Path -Parent $project_path
|
|
$Shortcut.Description = "Open Godot project: $shortcut_name"
|
|
|
|
# Set custom icon if provided, otherwise use the Godot executable's icon
|
|
if ($icon_path) {
|
|
$Shortcut.IconLocation = $icon_path
|
|
}
|
|
else {
|
|
$Shortcut.IconLocation = "$godot_path,0"
|
|
}
|
|
|
|
$Shortcut.Save()
|
|
|
|
Write-Host "Shortcut created successfully at $path_shortcut"
|
|
}
|
|
|
|
function Update-GitRepo
|
|
{
|
|
param( [string] $path, [string] $url, [string] $build_command )
|
|
|
|
if ( $build_command -eq $null ) {
|
|
write-host "Attempted to call Update-GitRepo without build_command specified"
|
|
return
|
|
}
|
|
|
|
$repo_name = $url.Split('/')[-1].Replace('.git', '')
|
|
|
|
$last_built_commit = join-path $path_build "last_built_commit_$repo_name.txt"
|
|
if ( -not(test-path -Path $path))
|
|
{
|
|
write-host "Cloining repo from $url to $path"
|
|
git clone $url $path
|
|
|
|
write-host "Building $url"
|
|
push-location $path
|
|
& "$build_command"
|
|
pop-location
|
|
|
|
git -C $path rev-parse HEAD | out-file $last_built_commit
|
|
$script:binaries_dirty = $true
|
|
write-host
|
|
return
|
|
}
|
|
|
|
git -C $path fetch
|
|
$latest_commit_hash = git -C $path rev-parse '@{u}'
|
|
$last_built_hash = if (Test-Path $last_built_commit) { Get-Content $last_built_commit } else { "" }
|
|
|
|
if ( $latest_commit_hash -eq $last_built_hash ) {
|
|
write-host
|
|
return
|
|
}
|
|
|
|
write-host "Build out of date for: $path, updating"
|
|
write-host 'Pulling...'
|
|
git -C $path pull
|
|
|
|
write-host "Building $url"
|
|
push-location $path
|
|
& $build_command
|
|
pop-location
|
|
|
|
$latest_commit_hash | out-file $last_built_commit
|
|
$script:binaries_dirty = $true
|
|
write-host
|
|
}
|
|
|
|
function verify-path { param( $path )
|
|
if (test-path $path) {return $true}
|
|
|
|
new-item -ItemType Directory -Path $path
|
|
return $false
|
|
}
|
|
|
|
|