132
133
// FindLCAVersionHistoryItemAndIndex finds the lowest common ancestor VersionHistory index and corresponding item.
134
>
func FindLCAVersionHistoryItemAndIndex(h *historyspb.VersionHistories, incomingHistory *historyspb.VersionHistory) (*historyspb.VersionHistoryItem, int32, error) {
version_histories.go
135
>
var versionHistoryIndex int32
136
>
var versionHistoryLength int32
137
>
var versionHistoryItem *historyspb.VersionHistoryItem
138
>
139
>
for index, localHistory := range h.Histories {
140
>
item, err := FindLCAVersionHistoryItem(localHistory, incomingHistory)
141
>
if err != nil {
142
return nil, 0, err
143
}
144
145
// if not set
147
>
// if seeing LCA item with higher event ID
148
>
item.GetEventId() > versionHistoryItem.GetEventId() ||
149
>
// if seeing LCA item with equal event ID but shorter history
150
>
(item.GetEventId() == versionHistoryItem.GetEventId() && int32(len(localHistory.Items)) < versionHistoryLength) {
151
>
152
>
versionHistoryIndex = int32(index)
153
>
versionHistoryLength = int32(len(localHistory.Items))
154
>
versionHistoryItem = item
155
>
}
156
}
157
>
return CopyVersionHistoryItem(versionHistoryItem), versionHistoryIndex, nil
version_histories.go
158
}
159