Skip to content

Commit 901e4f8

Browse files
committed
fix WriteUnifiedDiff fmt.Sprintf format error
1 parent d8ed262 commit 901e4f8

File tree

2 files changed

+88
-10
lines changed

2 files changed

+88
-10
lines changed

difflib/difflib.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -559,10 +559,14 @@ type UnifiedDiff struct {
559559
func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {
560560
buf := bufio.NewWriter(writer)
561561
defer buf.Flush()
562-
w := func(format string, args ...interface{}) error {
562+
wf := func(format string, args ...interface{}) error {
563563
_, err := buf.WriteString(fmt.Sprintf(format, args...))
564564
return err
565565
}
566+
ws := func(s string) error {
567+
_, err := buf.WriteString(s)
568+
return err
569+
}
566570

567571
if len(diff.Eol) == 0 {
568572
diff.Eol = "\n"
@@ -581,41 +585,41 @@ func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {
581585
if len(diff.ToDate) > 0 {
582586
toDate = "\t" + diff.ToDate
583587
}
584-
err := w("--- %s%s%s", diff.FromFile, fromDate, diff.Eol)
588+
err := wf("--- %s%s%s", diff.FromFile, fromDate, diff.Eol)
585589
if err != nil {
586590
return err
587591
}
588-
err = w("+++ %s%s%s", diff.ToFile, toDate, diff.Eol)
592+
err = wf("+++ %s%s%s", diff.ToFile, toDate, diff.Eol)
589593
if err != nil {
590594
return err
591595
}
592596
}
593597
first, last := g[0], g[len(g)-1]
594598
range1 := formatRangeUnified(first.I1, last.I2)
595599
range2 := formatRangeUnified(first.J1, last.J2)
596-
if err := w("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil {
600+
if err := wf("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil {
597601
return err
598602
}
599603
for _, c := range g {
600604
i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2
601605
if c.Tag == 'e' {
602606
for _, line := range diff.A[i1:i2] {
603-
if err := w(" " + line); err != nil {
607+
if err := ws(" " + line); err != nil {
604608
return err
605609
}
606610
}
607611
continue
608612
}
609613
if c.Tag == 'r' || c.Tag == 'd' {
610614
for _, line := range diff.A[i1:i2] {
611-
if err := w("-" + line); err != nil {
615+
if err := ws("-" + line); err != nil {
612616
return err
613617
}
614618
}
615619
}
616620
if c.Tag == 'r' || c.Tag == 'i' {
617621
for _, line := range diff.B[j1:j2] {
618-
if err := w("+" + line); err != nil {
622+
if err := ws("+" + line); err != nil {
619623
return err
620624
}
621625
}

difflib/difflib_test.go

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,48 @@ group
102102
}
103103
}
104104

105-
func ExampleGetUnifiedDiffString() {
105+
func ExampleGetUnifiedDiffCode() {
106106
a := `one
107107
two
108108
three
109+
four
110+
fmt.Printf("%s,%T",a,b)
111+
`
112+
b := `zero
113+
one
114+
three
109115
four`
116+
diff := UnifiedDiff{
117+
A: SplitLines(a),
118+
B: SplitLines(b),
119+
FromFile: "Original",
120+
FromDate: "2005-01-26 23:30:50",
121+
ToFile: "Current",
122+
ToDate: "2010-04-02 10:20:52",
123+
Context: 3,
124+
}
125+
result, _ := GetUnifiedDiffString(diff)
126+
fmt.Println(strings.Replace(result, "\t", " ", -1))
127+
// Output:
128+
// --- Original 2005-01-26 23:30:50
129+
// +++ Current 2010-04-02 10:20:52
130+
// @@ -1,6 +1,4 @@
131+
// +zero
132+
// one
133+
// -two
134+
// three
135+
// four
136+
// -fmt.Printf("%s,%T",a,b)
137+
// -
138+
}
139+
140+
func ExampleGetUnifiedDiffString() {
141+
a := `one
142+
two
143+
three
144+
four
145+
fmt.Printf("%s,%T",a,b)
146+
`
110147
b := `zero
111148
one
112149
three
@@ -121,16 +158,53 @@ four`
121158
Context: 3,
122159
}
123160
result, _ := GetUnifiedDiffString(diff)
124-
fmt.Printf(strings.Replace(result, "\t", " ", -1))
161+
fmt.Println(strings.Replace(result, "\t", " ", -1))
125162
// Output:
126163
// --- Original 2005-01-26 23:30:50
127164
// +++ Current 2010-04-02 10:20:52
128-
// @@ -1,4 +1,4 @@
165+
// @@ -1,6 +1,4 @@
129166
// +zero
130167
// one
131168
// -two
132169
// three
133170
// four
171+
// -fmt.Printf("%s,%T",a,b)
172+
// -
173+
}
174+
175+
func ExampleGetContextDiffCode() {
176+
a := `one
177+
two
178+
three
179+
four`
180+
b := `zero
181+
one
182+
tree
183+
four`
184+
diff := ContextDiff{
185+
A: SplitLines(a),
186+
B: SplitLines(b),
187+
FromFile: "Original",
188+
ToFile: "Current",
189+
Context: 3,
190+
Eol: "\n",
191+
}
192+
result, _ := GetContextDiffString(diff)
193+
fmt.Printf(strings.Replace(result, "\t", " ", -1))
194+
// Output:
195+
// *** Original
196+
// --- Current
197+
// ***************
198+
// *** 1,4 ****
199+
// one
200+
// ! two
201+
// ! three
202+
// four
203+
// --- 1,4 ----
204+
// + zero
205+
// one
206+
// ! tree
207+
// four
134208
}
135209

136210
func ExampleGetContextDiffString() {

0 commit comments

Comments
 (0)