diff --git a/src/services/checkpoints/CheckpointService.ts b/src/services/checkpoints/CheckpointService.ts index 56cdd10fb2..23c519aec5 100644 --- a/src/services/checkpoints/CheckpointService.ts +++ b/src/services/checkpoints/CheckpointService.ts @@ -284,8 +284,17 @@ export class CheckpointService { log(`[initRepo] Initialized new Git repository at ${baseDir}`) } - await git.addConfig("user.name", "Roo Code") - await git.addConfig("user.email", "support@roocode.com") + // Only set user config if not already configured + const userName = await git.getConfig("user.name") + const userEmail = await git.getConfig("user.email") + + if (!userName.value) { + await git.addConfig("user.name", "Roo Code") + } + + if (!userEmail.value) { + await git.addConfig("user.email", "support@roocode.com") + } if (!isExistingRepo) { // We need at least one file to commit, otherwise the initial diff --git a/src/services/checkpoints/__tests__/CheckpointService.test.ts b/src/services/checkpoints/__tests__/CheckpointService.test.ts index d3c63cec91..4f5d5df6c1 100644 --- a/src/services/checkpoints/__tests__/CheckpointService.test.ts +++ b/src/services/checkpoints/__tests__/CheckpointService.test.ts @@ -10,32 +10,51 @@ import { CheckpointService } from "../CheckpointService" describe("CheckpointService", () => { const taskId = "test-task" + let git: SimpleGit let testFile: string let service: CheckpointService - beforeEach(async () => { + const initRepo = async ({ + baseDir, + userName = "Roo Code", + userEmail = "support@roocode.com", + testFileName = "test.txt", + textFileContent = "Hello, world!", + }: { + baseDir: string + userName?: string + userEmail?: string + testFileName?: string + textFileContent?: string + }) => { // Create a temporary directory for testing. - const baseDir = path.join(os.tmpdir(), `checkpoint-service-test-${Date.now()}`) await fs.mkdir(baseDir) // Initialize git repo. - git = simpleGit(baseDir) + const git = simpleGit(baseDir) await git.init() - await git.addConfig("user.name", "Roo Code") - await git.addConfig("user.email", "support@roocode.com") + await git.addConfig("user.name", userName) + await git.addConfig("user.email", userEmail) // Create test file. - testFile = path.join(baseDir, "test.txt") - await fs.writeFile(testFile, "Hello, world!") + const testFile = path.join(baseDir, testFileName) + await fs.writeFile(testFile, textFileContent) // Create initial commit. await git.add(".") await git.commit("Initial commit")! - // Create service instance. - const log = () => {} - service = await CheckpointService.create({ taskId, git, baseDir, log }) + return { git, testFile } + } + + beforeEach(async () => { + const baseDir = path.join(os.tmpdir(), `checkpoint-service-test-${Date.now()}`) + const repo = await initRepo({ baseDir }) + + git = repo.git + testFile = repo.testFile + service = await CheckpointService.create({ taskId, git, baseDir, log: () => {} }) }) afterEach(async () => { @@ -333,5 +352,20 @@ describe("CheckpointService", () => { await fs.rm(newService.baseDir, { recursive: true, force: true }) }) + + it("respects existing git user configuration", async () => { + const baseDir = path.join(os.tmpdir(), `checkpoint-service-test-config2-${Date.now()}`) + const userName = "Custom User" + const userEmail = "custom@example.com" + const repo = await initRepo({ baseDir, userName, userEmail }) + const newGit = repo.git + + await CheckpointService.create({ taskId, git: newGit, baseDir, log: () => {} }) + + expect((await newGit.getConfig("user.name")).value).toBe(userName) + expect((await newGit.getConfig("user.email")).value).toBe(userEmail) + + await fs.rm(baseDir, { recursive: true, force: true }) + }) }) })