@@ -67,34 +67,18 @@ func (f *File) String() string {
67
67
writeQuotedName (& diff , "b/" + bName )
68
68
diff .WriteByte ('\n' )
69
69
70
- diff .WriteString ("--- " )
71
- if f .OldName == "" {
72
- diff .WriteString ("/dev/null" )
73
- } else {
74
- writeQuotedName (& diff , f .OldName )
75
- }
76
- diff .WriteByte ('\n' )
77
-
78
- diff .WriteString ("+++ " )
79
- if f .NewName == "" {
80
- diff .WriteString ("/dev/null" )
81
- } else {
82
- writeQuotedName (& diff , f .NewName )
83
- }
84
- diff .WriteByte ('\n' )
85
-
86
70
if f .OldMode != 0 {
87
71
if f .IsDelete {
88
72
fmt .Fprintf (& diff , "deleted file mode %o\n " , f .OldMode )
89
- } else {
73
+ } else if f . NewMode != 0 {
90
74
fmt .Fprintf (& diff , "old mode %o\n " , f .OldMode )
91
75
}
92
76
}
93
77
94
78
if f .NewMode != 0 {
95
79
if f .IsNew {
96
80
fmt .Fprintf (& diff , "new file mode %o\n " , f .NewMode )
97
- } else {
81
+ } else if f . OldMode != 0 {
98
82
fmt .Fprintf (& diff , "new mode %o\n " , f .NewMode )
99
83
}
100
84
}
@@ -135,12 +119,31 @@ func (f *File) String() string {
135
119
136
120
if f .OldOIDPrefix != "" && f .NewOIDPrefix != "" {
137
121
fmt .Fprintf (& diff , "index %s..%s" , f .OldOIDPrefix , f .NewOIDPrefix )
138
- if f .OldMode != 0 {
122
+ if f .OldMode != 0 && ! f . IsDelete {
139
123
fmt .Fprintf (& diff , " %o" , f .OldMode )
140
124
}
141
125
diff .WriteByte ('\n' )
142
126
}
143
127
128
+ // The "---" and "+++" lines only appear for patches with fragments
129
+ if len (f .TextFragments ) > 0 || f .BinaryFragment != nil {
130
+ diff .WriteString ("--- " )
131
+ if f .OldName == "" {
132
+ diff .WriteString ("/dev/null" )
133
+ } else {
134
+ writeQuotedName (& diff , "a/" + f .OldName )
135
+ }
136
+ diff .WriteByte ('\n' )
137
+
138
+ diff .WriteString ("+++ " )
139
+ if f .NewName == "" {
140
+ diff .WriteString ("/dev/null" )
141
+ } else {
142
+ writeQuotedName (& diff , "b/" + f .NewName )
143
+ }
144
+ diff .WriteByte ('\n' )
145
+ }
146
+
144
147
if f .IsBinary {
145
148
// TODO(bkeyes): add string method for BinaryFragments
146
149
} else {
@@ -192,7 +195,15 @@ func (f *TextFragment) String() string {
192
195
// Header returns a git diff header of this fragment. See [File.String] for
193
196
// more details on this format.
194
197
func (f * TextFragment ) Header () string {
195
- return fmt .Sprintf ("@@ -%d,%d +%d,%d @@ %s" , f .OldPosition , f .OldLines , f .NewPosition , f .NewLines , f .Comment )
198
+ var hdr strings.Builder
199
+
200
+ fmt .Fprintf (& hdr , "@@ -%d,%d +%d,%d @@" , f .OldPosition , f .OldLines , f .NewPosition , f .NewLines )
201
+ if f .Comment != "" {
202
+ hdr .WriteByte (' ' )
203
+ hdr .WriteString (f .Comment )
204
+ }
205
+
206
+ return hdr .String ()
196
207
}
197
208
198
209
// Validate checks that the fragment is self-consistent and appliable. Validate
0 commit comments