Files
mattermost/model/version.go
Ashish Bhate e50cfca2ea [MM-35345][MM-35494] fixes for incorrect mentions and unreads for threads and channels (#17803)
Summary:
The CRT backend was first released in version 5.29.0. Since then, the behaviour of the CRT feature has been refined, several bugs have been fixed, and a few sql columns have been added. Before these various fixes went in, the threads and channel membership tables have accumulated incorrect mention and unreads data. This PR fixes some of this bad historical data.
Summary of fixes:

- Marks threads as read for users where the last reply time of the thread is earlier than the time the user viewed the channel. Marking a thread means setting the mention count to zero and setting the last viewed at time of the the thread as the last viewed at time of the channel. This is done through a "sql migration"
- Fix channel counts, i.e. the total message count, total root message count, mention count, and mention count in root messages for users who have viewed the channel after the last post in the channel. This is done as a "sql migration"


Ticket Link:
Parts of
https://mattermost.atlassian.net/browse/MM-35494
https://mattermost.atlassian.net/browse/MM-35345
2021-07-14 17:39:40 +05:30

189 lines
3.3 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package model
import (
"fmt"
"strconv"
"strings"
)
// This is a list of all the current versions including any patches.
// It should be maintained in chronological order with most current
// release at the front of the list.
var versions = []string{
"5.38.0",
"5.37.0",
"5.36.0",
"5.35.0",
"5.34.0",
"5.33.0",
"5.32.0",
"5.31.0",
"5.30.0",
"5.29.0",
"5.28.0",
"5.27.0",
"5.26.0",
"5.25.0",
"5.24.0",
"5.23.0",
"5.22.0",
"5.21.0",
"5.20.0",
"5.19.0",
"5.18.0",
"5.17.0",
"5.16.0",
"5.15.0",
"5.14.0",
"5.13.0",
"5.12.0",
"5.11.0",
"5.10.0",
"5.9.0",
"5.8.0",
"5.7.0",
"5.6.0",
"5.5.0",
"5.4.0",
"5.3.0",
"5.2.0",
"5.1.0",
"5.0.0",
"4.10.0",
"4.9.0",
"4.8.1",
"4.8.0",
"4.7.2",
"4.7.1",
"4.7.0",
"4.6.0",
"4.5.0",
"4.4.0",
"4.3.0",
"4.2.0",
"4.1.0",
"4.0.0",
"3.10.0",
"3.9.0",
"3.8.0",
"3.7.0",
"3.6.0",
"3.5.0",
"3.4.0",
"3.3.0",
"3.2.0",
"3.1.0",
"3.0.0",
"2.2.0",
"2.1.0",
"2.0.0",
"1.4.0",
"1.3.0",
"1.2.1",
"1.2.0",
"1.1.0",
"1.0.0",
"0.7.1",
"0.7.0",
"0.6.0",
"0.5.0",
}
var CurrentVersion string = versions[0]
var BuildNumber string
var BuildDate string
var BuildHash string
var BuildHashEnterprise string
var BuildEnterpriseReady string
var versionsWithoutHotFixes []string
func init() {
versionsWithoutHotFixes = make([]string, 0, len(versions))
seen := make(map[string]string)
for _, version := range versions {
maj, min, _ := SplitVersion(version)
verStr := fmt.Sprintf("%v.%v.0", maj, min)
if seen[verStr] == "" {
versionsWithoutHotFixes = append(versionsWithoutHotFixes, verStr)
seen[verStr] = verStr
}
}
}
func SplitVersion(version string) (int64, int64, int64) {
parts := strings.Split(version, ".")
major := int64(0)
minor := int64(0)
patch := int64(0)
if len(parts) > 0 {
major, _ = strconv.ParseInt(parts[0], 10, 64)
}
if len(parts) > 1 {
minor, _ = strconv.ParseInt(parts[1], 10, 64)
}
if len(parts) > 2 {
patch, _ = strconv.ParseInt(parts[2], 10, 64)
}
return major, minor, patch
}
func GetPreviousVersion(version string) string {
verMajor, verMinor, _ := SplitVersion(version)
verStr := fmt.Sprintf("%v.%v.0", verMajor, verMinor)
for index, v := range versionsWithoutHotFixes {
if v == verStr && len(versionsWithoutHotFixes) > index+1 {
return versionsWithoutHotFixes[index+1]
}
}
return ""
}
func IsCurrentVersion(versionToCheck string) bool {
currentMajor, currentMinor, _ := SplitVersion(CurrentVersion)
toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck)
if toCheckMajor == currentMajor && toCheckMinor == currentMinor {
return true
}
return false
}
func IsPreviousVersionsSupported(versionToCheck string) bool {
toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck)
versionToCheckStr := fmt.Sprintf("%v.%v.0", toCheckMajor, toCheckMinor)
// Current Supported
if versionsWithoutHotFixes[0] == versionToCheckStr {
return true
}
// Current - 1 Supported
if versionsWithoutHotFixes[1] == versionToCheckStr {
return true
}
// Current - 2 Supported
if versionsWithoutHotFixes[2] == versionToCheckStr {
return true
}
// Current - 3 Supported
if versionsWithoutHotFixes[3] == versionToCheckStr {
return true
}
return false
}