Add scripts for configuring git

This commit is contained in:
Manuel Thalmann 2024-08-23 01:43:26 +02:00
parent 1f20af3bc5
commit 6b1aee97a6
3 changed files with 120 additions and 39 deletions

View file

@ -4,8 +4,108 @@ param (
) )
. "$PSScriptRoot/../../Scripts/Software.ps1"; . "$PSScriptRoot/../../Scripts/Software.ps1";
. "$PSScriptRoot/../../Scripts/System.ps1";
. "$PSScriptRoot/../../Types/InstallerAction.ps1"; . "$PSScriptRoot/../../Types/InstallerAction.ps1";
Start-SoftwareInstaller @PSBoundParameters ` $null = New-Module {
-Configurator { 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");
}
<#
.SYNOPSIS
Gets the specified git configuration.
.PARAMETER Name
THe name of the configuration to get.
#>
function Get-GitConfig {
param(
[string] $Name
)
Get-Config "$root.git.$Name";
}
<#
.SYNOPSIS
Sets a configuration option in git.
#>
function Set-GitConfig {
sudo @sudoArgs git config @configArgs @args;
}
if ((-not $IsWindows) -or $User) {
$branch = Get-GitConfig "defaultBranch";
if ($branch) {
Set-GitConfig "init.defaultBranch" $branch;
}
}
# Git Flow
. {
$dir = New-TemporaryDirectory;
$key = "flow";
$mainBranch = Get-GitConfig "$key.mainBranch";
$devBranch = Get-GitConfig "$key.devBranch";
& {
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
[PSCustomObject] $aliases = Get-GitConfig "aliases";
foreach ($alias in ($aliases | Get-Member -MemberType Properties)) {
Set-GitConfig "alias.$($alias.Name)" $aliases.$($alias.Name);
}
};
Start-SoftwareInstaller @Parameters `
-Configurator {
& $configure;
} `
-UserConfigurator {
param(
[hashtable] $Arguments
)
& $configure -User $Arguments.Name;
};
} $PSBoundParameters;

View file

@ -137,14 +137,14 @@ $null = New-Module {
}; };
} }
if (-not (Test-Command "git")) { if (-not (Test-Winget)) {
Install-ChocoPackage git; . "$PSScriptRoot/../Software/winget/Manage.ps1";
refreshenv;
continue; continue;
} }
if (-not (Test-Winget)) { if (-not (Test-Command "git")) {
. "$PSScriptRoot/../Software/winget/Manage.ps1"; Install-WingetPackage Git.Git;
refreshenv;
continue; continue;
} }
@ -320,6 +320,7 @@ $null = New-Module {
if (Test-Collection "essential") { if (Test-Collection "essential") {
# Essentials # Essentials
& "$softwarePath/git/Manage.ps1" @arguments;
& "$softwarePath/OpenSSH/Manage.ps1" @arguments; & "$softwarePath/OpenSSH/Manage.ps1" @arguments;
& "$softwarePath/PowerShell/Manage.ps1" @arguments; & "$softwarePath/PowerShell/Manage.ps1" @arguments;
& "$softwarePath/chocolatey/Manage.ps1" @arguments; & "$softwarePath/chocolatey/Manage.ps1" @arguments;

View file

@ -7,43 +7,18 @@ param (
. "$PSScriptRoot/../../../Common/Scripts/Software.ps1"; . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
. "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1"; . "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1";
$null = New-Module { & {
param( param(
[hashtable] $Parameters [hashtable] $Parameters
) )
. "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1"; . "$PSScriptRoot/../../../Common/Types/InstallerAction.ps1";
$base = "$PSScriptRoot/../../../Common/Software/git/Manage.ps1";
<#
.SYNOPSIS
Gets a configuration value related to git.
.PARAMETER Name
The name of the configuration to get.
.PARAMETER User
The name of the user to get the configuration for.
#>
function Get-GitOption {
param(
[Parameter(Mandatory)]
[string] $Name,
[string] $User
)
$config = "git.$Name";
if ($User) {
Get-UserConfig -UserName $User -Name $config;
} else {
Get-Config $config;
}
}
Start-SoftwareInstaller @Parameters ` Start-SoftwareInstaller @Parameters `
-Installer { -Installer {
$params = "/WindowsTerminalProfile"; $params = "/WindowsTerminalProfile";
$defaultBranch = Get-GitOption "defaultBranch"; $defaultBranch = Get-Config "valhalla.git.defaultBranch";
if ($defaultBranch) { if ($defaultBranch) {
$params += " /DefaultBranchName:`"$defaultBranch`""; $params += " /DefaultBranchName:`"$defaultBranch`"";
@ -52,8 +27,13 @@ $null = New-Module {
Install-ChocoPackage git -ArgumentList "--params",$params; Install-ChocoPackage git -ArgumentList "--params",$params;
} ` } `
-Configurator { -Configurator {
& "$PSScriptRoot/../../../Common/Software/git/Manage.ps1" @Parameters; & $base ([InstallerAction]::Configure);
}; } `
-UserConfigurator {
param(
$Arguments
)
Export-ModuleMember -Function @(); & $base ([InstallerAction]::ConfigureUser) @PSBoundParameterrs;
} -ArgumentList $PSBoundParameters };
} $PSBoundParameters;