Skip to content

Commit 8c90850

Browse files
author
Delian Jekov
committed
feat: new/deleted file mode
1 parent 2e82b0b commit 8c90850

File tree

2 files changed

+57
-41
lines changed

2 files changed

+57
-41
lines changed

CSharpDiff.Tests/PatchTests.cs

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public void ShouldHandleLastLine()
8686
{
8787
var patch = new Patch();
8888

89-
var expected = "Index: test\n"
90-
+ "===================================================================\n"
89+
var expected = "diff --git test test\n"
90+
+ "Index: test\n"
9191
+ "--- test\theader1\n"
9292
+ "+++ test\theader2\n"
9393
+ "@@ -1,3 +1,4 @@\n"
@@ -98,8 +98,8 @@ public void ShouldHandleLastLine()
9898
var res = patch.create("test", "test", "line2\nline3\nline5\n", "line2\nline3\nline4\nline5\n", "header1", "header2");
9999
Assert.Equal(expected, res);
100100

101-
expected = "Index: test\n"
102-
+ "===================================================================\n"
101+
expected = "diff --git test test\n"
102+
+ "Index: test\n"
103103
+ "--- test\theader1\n"
104104
+ "+++ test\theader2\n"
105105
+ "@@ -1,3 +1,4 @@\n"
@@ -111,8 +111,8 @@ public void ShouldHandleLastLine()
111111
res = patch.create("test", "test", "line2\nline3\nline4\n", "line2\nline3\nline4\nline5\n", "header1", "header2");
112112
Assert.Equal(expected, res);
113113

114-
expected = "Index: test\n"
115-
+ "===================================================================\n"
114+
expected = "diff --git test test\n"
115+
+ "Index: test\n"
116116
+ "--- test\theader1\n"
117117
+ "+++ test\theader2\n"
118118
+ "@@ -1,4 +1,5 @@\n"
@@ -131,8 +131,8 @@ public void ShouldHandleLastLine()
131131
public void ShouldHandleNoNewLineNewEOF()
132132
{
133133
var patch = new Patch();
134-
var expected = "Index: test\n"
135-
+ "===================================================================\n"
134+
var expected = "diff --git test test\n"
135+
+ "Index: test\n"
136136
+ "--- test\theader1\n"
137137
+ "+++ test\theader2\n"
138138
+ "@@ -1,4 +1,4 @@\n"
@@ -150,8 +150,8 @@ public void ShouldHandleNoNewLineNewEOF()
150150
public void ShouldHandleNoNewLineOldEOF()
151151
{
152152
var patch = new Patch();
153-
var expected = "Index: test\n"
154-
+ "===================================================================\n"
153+
var expected = "diff --git test test\n"
154+
+ "Index: test\n"
155155
+ "--- test\theader1\n"
156156
+ "+++ test\theader2\n"
157157
+ "@@ -1,4 +1,4 @@\n"
@@ -169,8 +169,8 @@ public void ShouldHandleNoNewLineOldEOF()
169169
public void ShouldHandleNoNewLineContextMissing()
170170
{
171171
var patch = new Patch();
172-
var expected = "Index: test\n"
173-
+ "===================================================================\n"
172+
var expected = "diff --git test test\n"
173+
+ "Index: test\n"
174174
+ "--- test\theader1\n"
175175
+ "+++ test\theader2\n"
176176
+ "@@ -1,4 +1,4 @@\n"
@@ -188,8 +188,8 @@ public void ShouldHandleNoNewLineContextMissing()
188188
public void ShouldOutPutNoNewLineOnEmpty()
189189
{
190190
var patch = new Patch();
191-
var expected = "Index: test\n"
192-
+ "===================================================================\n"
191+
var expected = "diff --git test test\n"
192+
+ "Index: test\n"
193193
+ "--- test\theader1\n"
194194
+ "+++ test\theader2\n"
195195
+ "@@ -0,0 +1,4 @@\n"
@@ -206,8 +206,8 @@ public void ShouldOutPutNoNewLineOnEmpty()
206206
public void ShouldNotOutputNoNewLineWhenEofOutsideHunk()
207207
{
208208
var patch = new Patch();
209-
var expected = "Index: test\n"
210-
+ "===================================================================\n"
209+
var expected = "diff --git test test\n"
210+
+ "Index: test\n"
211211
+ "--- test\theader1\n"
212212
+ "+++ test\theader2\n"
213213
+ "@@ -1,5 +1,5 @@\n"
@@ -225,8 +225,8 @@ public void ShouldNotOutputNoNewLineWhenEofOutsideHunk()
225225
public void ShouldGeneratePatchDefaultContextSize()
226226
{
227227
var patch = new Patch();
228-
var expected = "Index: testFileName\n"
229-
+ "===================================================================\n"
228+
var expected = "diff --git testFileName testFileName\n"
229+
+ "Index: testFileName\n"
230230
+ "--- testFileName\tOld Header\n"
231231
+ "+++ testFileName\tNew Header\n"
232232
+ "@@ -1,5 +1,6 @@\n"
@@ -283,8 +283,8 @@ public void ShouldGeneratePatchWithContextSize0()
283283
{
284284
Context = 0
285285
});
286-
var expected = "Index: testFileName\n"
287-
+ "===================================================================\n"
286+
var expected = "diff --git testFileName testFileName\n"
287+
+ "Index: testFileName\n"
288288
+ "--- testFileName\tOld Header\n"
289289
+ "+++ testFileName\tNew Header\n"
290290
+ "@@ -1,1 +1,2 @@\n"
@@ -312,8 +312,8 @@ public void ShouldGeneratePatchWithContextSize2()
312312
{
313313
Context = 2
314314
});
315-
var expected = "Index: testFileName\n"
316-
+ "===================================================================\n"
315+
var expected = "diff --git testFileName testFileName\n"
316+
+ "Index: testFileName\n"
317317
+ "--- testFileName\tOld Header\n"
318318
+ "+++ testFileName\tNew Header\n"
319319
+ "@@ -1,3 +1,4 @@\n"
@@ -356,8 +356,8 @@ public void ShouldGeneratePatchWithContextSize2()
356356
public void ShouldOutputHeadersOnlyForIdentical()
357357
{
358358
var patch = new Patch();
359-
var expected = "Index: testFileName\n"
360-
+ "===================================================================\n"
359+
var expected = "diff --git testFileName testFileName\n"
360+
+ "Index: testFileName\n"
361361
+ "--- testFileName\tOld Header\n"
362362
+ "+++ testFileName\tNew Header\n";
363363
var res = patch.create("testFileName", "testFileName", oldFile, oldFile, "Old Header", "New Header");
@@ -368,8 +368,8 @@ public void ShouldOutputHeadersOnlyForIdentical()
368368
public void ShouldOmitHeadersIfEmpty()
369369
{
370370
var patch = new Patch();
371-
var expected = "Index: testFileName\n"
372-
+ "===================================================================\n"
371+
var expected = "diff --git testFileName testFileName\n"
372+
+ "Index: testFileName\n"
373373
+ "--- testFileName\n"
374374
+ "+++ testFileName\n";
375375
var res = patch.create("testFileName", "testFileName", oldFile, oldFile, null, null);
@@ -380,8 +380,8 @@ public void ShouldOmitHeadersIfEmpty()
380380
public void ShouldHandleEmpty()
381381
{
382382
var patch = new Patch();
383-
var expected = "Index: testFileName\n"
384-
+ "===================================================================\n"
383+
var expected = "diff --git testFileName testFileName\n"
384+
+ "Index: testFileName\n"
385385
+ "--- testFileName\n"
386386
+ "+++ testFileName\n";
387387
var res = patch.create("testFileName", "testFileName", "", "", null, null);
@@ -392,7 +392,7 @@ public void ShouldHandleEmpty()
392392
public void ShouldOmitIndexDifferentFilenames()
393393
{
394394
var patch = new Patch();
395-
var expected = "===================================================================\n"
395+
var expected = "diff --git foo bar\n"
396396
+ "--- foo\n"
397397
+ "+++ bar\n";
398398
var res = patch.create("foo", "bar", "", "", null, null);
@@ -406,8 +406,8 @@ public void ShouldNotIgnoreWhiteSpace()
406406
{
407407
IgnoreWhiteSpace = false
408408
});
409-
var expected = "Index: testFileName\n"
410-
+ "===================================================================\n"
409+
var expected = "diff --git testFileName testFileName\n"
410+
+ "Index: testFileName\n"
411411
+ "--- testFileName\n"
412412
+ "+++ testFileName\n"
413413
+ "@@ -1,2 +1,2 @@\n"
@@ -428,8 +428,8 @@ public void ShouldIgnoreWhiteSpace()
428428
{
429429
IgnoreWhiteSpace = true
430430
});
431-
var expected = "Index: testFileName\n"
432-
+ "===================================================================\n"
431+
var expected = "diff --git testFileName testFileName\n"
432+
+ "Index: testFileName\n"
433433
+ "--- testFileName\n"
434434
+ "+++ testFileName\n";
435435
var res = patch.create("testFileName", "testFileName", "line \n line", "line\nline", null, null);
@@ -443,8 +443,8 @@ public void ShouldNotConsiderNewLineToken()
443443
{
444444
NewlineIsToken = false
445445
});
446-
var expected = "Index: testFileName\n"
447-
+ "===================================================================\n"
446+
var expected = "diff --git testFileName testFileName\n"
447+
+ "Index: testFileName\n"
448448
+ "--- testFileName\n"
449449
+ "+++ testFileName\n"
450450
+ "@@ -1,2 +1,2 @@\n"
@@ -466,8 +466,8 @@ public void ShouldConsiderNewLineToken()
466466
{
467467
NewlineIsToken = true
468468
});
469-
var expected = "Index: testFileName\n"
470-
+ "===================================================================\n"
469+
var expected = "diff --git testFileName testFileName\n"
470+
+ "Index: testFileName\n"
471471
+ "--- testFileName\n"
472472
+ "+++ testFileName\n"
473473
+ "@@ -1,3 +1,3 @@\n"

CSharpDiff/Patches/Patch.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
using System.Text.RegularExpressions;
21
using CSharpDiff.Diffs;
32
using CSharpDiff.Diffs.Models;
43
using CSharpDiff.Patches.Models;
4+
using System.Text.RegularExpressions;
55

66
namespace CSharpDiff.Patches
77
{
@@ -185,13 +185,29 @@ public PatchResult createPatchResult(string oldFileName, string newFileName, str
185185
public string formatPatch(PatchResult diff)
186186
{
187187
var ret = new List<string>();
188+
var oldFileName = (String.IsNullOrEmpty(diff.OldFileName) ? "/dev/null" : diff.OldFileName);
189+
var newFileName = (String.IsNullOrEmpty(diff.NewFileName) ? "/dev/null" : diff.NewFileName);
190+
191+
ret.Add($"diff --git {oldFileName} {newFileName}");
192+
188193
if (diff.OldFileName == diff.NewFileName)
189194
{
190195
ret.Add("Index: " + diff.OldFileName);
191196
}
192-
ret.Add("===================================================================");
193-
ret.Add("--- " + diff.OldFileName + (String.IsNullOrEmpty(diff.OldHeader) ? "" : '\t' + diff.OldHeader));
194-
ret.Add("+++ " + diff.NewFileName + (String.IsNullOrEmpty(diff.NewHeader) ? "" : '\t' + diff.NewHeader));
197+
else if (diff.OldFileName is null && diff.NewFileName is not null)
198+
{
199+
ret.Add("new file mode 100644");
200+
}
201+
else if (diff.NewFileName is null && diff.OldFileName is not null)
202+
{
203+
ret.Add("deleted file mode 100644");
204+
}
205+
206+
207+
ret.Add("--- " + oldFileName + (String.IsNullOrEmpty(diff.OldHeader) ? "" : '\t' + diff.OldHeader));
208+
ret.Add("+++ " + newFileName + (String.IsNullOrEmpty(diff.NewHeader) ? "" : '\t' + diff.NewHeader));
209+
210+
195211

196212
for (var i = 0; i < diff.Hunks.Count(); i++)
197213
{

0 commit comments

Comments
 (0)