From 459b9363bdb4d060826cd0f2a3a6346124fc87b2 Mon Sep 17 00:00:00 2001 From: Quinn Slack Date: Sun, 24 Mar 2019 19:14:44 +0100 Subject: [PATCH] support sorting multi-file diff before printing Makes it easier to canonicalize the output of `PrintMultiFileDiff` by adding a new `PrintOptions` arg that lets the caller specify that the diffs should be sorted before printing. --- diff/diff_test.go | 2 +- diff/print.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/diff/diff_test.go b/diff/diff_test.go index 7883180..0f27ef3 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -510,7 +510,7 @@ func TestParseMultiFileDiffAndPrintMultiFileDiff(t *testing.T) { t.Errorf("%s: got %v instances of diff.FileDiff, expected %v", test.filename, got, want) } - printed, err := PrintMultiFileDiff(diffs) + printed, err := PrintMultiFileDiff(diffs, nil) if err != nil { t.Errorf("%s: PrintMultiFileDiff: %s", test.filename, err) } diff --git a/diff/print.go b/diff/print.go index d440cb9..4335263 100644 --- a/diff/print.go +++ b/diff/print.go @@ -4,13 +4,25 @@ import ( "bytes" "fmt" "io" + "sort" "time" "sourcegraph.com/sqs/pbtypes" ) -// PrintMultiFileDiff prints a multi-file diff in unified diff format. -func PrintMultiFileDiff(ds []*FileDiff) ([]byte, error) { +// PrintOptions specifies how to print a diff. +type PrintOptions struct { + Sort bool // sort by filename +} + +// PrintMultiFileDiff prints a multi-file diff in unified diff format with the specified options. +func PrintMultiFileDiff(ds []*FileDiff, opt *PrintOptions) ([]byte, error) { + if opt != nil && opt.Sort { + sort.Slice(ds, func(i, j int) bool { + return ds[i].NewName < ds[j].NewName + }) + } + var buf bytes.Buffer for _, d := range ds { diff, err := PrintFileDiff(d)