PortValhalla/scripts/Common/Software/git/Manage.ps1

114 lines
3 KiB
PowerShell
Raw Normal View History

2024-08-10 13:28:10 +00:00
param (
$Action,
[hashtable] $Arguments
)
. "$PSScriptRoot/../../Scripts/Software.ps1";
2024-08-22 23:43:26 +00:00
. "$PSScriptRoot/../../Scripts/System.ps1";
2024-08-10 13:28:10 +00:00
. "$PSScriptRoot/../../Types/InstallerAction.ps1";
& {
2024-08-22 23:43:26 +00:00
param(
[hashtable] $Parameters
)
$configure = {
param(
[string] $User
)
$root = "valhalla";
if ($User) {
$root = "$root$($IsWindows ? ".windows" : '').users.$User";
$sudoArgs = @("-u", $User);
$configArgs = @("--global");
} else {
$sudoArgs = @();
$configArgs = @("--system");
}
2024-09-08 15:41:30 +00:00
$config = Get-Config "$root.git";
2024-08-22 23:43:26 +00:00
<#
.SYNOPSIS
Sets a configuration option in git.
#>
function Set-GitConfig {
sudo @sudoArgs git config @configArgs $args;
}
if ((-not $IsWindows) -or $User) {
2024-09-08 15:41:30 +00:00
$branch = $config.defaultBranch;
2024-08-22 23:43:26 +00:00
if ($branch) {
Set-GitConfig "init.defaultBranch" $branch;
}
}
2024-08-23 00:01:16 +00:00
if ($User) {
$displayName = Get-UserConfig "displayName";
$mailAddress = Get-UserConfig "mailAddress";
if ($displayName) {
Set-GitConfig "user.name" $displayName;
}
if ($mailAddress) {
Set-GitConfig "user.email" $mailAddress;
}
}
2024-08-22 23:43:26 +00:00
# Git Flow
. {
$dir = New-TemporaryDirectory;
$key = "flow";
2024-09-08 15:41:30 +00:00
$mainBranch = $config."$key".mainBranch;
$devBranch = $config."$key".devBranch;
2024-08-22 23:43:26 +00:00
& {
git -C "$dir" init;
git -C "$dir" config user.name "PortValhalla";
git -C "$dir" config user.email "no-reply@valhal.la";
git -C "$dir" commit --allow-empty -m "Initial commit";
git -C "$dir" branch master;
git -C "$dir" branch dev;
git -C "$dir" flow init --defaults;
} | Out-Null;
if ($mainBranch) {
git -C "$dir" branch $mainBranch | Out-Null;;
sudo @sudoArgs git -C "$dir" flow config set @configArgs master $mainBranch;
}
if ($devBranch) {
git -C "$dir" branch $devBranch | Out-Null;
sudo @sudoArgs git -C "$dir" flow config set @configArgs develop $devBranch;
}
Remove-Item -Recurse -Force $dir;
};
# Aliases
2024-09-08 15:41:30 +00:00
[PSCustomObject] $aliases = $config.aliases;
2024-08-22 23:43:26 +00:00
2024-08-22 23:52:25 +00:00
if ($aliases) {
foreach ($alias in ($aliases | Get-Member -MemberType Properties)) {
Set-GitConfig "alias.$($alias.Name)" $aliases.$($alias.Name);
}
2024-08-22 23:43:26 +00:00
}
2024-08-10 13:28:10 +00:00
};
2024-08-22 23:43:26 +00:00
Start-SoftwareInstaller @Parameters `
-Configurator {
& $configure @PSBoundParameters;
} `
-UserConfigurator {
param(
[hashtable] $Arguments
)
& $configure -User $Arguments.Name;
};
} $PSBoundParameters;