From a0847da78029f44ad5bc0f10f4c6891ab3859fda Mon Sep 17 00:00:00 2001
From: Antoine Cotten <hello@acotten.com>
Date: Wed, 8 Jan 2025 13:42:55 +0100
Subject: [PATCH] fix: sparse-checkout not disabled on subsequent checkout

If actions/checkout is invoked once with 'sparse-checkout' and cone mode
disabled, core.sparseCheckout remains enabled for all subsequent
invocations of actions/checkout.
---
 dist/index.js              | 2 ++
 src/git-command-manager.ts | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/dist/index.js b/dist/index.js
index b0db71380..975842bd9 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -588,6 +588,8 @@ class GitCommandManager {
     disableSparseCheckout() {
         return __awaiter(this, void 0, void 0, function* () {
             yield this.execGit(['sparse-checkout', 'disable']);
+            // Ensures that a previously enabled 'sparse-checkout' (e.g. via sparseCheckoutNonConeMode) is also disabled in the config.
+            yield this.execGit(['config', 'core.sparseCheckout', 'false']);
             // Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment).
             yield this.tryConfigUnset('extensions.worktreeConfig', false);
         });
diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts
index 8e42a387f..a4ed10503 100644
--- a/src/git-command-manager.ts
+++ b/src/git-command-manager.ts
@@ -178,6 +178,8 @@ class GitCommandManager {
 
   async disableSparseCheckout(): Promise<void> {
     await this.execGit(['sparse-checkout', 'disable'])
+    // Ensures that a previously enabled 'sparse-checkout' (e.g. via sparseCheckoutNonConeMode) is also disabled in the config.
+    yield this.execGit(['config', 'core.sparseCheckout', 'false']);
     // Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment).
     await this.tryConfigUnset('extensions.worktreeConfig', false)
   }