From c63435889a0b630c4a5653970c6fc141511450a1 Mon Sep 17 00:00:00 2001 From: Stephanie You Date: Mon, 11 Dec 2023 13:44:03 -0800 Subject: [PATCH 1/4] poorly formatted version doesnt error --- go/cmd/dolt/commands/version.go | 24 ++++++++++++++++++++++++ integration-tests/bats/no-repo.bats | 8 ++++++++ 2 files changed, 32 insertions(+) diff --git a/go/cmd/dolt/commands/version.go b/go/cmd/dolt/commands/version.go index 9eaf4b7818..3b07d11d00 100644 --- a/go/cmd/dolt/commands/version.go +++ b/go/cmd/dolt/commands/version.go @@ -155,6 +155,13 @@ func checkAndPrintVersionOutOfDateWarning(curVersion string, dEnv *env.DoltEnv) if verr != nil { return verr } + } else { + if !isVersionFormattedCorrectly(latestRelease) { + latestRelease, verr = getLatestDoltReleaseAndRecord(path, dEnv) + if verr != nil { + return verr + } + } } } else { latestRelease, verr = getLatestDoltReleaseAndRecord(path, dEnv) @@ -217,3 +224,20 @@ func isOutOfDate(curVersion, latestRelease string) (bool, errhand.VerboseError) return false, nil } + +// isVersionFormattedCorrectly checks if the given version string is formatted correctly, i.e. is of the form +// major.minor.patch where each part is an integer. +func isVersionFormattedCorrectly(version string) bool { + versionParts := strings.Split(version, ".") + if len(versionParts) != 3 { + return false + } + + for _, part := range versionParts { + if _, err := strconv.Atoi(part); err != nil { + return false + } + } + + return true +} diff --git a/integration-tests/bats/no-repo.bats b/integration-tests/bats/no-repo.bats index ad3fdf0ee8..9d25c6b0b8 100755 --- a/integration-tests/bats/no-repo.bats +++ b/integration-tests/bats/no-repo.bats @@ -156,6 +156,14 @@ teardown() { [[ ! "$output" =~ "Warning: you are on an old version of Dolt" ]] || false } +@test "no-repo: dolt version with bad version_check.txt does not print error" { + echo "bad version" > $DOLT_ROOT_PATH/.dolt/version_check.txt + + run dolt version + [ "$status" -eq 0 ] + [ "${#lines[@]}" -eq 1 ] +} + # Tests for dolt commands outside of a dolt repository NOT_VALID_REPO_ERROR="The current directory is not a valid dolt repository." @test "no-repo: dolt status outside of a dolt repository" { From e37aa07463eda72328a11ae0fd1864e65a63f8e4 Mon Sep 17 00:00:00 2001 From: Stephanie You Date: Mon, 11 Dec 2023 15:09:30 -0800 Subject: [PATCH 2/4] strip newline characters from stored version --- go/cmd/dolt/commands/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/cmd/dolt/commands/version.go b/go/cmd/dolt/commands/version.go index 3b07d11d00..f4abff6d61 100644 --- a/go/cmd/dolt/commands/version.go +++ b/go/cmd/dolt/commands/version.go @@ -148,7 +148,7 @@ func checkAndPrintVersionOutOfDateWarning(curVersion string, dEnv *env.DoltEnv) return errhand.BuildDError("error: failed to read version check file").AddCause(err).Build() } - latestRelease = string(vCheck) + latestRelease = strings.ReplaceAll(string(vCheck), "\n", "") lastCheckDate, _ := dEnv.FS.LastModified(path) if lastCheckDate.Before(time.Now().AddDate(0, 0, -7)) { latestRelease, verr = getLatestDoltReleaseAndRecord(path, dEnv) From 678da61ae6b3439fb2f0a57c7092ad05a3f310ea Mon Sep 17 00:00:00 2001 From: Stephanie You Date: Mon, 11 Dec 2023 16:03:43 -0800 Subject: [PATCH 3/4] better bats test for bad version error --- integration-tests/bats/no-repo.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/bats/no-repo.bats b/integration-tests/bats/no-repo.bats index 9d25c6b0b8..10126a618a 100755 --- a/integration-tests/bats/no-repo.bats +++ b/integration-tests/bats/no-repo.bats @@ -161,7 +161,7 @@ teardown() { run dolt version [ "$status" -eq 0 ] - [ "${#lines[@]}" -eq 1 ] + [[ ! "$output" =~ "error" ]] || false } # Tests for dolt commands outside of a dolt repository From ee4490df38cd8c7991262e3d9030ecf92a1e53a1 Mon Sep 17 00:00:00 2001 From: Stephanie You Date: Mon, 11 Dec 2023 17:43:36 -0800 Subject: [PATCH 4/4] change output check for bad version --- integration-tests/bats/no-repo.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/bats/no-repo.bats b/integration-tests/bats/no-repo.bats index 10126a618a..ed88cb5cc5 100755 --- a/integration-tests/bats/no-repo.bats +++ b/integration-tests/bats/no-repo.bats @@ -161,7 +161,7 @@ teardown() { run dolt version [ "$status" -eq 0 ] - [[ ! "$output" =~ "error" ]] || false + [[ ! "$output" =~ "failed to parse version number" ]] || false } # Tests for dolt commands outside of a dolt repository