@@ -391,17 +391,26 @@ func ResolveStateConflictsV2New(
391391// using Kahn's algorithm in order to topologically order them. The
392392// result array of events will be sorted so that "earlier" events appear
393393// first.
394+ // FIXME: this function does not sort correctly because it doesn't lookup PL events
395+ // correctly, meaning it will sort incorrectly for PL tiebreaks.
394396func ReverseTopologicalOrdering (input []PDU , order TopologicalOrder ) []PDU {
395- r := stateResolverV2 {}
397+ r := stateResolverV2 {
398+ resolvedCreate : getCreateEvent (input ),
399+ }
396400 return r .reverseTopologicalOrdering (input , order )
397401}
398402
403+ // TODO: Remove this function. Use ReverseTopologicalOrdering.
399404// HeaderedReverseTopologicalOrdering takes a set of input events and sorts
400405// them using Kahn's algorithm in order to topologically order them. The
401406// result array of events will be sorted so that "earlier" events appear
402407// first.
408+ // FIXME: this function does not sort correctly because it doesn't lookup PL events
409+ // correctly, meaning it will sort incorrectly for PL tiebreaks.
403410func HeaderedReverseTopologicalOrdering (events []PDU , order TopologicalOrder ) []PDU {
404- r := stateResolverV2 {}
411+ r := stateResolverV2 {
412+ resolvedCreate : getCreateEvent (events ),
413+ }
405414 input := make ([]PDU , len (events ))
406415 for i := range events {
407416 unwrapped := events [i ]
@@ -414,6 +423,15 @@ func HeaderedReverseTopologicalOrdering(events []PDU, order TopologicalOrder) []
414423 return result
415424}
416425
426+ func getCreateEvent (input []PDU ) PDU {
427+ for _ , ev := range input {
428+ if ev .Type () == spec .MRoomCreate && ev .StateKeyEquals ("" ) {
429+ return ev
430+ }
431+ }
432+ return nil
433+ }
434+
417435// isControlEvent returns true if the event meets the criteria for being classed
418436// as a "control" event for reverse topological sorting. If not then the event
419437// will be mainline sorted.
0 commit comments