From e4456b11bc3ae46e120d244fc32c1807a8a58a57 Mon Sep 17 00:00:00 2001 From: Joe Danziger Date: Tue, 24 Jun 2025 00:42:23 -0400 Subject: [PATCH] fix: .gitignore missing trailing newline during project initialization (#855) --- .changeset/major-dogs-admire.md | 5 +++++ src/utils/manage-gitignore.js | 4 ++-- tests/unit/manage-gitignore.test.js | 9 ++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 .changeset/major-dogs-admire.md diff --git a/.changeset/major-dogs-admire.md b/.changeset/major-dogs-admire.md new file mode 100644 index 00000000..f4cc8461 --- /dev/null +++ b/.changeset/major-dogs-admire.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Fix .gitignore missing trailing newline during project initialization diff --git a/src/utils/manage-gitignore.js b/src/utils/manage-gitignore.js index 25748bae..1f7db7ab 100644 --- a/src/utils/manage-gitignore.js +++ b/src/utils/manage-gitignore.js @@ -170,7 +170,7 @@ function validateInputs(targetPath, content, storeTasksInGit) { */ function createNewGitignoreFile(targetPath, templateLines, log) { try { - fs.writeFileSync(targetPath, templateLines.join('\n')); + fs.writeFileSync(targetPath, templateLines.join('\n') + '\n'); if (typeof log === 'function') { log('success', `Created ${targetPath} with full template`); } @@ -223,7 +223,7 @@ function mergeWithExistingFile( finalLines.push(...buildTaskFilesSection(storeTasksInGit)); // Write result - fs.writeFileSync(targetPath, finalLines.join('\n')); + fs.writeFileSync(targetPath, finalLines.join('\n') + '\n'); if (typeof log === 'function') { const hasNewContent = diff --git a/tests/unit/manage-gitignore.test.js b/tests/unit/manage-gitignore.test.js index e92274be..61526915 100644 --- a/tests/unit/manage-gitignore.test.js +++ b/tests/unit/manage-gitignore.test.js @@ -179,7 +179,8 @@ logs # Task files # tasks.json -# tasks/ ` +# tasks/ +` ); expect(mockLog).toHaveBeenCalledWith( 'success', @@ -200,7 +201,8 @@ logs # Task files tasks.json -tasks/ ` +tasks/ +` ); expect(mockLog).toHaveBeenCalledWith( 'success', @@ -432,7 +434,8 @@ tasks/ `; const writtenContent = writeFileSyncSpy.mock.calls[0][1]; expect(writtenContent).toBe(`# Task files # tasks.json -# tasks/ `); +# tasks/ +`); }); }); });