Disable `extensions.worktreeConfig` when disabling `sparse-checkout` (#1692)

This commit is contained in:
John Wesley Walker III 2024-04-23 22:07:43 +02:00 committed by GitHub
parent 37b082107b
commit 43045ae669
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 21 additions and 3 deletions

View File

@ -8,7 +8,7 @@ on:
- releases/* - releases/*
# Note that when you see patterns like "ref: test-data/v2/basic" within this workflow, # Note that when you see patterns like "ref: test-data/v2/basic" within this workflow,
# these refer to "test-data" branches on this actions/checkout repo. # these refer to "test-data" branches on this actions/checkout repo.
# (For example, test-data/v2/basic -> https://github.com/actions/checkout/tree/test-data/v2/basic) # (For example, test-data/v2/basic -> https://github.com/actions/checkout/tree/test-data/v2/basic)
@ -37,7 +37,7 @@ jobs:
steps: steps:
# Clone this repo # Clone this repo
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4.1.1
# Basic checkout # Basic checkout
- name: Checkout basic - name: Checkout basic
@ -257,7 +257,7 @@ jobs:
path: basic path: basic
- name: Verify basic - name: Verify basic
run: __test__/verify-basic.sh --archive run: __test__/verify-basic.sh --archive
test-git-container: test-git-container:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: bitnami/git:latest container: bitnami/git:latest

View File

@ -18,6 +18,20 @@ else
exit 1 exit 1
fi fi
# Verify that sparse-checkout is disabled.
SPARSE_CHECKOUT_ENABLED=$(git -C ./basic config --local --get-all core.sparseCheckout)
if [ "$SPARSE_CHECKOUT_ENABLED" != "" ]; then
echo "Expected sparse-checkout to be disabled (discovered: $SPARSE_CHECKOUT_ENABLED)"
exit 1
fi
# Verify git configuration shows worktreeConfig is effectively disabled
WORKTREE_CONFIG_ENABLED=$(git -C ./basic config --local --get-all extensions.worktreeConfig)
if [[ "$WORKTREE_CONFIG_ENABLED" != "" ]]; then
echo "Expected extensions.worktreeConfig (boolean) to be disabled in git config. This could be an artifact of sparse checkout functionality."
exit 1
fi
# Verify auth token # Verify auth token
cd basic cd basic
git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main

2
dist/index.js vendored
View File

@ -582,6 +582,8 @@ class GitCommandManager {
disableSparseCheckout() { disableSparseCheckout() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
yield this.execGit(['sparse-checkout', 'disable']); yield this.execGit(['sparse-checkout', 'disable']);
// Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment).
yield this.tryConfigUnset('extensions.worktreeConfig', false);
}); });
} }
sparseCheckout(sparseCheckout) { sparseCheckout(sparseCheckout) {

View File

@ -178,6 +178,8 @@ class GitCommandManager {
async disableSparseCheckout(): Promise<void> { async disableSparseCheckout(): Promise<void> {
await this.execGit(['sparse-checkout', 'disable']) await this.execGit(['sparse-checkout', 'disable'])
// Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment).
await this.tryConfigUnset('extensions.worktreeConfig', false)
} }
async sparseCheckout(sparseCheckout: string[]): Promise<void> { async sparseCheckout(sparseCheckout: string[]): Promise<void> {