diff --git a/hooks/pre-commit b/hooks/pre-commit index 0da39378e..abce0f598 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -20,7 +20,7 @@ fi ineffassign ./src/ go tool vet --all --shadow ./src -gocyclo -over 16 src/ +gocyclo -over 12 src/ gb test # Check that all the packages can build. diff --git a/src/github.com/matrix-org/dendrite/roomserver/input/membership.go b/src/github.com/matrix-org/dendrite/roomserver/input/membership.go index 35c39e9d2..ef5b1ce0e 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/input/membership.go +++ b/src/github.com/matrix-org/dendrite/roomserver/input/membership.go @@ -175,7 +175,7 @@ type stateChange struct { added types.StateEntry } -func membershipChanges(removed, added []types.StateEntry) []stateChange { +func pairUpChanges(removed, added []types.StateEntry) []stateChange { var ai int var ri int var result []stateChange @@ -183,22 +183,14 @@ func membershipChanges(removed, added []types.StateEntry) []stateChange { switch { case ai == len(added): for _, s := range removed[ri:] { - if s.EventTypeNID == types.MRoomMemberNID { - result = append(result, stateChange{removed: s}) - } + result = append(result, stateChange{removed: s}) } return result case ri == len(removed): - for _, s := range removed[ai:] { - if s.EventTypeNID == types.MRoomMemberNID { - result = append(result, stateChange{added: s}) - } + for _, s := range added[ai:] { + result = append(result, stateChange{added: s}) } return result - case added[ai].EventTypeNID != types.MRoomMemberNID: - ai++ - case removed[ri].EventTypeNID != types.MRoomMemberNID: - ri++ case added[ai].StateKeyTuple == removed[ri].StateKeyTuple: result = append(result, stateChange{ removed: removed[ri], @@ -215,3 +207,17 @@ func membershipChanges(removed, added []types.StateEntry) []stateChange { } } } + +// membershipChanges pairs up the membership state changes from a sorted list +// of state removed and a sorted list of state added. +func membershipChanges(removed, added []types.StateEntry) []stateChange { + changes := pairUpChanges(removed, added) + var result []stateChange + for _, c := range changes { + if c.added.EventTypeNID == types.MRoomMemberNID || + c.removed.EventTypeNID == types.MRoomMemberNID { + result = append(result, c) + } + } + return result +}