MCPcopy Create free account
hub / github.com/Melkeydev/govm / findInstalledVersion

Function findInstalledVersion

internal/cli/cli.go:153–209  ·  view source on GitHub ↗
(version string)

Source from the content-addressed store, hash-verified

151 return utils.GoVersion{}, fmt.Errorf("no version matching '%s' found", version)
152}
153func findInstalledVersion(version string) (utils.GoVersion, error) {
154 homeDir, err := os.UserHomeDir()
155 if err != nil {
156 return utils.GoVersion{}, fmt.Errorf("failed to get home directory: %v", err)
157 }
158 goVersionsDir := filepath.Join(homeDir, ".govm", "versions")
159 versionDir := filepath.Join(goVersionsDir, "go"+version)
160 if _, err := os.Stat(versionDir); err == nil {
161 return utils.GoVersion{
162 Version: version,
163 Path: versionDir,
164 Installed: true,
165 }, nil
166 }
167 entries, err := os.ReadDir(goVersionsDir)
168 if err != nil {
169 return utils.GoVersion{}, fmt.Errorf("failed to read versions directory: %v", err)
170 }
171 prefix := "go" + version + "."
172 var matchedVersion utils.GoVersion
173 found := false
174 for _, entry := range entries {
175 if entry.IsDir() && strings.HasPrefix(entry.Name(), prefix) {
176 versionPath := filepath.Join(goVersionsDir, entry.Name())
177 versionStr := strings.TrimPrefix(entry.Name(), "go")
178 if !found || compareVersions(versionStr, matchedVersion.Version) > 0 {
179 matchedVersion = utils.GoVersion{
180 Version: versionStr,
181 Path: versionPath,
182 Installed: true,
183 }
184 found = true
185 }
186 }
187 }
188 if !found && !strings.Contains(version, ".") {
189 prefix = "go" + version + "."
190 for _, entry := range entries {
191 if entry.IsDir() && strings.HasPrefix(entry.Name(), prefix) {
192 versionPath := filepath.Join(goVersionsDir, entry.Name())
193 versionStr := strings.TrimPrefix(entry.Name(), "go")
194 if !found || compareVersions(versionStr, matchedVersion.Version) > 0 {
195 matchedVersion = utils.GoVersion{
196 Version: versionStr,
197 Path: versionPath,
198 Installed: true,
199 }
200 found = true
201 }
202 }
203 }
204 }
205 if found {
206 return matchedVersion, nil
207 }
208 return utils.GoVersion{}, fmt.Errorf("no installed version matching '%s' found", version)
209}
210func compareVersions(v1, v2 string) int {

Callers 2

UseVersionFunction · 0.85
DeleteVersionFunction · 0.85

Calls 1

compareVersionsFunction · 0.85

Tested by

no test coverage detected