From f3422e21d1b1636a0909c0a79a749a2ad3035df6 Mon Sep 17 00:00:00 2001 From: nrslib <38722970+nrslib@users.noreply.github.com> Date: Mon, 26 Jan 2026 11:47:45 +0900 Subject: [PATCH] =?UTF-8?q?.gitignore=E3=81=8C=E7=84=A1=E8=A6=96=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/__tests__/config.test.ts | 50 ++++++++++++++++++++++++++++++++++++ src/config/projectConfig.ts | 6 +++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/__tests__/config.test.ts b/src/__tests__/config.test.ts index d2ccad7..2189772 100644 --- a/src/__tests__/config.test.ts +++ b/src/__tests__/config.test.ts @@ -367,3 +367,53 @@ describe('loadInputHistory - edge cases', () => { expect(history).toEqual([]); }); }); + +describe('saveProjectConfig - gitignore copy', () => { + let testDir: string; + + beforeEach(() => { + testDir = join(tmpdir(), `takt-test-${randomUUID()}`); + mkdirSync(testDir, { recursive: true }); + }); + + afterEach(() => { + if (existsSync(testDir)) { + rmSync(testDir, { recursive: true, force: true }); + } + }); + + it('should copy .gitignore when creating new config', () => { + setCurrentWorkflow(testDir, 'test'); + + const configDir = getProjectConfigDir(testDir); + const gitignorePath = join(configDir, '.gitignore'); + + expect(existsSync(gitignorePath)).toBe(true); + }); + + it('should copy .gitignore to existing config directory without one', () => { + // Create config directory without .gitignore + const configDir = getProjectConfigDir(testDir); + mkdirSync(configDir, { recursive: true }); + writeFileSync(join(configDir, 'config.yaml'), 'workflow: existing\n'); + + // Save config should still copy .gitignore + setCurrentWorkflow(testDir, 'updated'); + + const gitignorePath = join(configDir, '.gitignore'); + expect(existsSync(gitignorePath)).toBe(true); + }); + + it('should not overwrite existing .gitignore', () => { + const configDir = getProjectConfigDir(testDir); + mkdirSync(configDir, { recursive: true }); + const customContent = '# Custom gitignore\nmy-custom-file'; + writeFileSync(join(configDir, '.gitignore'), customContent); + + setCurrentWorkflow(testDir, 'test'); + + const gitignorePath = join(configDir, '.gitignore'); + const content = readFileSync(gitignorePath, 'utf-8'); + expect(content).toBe(customContent); + }); +}); diff --git a/src/config/projectConfig.ts b/src/config/projectConfig.ts index 9dab002..6b55a5d 100644 --- a/src/config/projectConfig.ts +++ b/src/config/projectConfig.ts @@ -82,12 +82,14 @@ export function saveProjectConfig(projectDir: string, config: ProjectLocalConfig const configDir = getConfigDir(projectDir); const configPath = getConfigPath(projectDir); - // Ensure directory exists and copy project resources on first creation + // Ensure directory exists if (!existsSync(configDir)) { mkdirSync(configDir, { recursive: true }); - copyProjectResourcesToDir(configDir); } + // Copy project resources (only copies files that don't exist) + copyProjectResourcesToDir(configDir); + const content = stringify(config, { indent: 2 }); writeFileSync(configPath, content, 'utf-8'); }