fix(gitstore): adjust garbage collection to run after push operation

- Updated `maybeRunGC` to accept `repoDir` instead of `repo`.
- Moved garbage collection trigger to occur after the push step for improved reliability.
- Added a test to validate the sequence of push and GC operations.

Closes: #3373
This commit is contained in:
Luis Pater
2026-05-16 04:55:44 +08:00
parent 9d01c80d33
commit 30a8824b64
2 changed files with 41 additions and 2 deletions
+34
View File
@@ -239,6 +239,40 @@ func TestEnsureRepositoryResetsToRemoteDefaultWhenBranchUnset(t *testing.T) {
assertRemoteBranchContents(t, remoteDir, "master", "local master update\n")
}
func TestCommitAndPushLockedPushesBeforeRunningGC(t *testing.T) {
root := t.TempDir()
remoteDir := setupGitRemoteRepository(t, root, "master",
testBranchSpec{name: "master", contents: "remote master branch\n"},
)
store := NewGitTokenStore(remoteDir, "", "", "")
store.SetBaseDir(filepath.Join(root, "workspace", "auths"))
if err := store.EnsureRepository(); err != nil {
t.Fatalf("EnsureRepository: %v", err)
}
workspaceDir := filepath.Join(root, "workspace")
updates := []string{
"local master update one\n",
"local master update two\n",
}
for _, contents := range updates {
if err := os.WriteFile(filepath.Join(workspaceDir, "branch.txt"), []byte(contents), 0o600); err != nil {
t.Fatalf("write local master marker: %v", err)
}
store.lastGC = time.Now().Add(-gcInterval)
store.mu.Lock()
err := store.commitAndPushLocked("Update master marker", "branch.txt")
store.mu.Unlock()
if err != nil {
t.Fatalf("commitAndPushLocked with forced GC: %v", err)
}
assertRemoteBranchContents(t, remoteDir, "master", contents)
}
}
func TestEnsureRepositoryFollowsRenamedRemoteDefaultBranchWhenAvailable(t *testing.T) {
root := t.TempDir()
remoteDir := setupGitRemoteRepository(t, root, "master",