diff options
author | =Corey Hulen <corey@hulen.com> | 2015-09-17 13:01:40 -0700 |
---|---|---|
committer | =Corey Hulen <corey@hulen.com> | 2015-09-17 13:01:40 -0700 |
commit | af4deb2369ee6251d7f49db1d67808b773dd9db7 (patch) | |
tree | 51b6d6f6bc5501681f27d07791ea826c38105d55 | |
parent | 9b5198c69c01ff11b0977282b61cf2222ef2f2b1 (diff) | |
download | chat-af4deb2369ee6251d7f49db1d67808b773dd9db7.tar.gz chat-af4deb2369ee6251d7f49db1d67808b773dd9db7.tar.bz2 chat-af4deb2369ee6251d7f49db1d67808b773dd9db7.zip |
Making changes to versioning
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | api/context.go | 2 | ||||
-rw-r--r-- | mattermost.go | 9 | ||||
-rw-r--r-- | model/utils.go | 2 | ||||
-rw-r--r-- | model/version.go | 56 | ||||
-rw-r--r-- | model/version_test.go | 36 | ||||
-rw-r--r-- | store/sql_post_store.go | 4 | ||||
-rw-r--r-- | store/sql_post_store_test.go | 8 | ||||
-rw-r--r-- | store/sql_store.go | 14 | ||||
-rw-r--r-- | store/sql_user_store.go | 4 | ||||
-rw-r--r-- | utils/config.go | 7 | ||||
-rw-r--r-- | web/react/components/user_settings_developer.jsx | 9 |
13 files changed, 86 insertions, 69 deletions
diff --git a/.gitignore b/.gitignore index e27362fdc..ebd5e4342 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ bundle*.js model/version.go model/version.go.bak - # Compiled Object files, Static and Dynamic libs (Shared Objects) *.o *.a @@ -4,6 +4,7 @@ GOPATH ?= $(GOPATH:) GOFLAGS ?= $(GOFLAGS:) BUILD_NUMBER ?= $(BUILD_NUMBER:) BUILD_DATE = $(shell date -u) +BUILD_HASH = $(shell git rev-parse HEAD) GO=$(GOPATH)/bin/godep go ESLINT=node_modules/eslint/bin/eslint.js @@ -52,6 +53,7 @@ travis: @sed -i'.bak' 's|_BUILD_NUMBER_|$(BUILD_NUMBER)|g' ./model/version.go @sed -i'.bak' 's|_BUILD_DATE_|$(BUILD_DATE)|g' ./model/version.go + @sed -i'.bak' 's|_BUILD_HASH_|$(BUILD_HASH)|g' ./model/version.go @$(GO) build $(GOFLAGS) ./... @$(GO) install $(GOFLAGS) ./... @@ -228,6 +230,7 @@ dist: install @sed -i'.bak' 's|_BUILD_NUMBER_|$(BUILD_NUMBER)|g' ./model/version.go @sed -i'.bak' 's|_BUILD_DATE_|$(BUILD_DATE)|g' ./model/version.go + @sed -i'.bak' 's|_BUILD_HASH_|$(BUILD_HASH)|g' ./model/version.go @$(GO) build $(GOFLAGS) -i ./... @$(GO) install $(GOFLAGS) ./... diff --git a/api/context.go b/api/context.go index f7dbeedee..02716bb33 100644 --- a/api/context.go +++ b/api/context.go @@ -125,7 +125,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { c.setSiteURL(protocol + "://" + r.Host) w.Header().Set(model.HEADER_REQUEST_ID, c.RequestId) - w.Header().Set(model.HEADER_VERSION_ID, fmt.Sprintf("%v.%v", model.GetFullVersion(), utils.CfgLastModified)) + w.Header().Set(model.HEADER_VERSION_ID, fmt.Sprintf("%v.%v", model.CurrentVersion, utils.CfgLastModified)) // Instruct the browser not to display us in an iframe for anti-clickjacking if !h.isApi { diff --git a/mattermost.go b/mattermost.go index b2b5f584b..f54bcf15f 100644 --- a/mattermost.go +++ b/mattermost.go @@ -43,7 +43,7 @@ func main() { } pwd, _ := os.Getwd() - l4g.Info("Current version is %v (%v/%v)", model.GetFullVersion(), model.BUILD_NUMBER, model.BUILD_DATE) + l4g.Info("Current version is %v (%v/%v/%v)", model.CurrentVersion, model.BuildNumber, model.BuildDate, model.BuildHash) l4g.Info("Current working directory is %v", pwd) l4g.Info("Loaded config file from %v", utils.FindConfigFile(flagConfigFile)) @@ -190,9 +190,10 @@ func cmdCreateUser() { func cmdVersion() { if flagCmdVersion { - fmt.Fprintln(os.Stderr, "Version: "+model.GetFullVersion()) - fmt.Fprintln(os.Stderr, "Build Number: "+model.BUILD_NUMBER) - fmt.Fprintln(os.Stderr, "Build Date: "+model.BUILD_DATE) + fmt.Fprintln(os.Stderr, "Version: "+model.CurrentVersion) + fmt.Fprintln(os.Stderr, "Build Number: "+model.BuildNumber) + fmt.Fprintln(os.Stderr, "Build Date: "+model.BuildDate) + fmt.Fprintln(os.Stderr, "Build Hash: "+model.BuildHash) os.Exit(0) } diff --git a/model/utils.go b/model/utils.go index ee94cafc3..e19cceba5 100644 --- a/model/utils.go +++ b/model/utils.go @@ -230,7 +230,7 @@ func IsValidAlphaNum(s string, allowUnderscores bool) bool { func Etag(parts ...interface{}) string { - etag := GetFullVersion() + etag := CurrentVersion for _, part := range parts { etag += fmt.Sprintf(".%v", part) diff --git a/model/version.go b/model/version.go index e3e6e14b9..8b5258ec1 100644 --- a/model/version.go +++ b/model/version.go @@ -4,23 +4,26 @@ package model import ( - "fmt" "strconv" "strings" ) -const ( - VERSION_MAJOR = 0 - VERSION_MINOR = 8 - VERSION_PATCH = 0 - BUILD_NUMBER = "_BUILD_NUMBER_" - BUILD_DATE = "_BUILD_DATE_" -) - -func GetFullVersion() string { - return fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH) +// This is a list of all the current viersions including any patches. +// It should be maitained in chronological order with most current +// release at the front of the list. +var versions = []string{ + "0.8.0", + "0.7.1", + "0.7.0", + "0.6.0", + "0.5.0", } +var CurrentVersion string = versions[0] +var BuildNumber = "developer" +var BuildDate = "unknown" +var BuildHash = "unknown" + func SplitVersion(version string) (int64, int64, int64) { parts := strings.Split(version, ".") @@ -43,32 +46,41 @@ func SplitVersion(version string) (int64, int64, int64) { return major, minor, patch } -func GetPreviousVersion(version string) (int64, int64) { - major, minor, _ := SplitVersion(version) +func GetPreviousVersion(currentVersion string) (int64, int64) { + currentIndex := -1 + currentMajor, currentMinor, _ := SplitVersion(currentVersion) - if minor == 0 { - major = major - 1 - minor = 9 - } else { - minor = minor - 1 + for index, version := range versions { + major, minor, _ := SplitVersion(version) + + if currentMajor == major && currentMinor == minor { + currentIndex = index + } + + if currentIndex >= 0 { + if currentMajor != major || currentMinor != minor { + return major, minor + } + } } - return major, minor + return 0, 0 } func IsCurrentVersion(versionToCheck string) bool { + currentMajor, currentMinor, _ := SplitVersion(CurrentVersion) toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) - if toCheckMajor == VERSION_MAJOR && toCheckMinor == VERSION_MINOR { + if toCheckMajor == currentMajor && toCheckMinor == currentMinor { return true } else { return false } } -func IsLastVersion(versionToCheck string) bool { +func IsPreviousVersion(versionToCheck string) bool { toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) - prevMajor, prevMinor := GetPreviousVersion(GetFullVersion()) + prevMajor, prevMinor := GetPreviousVersion(CurrentVersion) if toCheckMajor == prevMajor && toCheckMinor == prevMinor { return true diff --git a/model/version_test.go b/model/version_test.go index fb52d96a5..da40006be 100644 --- a/model/version_test.go +++ b/model/version_test.go @@ -8,9 +8,7 @@ import ( "testing" ) -func TestVersion(t *testing.T) { - GetFullVersion() - +func TestSplitVersion(t *testing.T) { major1, minor1, patch1 := SplitVersion("junk") if major1 != 0 || minor1 != 0 || patch1 != 0 { t.Fatal() @@ -35,38 +33,42 @@ func TestVersion(t *testing.T) { if major5 != 1 || minor5 != 2 || patch5 != 3 { t.Fatal() } +} - if IsLastVersion(GetFullVersion()) { - t.Fatal() +func TestGetPreviousVersion(t *testing.T) { + if major, minor := GetPreviousVersion("0.8.0"); major != 0 || minor != 7 { + t.Fatal(major, minor) } - if !IsLastVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR-1, VERSION_PATCH)) { - t.Fatal() + if major, minor := GetPreviousVersion("0.7.0"); major != 0 || minor != 6 { + t.Fatal(major, minor) } - // pacth should not affect current version check - if !IsLastVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR-1, VERSION_PATCH+1)) { - t.Fatal() + if major, minor := GetPreviousVersion("0.7.1"); major != 0 || minor != 6 { + t.Fatal(major, minor) } - if IsLastVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR+1, VERSION_PATCH)) { - t.Fatal() + if major, minor := GetPreviousVersion("0.7111.1"); major != 0 || minor != 0 { + t.Fatal(major, minor) } +} + +func TestIsCurrentVersion(t *testing.T) { + major, minor, patch := SplitVersion(CurrentVersion) - if !IsCurrentVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH)) { + if !IsCurrentVersion(CurrentVersion) { t.Fatal() } - // pacth should not affect current version check - if !IsCurrentVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH+1)) { + if !IsCurrentVersion(fmt.Sprintf("%v.%v.%v", major, minor, patch+100)) { t.Fatal() } - if IsCurrentVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR, VERSION_MINOR+1, VERSION_PATCH)) { + if IsCurrentVersion(fmt.Sprintf("%v.%v.%v", major, minor+1, patch)) { t.Fatal() } - if IsCurrentVersion(fmt.Sprintf("%v.%v.%v", VERSION_MAJOR+1, VERSION_MINOR, VERSION_PATCH)) { + if IsCurrentVersion(fmt.Sprintf("%v.%v.%v", major+1, minor, patch)) { t.Fatal() } } diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 50e1c3c33..21e8e9d00 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -196,9 +196,9 @@ func (s SqlPostStore) GetEtag(channelId string) StoreChannel { var et etagPosts err := s.GetReplica().SelectOne(&et, "SELECT Id, UpdateAt FROM Posts WHERE ChannelId = :ChannelId ORDER BY UpdateAt DESC LIMIT 1", map[string]interface{}{"ChannelId": channelId}) if err != nil { - result.Data = fmt.Sprintf("%v.0.%v", model.GetFullVersion(), model.GetMillis()) + result.Data = fmt.Sprintf("%v.0.%v", model.CurrentVersion, model.GetMillis()) } else { - result.Data = fmt.Sprintf("%v.%v.%v", model.GetFullVersion(), et.Id, et.UpdateAt) + result.Data = fmt.Sprintf("%v.%v.%v", model.CurrentVersion, et.Id, et.UpdateAt) } storeChannel <- result diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go index bec2ceb60..bc1cb2c2c 100644 --- a/store/sql_post_store_test.go +++ b/store/sql_post_store_test.go @@ -37,14 +37,14 @@ func TestPostStoreGet(t *testing.T) { o1.Message = "a" + model.NewId() + "b" etag1 := (<-store.Post().GetEtag(o1.ChannelId)).Data.(string) - if strings.Index(etag1, model.GetFullVersion()+".0.") != 0 { + if strings.Index(etag1, model.CurrentVersion+".0.") != 0 { t.Fatal("Invalid Etag") } o1 = (<-store.Post().Save(o1)).Data.(*model.Post) etag2 := (<-store.Post().GetEtag(o1.ChannelId)).Data.(string) - if strings.Index(etag2, model.GetFullVersion()+"."+o1.Id) != 0 { + if strings.Index(etag2, model.CurrentVersion+"."+o1.Id) != 0 { t.Fatal("Invalid Etag") } @@ -136,7 +136,7 @@ func TestPostStoreDelete(t *testing.T) { o1.Message = "a" + model.NewId() + "b" etag1 := (<-store.Post().GetEtag(o1.ChannelId)).Data.(string) - if strings.Index(etag1, model.GetFullVersion()+".0.") != 0 { + if strings.Index(etag1, model.CurrentVersion+".0.") != 0 { t.Fatal("Invalid Etag") } @@ -160,7 +160,7 @@ func TestPostStoreDelete(t *testing.T) { } etag2 := (<-store.Post().GetEtag(o1.ChannelId)).Data.(string) - if strings.Index(etag2, model.GetFullVersion()+"."+o1.Id) != 0 { + if strings.Index(etag2, model.CurrentVersion+"."+o1.Id) != 0 { t.Fatal("Invalid Etag") } } diff --git a/store/sql_store.go b/store/sql_store.go index 2e679b81a..3c41cb1fc 100644 --- a/store/sql_store.go +++ b/store/sql_store.go @@ -64,9 +64,9 @@ func NewSqlStore() Store { // 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 - if model.IsLastVersion(schemaVersion) { + if model.IsPreviousVersion(schemaVersion) { l4g.Warn("The database schema version of " + schemaVersion + " appears to be out of date") - l4g.Warn("Attempting to upgrade the database schema version to " + model.GetFullVersion()) + l4g.Warn("Attempting to upgrade the database schema version to " + model.CurrentVersion) } else { // If this is an 'upgrade needed' state but the user is attempting to skip a version then halt the world l4g.Critical("The database schema version of " + schemaVersion + " cannot be upgraded. You must not skip a version.") @@ -112,14 +112,14 @@ func NewSqlStore() Store { sqlStore.oauth.(*SqlOAuthStore).CreateIndexesIfNotExists() sqlStore.system.(*SqlSystemStore).CreateIndexesIfNotExists() - if model.IsLastVersion(schemaVersion) { - sqlStore.system.Update(&model.System{Name: "Version", Value: model.GetFullVersion()}) - l4g.Warn("The database schema has been upgraded to version " + model.GetFullVersion()) + if model.IsPreviousVersion(schemaVersion) { + sqlStore.system.Update(&model.System{Name: "Version", Value: model.CurrentVersion}) + l4g.Warn("The database schema has been upgraded to version " + model.CurrentVersion) } if schemaVersion == "" { - sqlStore.system.Save(&model.System{Name: "Version", Value: model.GetFullVersion()}) - l4g.Info("The database schema has been set to version " + model.GetFullVersion()) + sqlStore.system.Save(&model.System{Name: "Version", Value: model.CurrentVersion}) + l4g.Info("The database schema has been set to version " + model.CurrentVersion) } return sqlStore diff --git a/store/sql_user_store.go b/store/sql_user_store.go index 90e1343a8..778df367e 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -325,9 +325,9 @@ func (s SqlUserStore) GetEtagForProfiles(teamId string) StoreChannel { updateAt, err := s.GetReplica().SelectInt("SELECT UpdateAt FROM Users WHERE TeamId = :TeamId ORDER BY UpdateAt DESC LIMIT 1", map[string]interface{}{"TeamId": teamId}) if err != nil { - result.Data = fmt.Sprintf("%v.%v", model.GetFullVersion(), model.GetMillis()) + result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis()) } else { - result.Data = fmt.Sprintf("%v.%v", model.GetFullVersion(), updateAt) + result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, updateAt) } storeChannel <- result diff --git a/utils/config.go b/utils/config.go index eed627448..6fd3a9ca7 100644 --- a/utils/config.go +++ b/utils/config.go @@ -276,9 +276,10 @@ func getSanitizeOptions(c *Config) map[string]bool { func getClientProperties(c *Config) map[string]string { props := make(map[string]string) - props["Version"] = model.GetFullVersion() - props["BuildNumber"] = model.BUILD_NUMBER - props["BuildDate"] = model.BUILD_DATE + props["Version"] = model.CurrentVersion + props["BuildNumber"] = model.BuildNumber + props["BuildDate"] = model.BuildDate + props["BuildHash"] = model.BuildHash props["SiteName"] = c.ServiceSettings.SiteName props["ByPassEmail"] = strconv.FormatBool(c.EmailSettings.ByPassEmail) diff --git a/web/react/components/user_settings_developer.jsx b/web/react/components/user_settings_developer.jsx index 3e75e7ad8..8b443499a 100644 --- a/web/react/components/user_settings_developer.jsx +++ b/web/react/components/user_settings_developer.jsx @@ -83,11 +83,10 @@ export default class DeveloperTab extends React.Component { > <li className='col-sm-10 section-title'>{'Version'}</li> <li className='col-sm-7 section-describe'> - { - global.window.config.Version + ' (' + - global.window.config.BuildNumber + '/' + - global.window.config.BuildDate + ')' - } + {'Version: ' + global.window.config.Version}<br/> + {'Build Number: ' + global.window.config.BuildNumber}<br/> + {'Build Date: ' + global.window.config.BuildDate}<br/> + {'Build Hash: ' + global.window.config.BuildHash}<br/> </li> </ul> <div className='divider-dark'/> |