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)