Add new GitConfig resource#288
Open
Gijsreyn wants to merge 5 commits into
Open
Conversation
This comment has been minimized.
This comment has been minimized.
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new general-purpose GitDsc/GitConfig DSC resource that can manage any git config key/value pair at the global, system, local, worktree, or unscoped (none) level, alongside helper functions, a sample configuration, Pester tests, and spell-check entries. Existing GitConfigUserName/GitConfigUserEmail resources are preserved for backward compatibility.
Changes:
- New
GitConfigDSC class withGet/Test/Set/Exportimplementations plus newInvoke-GitWorkingDirectoryandGet-GitConfigArgumentshelpers. - Module manifest registers
GitConfig(replacing a staleGitConfigFileentry) and fixes aLicenseURIspacing issue. - Adds a
SetGitConfigUserEmail.v3.wingetsample, an extensive Pester suite for the new resource, andlongpaths/filemodeto the spell-check allowlist.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| resources/GitDsc/GitDsc.psm1 | Implements the new GitConfig resource and shared git-config helper functions. |
| resources/GitDsc/GitDsc.psd1 | Exports GitConfig instead of the (nonexistent) GitConfigFile and fixes manifest formatting. |
| samples/DscResources/GitDsc/SetGitConfigUserEmail.v3.winget | New dscv3 sample demonstrating GitConfig setting user.email globally. |
| tests/GitDsc/GitDsc.tests.ps1 | Adds Pester coverage for GitConfig across global/local scopes, export, and validation. |
| .github/actions/spelling/expect/generic_terms.txt | Allows longpaths and filemode in spell check. |
Comments suppressed due to low confidence (2)
resources/GitDsc/GitDsc.psm1:740
Invoke-GitWorkingDirectorypermanently changes the caller's working directory viaSet-Locationwithout ever restoring it. BecauseSet()callsTest()(which callsGet()), and bothGet()andSet()invokeInvoke-GitWorkingDirectory, a singleInvoke-DscResourcecall for alocal/worktreescope can leave the PowerShell session's current directory inside the user's project directory, affecting subsequent DSC resources and any caller code. Prefer usinggit -C $ProjectDirectory ...(i.e. pass-Cin the argument list returned byGet-GitConfigArguments) so no global state is mutated, or wrap the directory change inPush-Location/Pop-Locationwith atry/finally.
function Invoke-GitWorkingDirectory {
param (
[Parameter(Mandatory)]
[ConfigLocation] $ConfigLocation,
[Parameter()]
[string] $ProjectDirectory
)
if ($ConfigLocation -eq [ConfigLocation]::local -or $ConfigLocation -eq [ConfigLocation]::worktree) {
if ([string]::IsNullOrEmpty($ProjectDirectory)) {
throw 'ProjectDirectory must be specified for local and worktree configurations.'
}
if (-not (Test-Path -Path $ProjectDirectory)) {
throw "ProjectDirectory '$ProjectDirectory' does not exist."
}
Set-Location -Path $ProjectDirectory
}
}
resources/GitDsc/GitDsc.psm1:567
- In
Set(), the check that throws whenValueis empty whileExistis$trueruns afterInvoke-GitWorkingDirectoryhas already changed the working directory. That means an invalid call still has the side effect ofSet-Location-ing intoProjectDirectory. Move theValuevalidation above theInvoke-GitWorkingDirectorycall so misconfigured input is rejected before any state is mutated.
Invoke-GitWorkingDirectory -ConfigLocation $this.ConfigLocation -ProjectDirectory $this.ProjectDirectory
if ($this.Exist) {
if ([string]::IsNullOrEmpty($this.Value)) {
throw 'Value must be specified when Exist is true.'
}
$gitArgs = Get-GitConfigArguments -ConfigLocation $this.ConfigLocation -Tail @($this.Name, $this.Value)
} else {
$gitArgs = Get-GitConfigArguments -ConfigLocation $this.ConfigLocation -Tail @('--unset', $this.Name)
}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This comment has been minimized.
This comment has been minimized.
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📖 Description
This pull request adds a new generic
GitDsc/GitConfigDSC resource that can manage any git config key-value pair (global,system,local,worktree). It supersedes the other resources, but they are kept for backward compatibility.Sample configuration:
SetGitConfigUserEmail.v3.winget. This setsuser.emailto a GitHub noreply address globally.🔗 References
Resolves #244
🔍 Validation
Need pipeline validation. Local tests passed.
✅ Checklist
📋 Issue Type
Microsoft Reviewers: Open in CodeFlow