# HG changeset patch # User Mikael Berthe # Date 1488118417 -3600 # Node ID 72f6336c11671f80f7de10af63ea9deca4f702da # Parent fc4f5c69286b20ce73be33b91a995743b90507a8 Fix sorting when merging diff -r fc4f5c69286b -r 72f6336c1167 gobm65.go --- a/gobm65.go Sun Feb 26 14:46:10 2017 +0100 +++ b/gobm65.go Sun Feb 26 15:13:37 2017 +0100 @@ -235,28 +235,31 @@ return isLater(newItems[i], newItems[j]) }) - appendIfMissing := func(l []measurement, m measurement) []measurement { + // insertIfMissing inserts a measurement into a sorted slice + insertIfMissing := func(l []measurement, m measurement) []measurement { + var later bool var i int for i = range l { - if !isLater(l[i], m) { + later = isLater(l[i], m) + if !later { break } if l[i] == m { // Duplicate return l } } - if i == len(l) { - return append(l[:i], m) + if later { + return append(l, m) } - r := append(l[:i], append(l[i:], m)...) - return r + + return append(l[:i], append([]measurement{m}, l[i:]...)...) } for _, item := range newItems { - result = appendIfMissing(result, item) + result = insertIfMissing(result, item) } for _, item := range oldItems { - result = appendIfMissing(result, item) + result = insertIfMissing(result, item) } return result }