Skip to content

Commit 6fa4374

Browse files
Make sure AddToGitignore keeps the newline at the end of the file
1 parent bd2b80d commit 6fa4374

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

rewrite-core/src/main/java/org/openrewrite/AddToGitignore.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public PlainText visitText(PlainText text, ExecutionContext ctx) {
126126

127127
private String mergeGitignoreEntries(String existing, String newEntries) {
128128
String separator = existing.contains("\r\n") ? "\r\n" : "\n";
129+
boolean endsWithNewline = existing.isEmpty() || existing.endsWith("\n");
129130

130131
Set<String> existingRules = new LinkedHashSet<>();
131132
Set<String> existingWildcardPatterns = new LinkedHashSet<>();
@@ -181,7 +182,8 @@ private String mergeGitignoreEntries(String existing, String newEntries) {
181182

182183
result.addAll(linesToAdd);
183184

184-
return String.join(separator, result);
185+
String joined = String.join(separator, result);
186+
return endsWithNewline ? joined + separator : joined;
185187
}
186188

187189
private String normalizeRule(String rule) {

rewrite-core/src/test/java/org/openrewrite/AddToGitignoreTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,18 @@ void doNotAddSuperfluousEntries() {
447447
);
448448
}
449449

450+
@Test
451+
void addEntryToFileEndingWithNewline() {
452+
rewriteRun(
453+
spec -> spec.recipe(new AddToGitignore("*.log", null)),
454+
text(
455+
"*.tmp\n.DS_Store\n",
456+
"*.tmp\n.DS_Store\n\n*.log\n",
457+
spec -> spec.path(".gitignore").noTrim()
458+
)
459+
);
460+
}
461+
450462
@Test
451463
void doNotAddSuperfluousEntriesWithMultiplePatterns() {
452464
rewriteRun(

0 commit comments

Comments
 (0)