From 2138b46f6cdab5fca49680c2e1994703ab71b1c3 Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Thu, 28 Jan 2016 11:39:48 -0500 Subject: PLT-1765 allowing support of 2 previous versions --- model/version.go | 60 ++++++++++++++++++++++++++++++++----------------- model/version_test.go | 52 +++++++++++++++++++++++++++++++++++------- store/sql_post_store.go | 5 +++++ store/sql_store.go | 23 ++----------------- store/sql_user_store.go | 3 ++- 5 files changed, 93 insertions(+), 50 deletions(-) diff --git a/model/version.go b/model/version.go index 88334ceea..69529e7a1 100644 --- a/model/version.go +++ b/model/version.go @@ -4,6 +4,7 @@ package model import ( + "fmt" "strconv" "strings" ) @@ -29,6 +30,22 @@ var BuildNumber = "_BUILD_NUMBER_" var BuildDate = "_BUILD_DATE_" var BuildHash = "_BUILD_HASH_" var BuildEnterpriseReady = "_BUILD_ENTERPRISE_READY_" +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, ".") @@ -52,25 +69,17 @@ func SplitVersion(version string) (int64, int64, int64) { return major, minor, patch } -func GetPreviousVersion(currentVersion string) (int64, int64) { - currentIndex := -1 - currentMajor, currentMinor, _ := SplitVersion(currentVersion) - - for index, version := range versions { - major, minor, _ := SplitVersion(version) - - if currentMajor == major && currentMinor == minor { - currentIndex = index - } +func GetPreviousVersion(version string) string { + verMajor, verMinor, _ := SplitVersion(version) + verStr := fmt.Sprintf("%v.%v.0", verMajor, verMinor) - if currentIndex >= 0 { - if currentMajor != major || currentMinor != minor { - return major, minor - } + for index, v := range versionsWithoutHotFixes { + if v == verStr && len(versionsWithoutHotFixes) > index+1 { + return versionsWithoutHotFixes[index+1] } } - return 0, 0 + return "" } func IsOfficalBuild() bool { @@ -88,13 +97,24 @@ func IsCurrentVersion(versionToCheck string) bool { } } -func IsPreviousVersion(versionToCheck string) bool { +func IsPreviousVersionsSupported(versionToCheck string) bool { toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) - prevMajor, prevMinor := GetPreviousVersion(CurrentVersion) + versionToCheckStr := fmt.Sprintf("%v.%v.0", toCheckMajor, toCheckMinor) - if toCheckMajor == prevMajor && toCheckMinor == prevMinor { + // Current Supported + if versionsWithoutHotFixes[0] == versionToCheckStr { + return true + } + + // Current - 1 Supported + if versionsWithoutHotFixes[1] == versionToCheckStr { return true - } else { - return false } + + // Current - 2 Supported + if versionsWithoutHotFixes[2] == versionToCheckStr { + return true + } + + return false } diff --git a/model/version_test.go b/model/version_test.go index 33e8dc93e..d73273ce5 100644 --- a/model/version_test.go +++ b/model/version_test.go @@ -36,20 +36,28 @@ func TestSplitVersion(t *testing.T) { } func TestGetPreviousVersion(t *testing.T) { - if major, minor := GetPreviousVersion("1.0.0"); major != 0 || minor != 7 { - t.Fatal(major, minor) + if GetPreviousVersion("1.3.0") != "1.2.0" { + t.Fatal() + } + + if GetPreviousVersion("1.2.1") != "1.1.0" { + t.Fatal() + } + + if GetPreviousVersion("1.1.0") != "1.0.0" { + t.Fatal() } - if major, minor := GetPreviousVersion("0.7.0"); major != 0 || minor != 6 { - t.Fatal(major, minor) + if GetPreviousVersion("1.0.0") != "0.7.0" { + t.Fatal() } - if major, minor := GetPreviousVersion("0.7.1"); major != 0 || minor != 6 { - t.Fatal(major, minor) + if GetPreviousVersion("0.7.1") != "0.6.0" { + t.Fatal() } - if major, minor := GetPreviousVersion("0.7111.1"); major != 0 || minor != 0 { - t.Fatal(major, minor) + if GetPreviousVersion("0.5.0") != "" { + t.Fatal() } } @@ -72,3 +80,31 @@ func TestIsCurrentVersion(t *testing.T) { t.Fatal() } } + +func TestIsPreviousVersionsSupported(t *testing.T) { + + // 1.4.0 CURRENT RELEASED VERSION + if !IsPreviousVersionsSupported(versions[0]) { + t.Fatal() + } + + // 1.3.0 + if !IsPreviousVersionsSupported(versions[1]) { + t.Fatal() + } + + // 1.2.1 + if !IsPreviousVersionsSupported(versions[2]) { + t.Fatal() + } + + // 1.2.0 + if !IsPreviousVersionsSupported(versions[3]) { + t.Fatal() + } + + // 1.1.0 NOT SUPPORTED + if IsPreviousVersionsSupported(versions[4]) { + t.Fatal() + } +} diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 2d5d66e0d..aeaa5922c 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -38,6 +38,11 @@ func NewSqlPostStore(sqlStore *SqlStore) PostStore { } func (s SqlPostStore) UpgradeSchemaIfNeeded() { + // ADDED for 1.3 REMOVE for 1.6 + s.RemoveColumnIfExists("Posts", "ImgCount") + + // ADDED for 1.3 REMOVE for 1.6 + s.GetMaster().Exec(`UPDATE Preferences SET Type = :NewType WHERE Type = :CurrentType`, map[string]string{"NewType": model.POST_JOIN_LEAVE, "CurrentType": "join_leave"}) } func (s SqlPostStore) CreateIndexesIfNotExists() { diff --git a/store/sql_store.go b/store/sql_store.go index e4e1bf3b4..335cb207c 100644 --- a/store/sql_store.go +++ b/store/sql_store.go @@ -73,25 +73,13 @@ func NewSqlStore() Store { } schemaVersion := sqlStore.GetCurrentSchemaVersion() - isSchemaVersion07 := false // REMOVE AFTER 1.2 SHIP see PLT-828 - isSchemaVersion10 := false // REMOVE AFTER 1.2 SHIP see PLT-828 // If the version is already set then we are potentially in an 'upgrade needed' state if schemaVersion != "" { // Check to see if it's the most current database schema version if !model.IsCurrentVersion(schemaVersion) { // If we are upgrading from the previous version then print a warning and continue - - // Special case - if schemaVersion == "0.7.1" || schemaVersion == "0.7.0" { - isSchemaVersion07 = true - } - - if schemaVersion == "1.0.0" { - isSchemaVersion10 = true - } - - if model.IsPreviousVersion(schemaVersion) || isSchemaVersion07 || isSchemaVersion10 { + if model.IsPreviousVersionsSupported(schemaVersion) { l4g.Warn(utils.T("store.sql.schema_out_of_date.warn"), schemaVersion) l4g.Warn(utils.T("store.sql.schema_upgrade_attempt.warn"), model.CurrentVersion) } else { @@ -103,13 +91,6 @@ func NewSqlStore() Store { } } - // REMOVE AFTER 1.2 SHIP see PLT-828 - if sqlStore.DoesTableExist("Sessions") { - if sqlStore.DoesColumnExist("Sessions", "AltId") { - sqlStore.GetMaster().Exec("DROP TABLE IF EXISTS Sessions") - } - } - sqlStore.team = NewSqlTeamStore(sqlStore) sqlStore.channel = NewSqlChannelStore(sqlStore) sqlStore.post = NewSqlPostStore(sqlStore) @@ -150,7 +131,7 @@ func NewSqlStore() Store { sqlStore.preference.(*SqlPreferenceStore).DeleteUnusedFeatures() - if model.IsPreviousVersion(schemaVersion) || isSchemaVersion07 || isSchemaVersion10 { + if model.IsPreviousVersionsSupported(schemaVersion) { sqlStore.system.Update(&model.System{Name: "Version", Value: model.CurrentVersion}) l4g.Warn(utils.T("store.sql.upgraded.warn"), model.CurrentVersion) } diff --git a/store/sql_user_store.go b/store/sql_user_store.go index 4ea8af090..0b6970c96 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -46,7 +46,8 @@ func NewSqlUserStore(sqlStore *SqlStore) UserStore { } func (us SqlUserStore) UpgradeSchemaIfNeeded() { - us.CreateColumnIfNotExists("Users", "Locale", "varchar(5)", "character varying(5)", model.DEFAULT_LOCALE) // Added After 1.4 + // ADDED for 1.5 REMOVE for 1.8 + us.CreateColumnIfNotExists("Users", "Locale", "varchar(5)", "character varying(5)", model.DEFAULT_LOCALE) } func (us SqlUserStore) CreateIndexesIfNotExists() { -- cgit v1.2.3-1-g7c22