From 8843986f7fa63966a90c23a4fa94ae89e1142e0e Mon Sep 17 00:00:00 2001 From: Tristan Isham Date: Tue, 30 Jan 2024 18:35:33 -0500 Subject: [PATCH 1/4] unstable-vmu --- README.md | 4 ++-- cli/version.go | 16 ++++++++-------- help.txt | 4 ++-- main.go | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index ab08389..5266957 100644 --- a/README.md +++ b/README.md @@ -202,9 +202,9 @@ zvm help ``` ### BETA FLAGS: (Might not work as expected) ```sh --vmu # Changes the version map url (good if you host your own Zig distrobution server). +-unstable-vmu # Changes the version map url (good if you host your own Zig distrobution server). # ZVM expects properly formatted URLs with the included protocol. # URLs that don't serve workable JSON files will break ZVM. If you ever want to reset - # your version map url, just run -vmu default. + # your version map url, just run -unstable-vmu default. # -vmu "https://my-cdn.local/zig.json" ``` diff --git a/cli/version.go b/cli/version.go index 211b1f7..625c5ce 100644 --- a/cli/version.go +++ b/cli/version.go @@ -2,7 +2,7 @@ package cli import ( "encoding/json" - "fmt" + // "fmt" "io" "net/http" "os" @@ -10,7 +10,7 @@ import ( "zvm/cli/meta" "github.com/charmbracelet/log" - "github.com/tristanisham/clr" + // "github.com/tristanisham/clr" ) func (z *ZVM) fetchVersionMap() (zigVersionMap, error) { @@ -25,18 +25,18 @@ func (z *ZVM) fetchVersionMap() (zigVersionMap, error) { defaultVersionMapUrl := "https://ziglang.org/download/index.json" versionMapUrl := z.Settings.VersionMapUrl - + log.Debug("setting's VMU", "url", versionMapUrl) if len(versionMapUrl) == 0 { versionMapUrl = defaultVersionMapUrl } - // Limited warning until I get to properly test this code. - if versionMapUrl != defaultVersionMapUrl { - fmt.Println("This command is currently in beta and may break your install.") - fmt.Printf("To reset your version map, run %s", clr.Green("zvm -vmu default")) - } + // // Limited warning until I get to properly test this code. + // if versionMapUrl != defaultVersionMapUrl { + // fmt.Println("This command is currently in beta and may break your install.") + // fmt.Printf("To reset your version map, run %s", clr.Green("zvm -unstable-vmu default")) + // } req, err := http.NewRequest("GET", versionMapUrl, nil) if err != nil { diff --git a/help.txt b/help.txt index d90cf21..0439bcc 100644 --- a/help.txt +++ b/help.txt @@ -34,8 +34,8 @@ help BETA FLAGS: (Might not work as expected) --vmu | Changes the version map url (Good if you host your own Zig distrobution server) +-unstable-vmu | Changes the version map url (Good if you host your own Zig distrobution server) URLs that don't serve workable JSON files will break ZVM. If you ever want to reset - your version map url, just run -vmu default. + your version map url, just run -unstable-vmu default. Looking for more help? https://github.com/tristanisham/zvm diff --git a/main.go b/main.go index ecea4ba..424fc0e 100644 --- a/main.go +++ b/main.go @@ -43,12 +43,12 @@ func main() { lsRemote := lsFlagSet.Bool("all", false, "List all available versions of Zig to install") // Global config - sVersionMapUrl := flag.String("vmu", "https://ziglang.org/download/index.json", "Set ZVM's version map URL for custom Zig distribution servers") + sVersionMapUrl := flag.String("unstable-vmu", "https://ziglang.org/download/index.json", "Set ZVM's version map URL for custom Zig distribution servers") sColorToggle := flag.Bool("color", true, "Turn on or off ZVM's color output") flag.Parse() if sVersionMapUrl != nil { - log.Warn("this is a beta flag, and may not behave as expected.") + log.Warn("this is a beta flag, and may not behave as expected.\nRun --unstable-vmu default to reset your version map.") if *sVersionMapUrl == "default" { if err := zvm.Settings.ResetVersionMap(); err != nil { log.Fatal(err) From 82e94824765970a39bdbcd02562d93c2fc7263e2 Mon Sep 17 00:00:00 2001 From: Tristan Isham Date: Tue, 30 Jan 2024 18:47:29 -0500 Subject: [PATCH 2/4] updated clean --- cli/clean.go | 12 ++++-------- cli/config.go | 12 ++++++------ cli/install.go | 38 +++++++++++++++++++------------------- cli/ls.go | 2 +- cli/uninstall.go | 2 +- cli/upgrade.go | 22 ++++++++++++++-------- cli/use.go | 6 +++--- cli/version.go | 2 +- main.go | 5 +++-- 9 files changed, 52 insertions(+), 49 deletions(-) diff --git a/cli/clean.go b/cli/clean.go index e677a52..3519f11 100644 --- a/cli/clean.go +++ b/cli/clean.go @@ -3,22 +3,18 @@ package cli import ( "os" "path/filepath" - "strings" ) func (z *ZVM) Clean() error { - dir, err := os.ReadDir(z.zvmBaseDir) + dir, err := os.ReadDir(z.baseDir) if err != nil { return err } for _, entry := range dir { - if strings.Contains(entry.Name(), "bin") { - continue - } - - if filepath.Ext(entry.Name()) == ".zip" || filepath.Ext(entry.Name()) == ".xz" { - if err := os.Remove(filepath.Join(z.zvmBaseDir, entry.Name())); err != nil { + + if filepath.Ext(entry.Name()) == ".zip" || filepath.Ext(entry.Name()) == ".xz" || filepath.Ext(entry.Name()) == ".tar" { + if err := os.Remove(filepath.Join(z.baseDir, entry.Name())); err != nil { return err } } diff --git a/cli/config.go b/cli/config.go index c899a2e..4ac4824 100644 --- a/cli/config.go +++ b/cli/config.go @@ -30,13 +30,13 @@ func Initialize() *ZVM { } zvm := &ZVM{ - zvmBaseDir: zvm_path, + baseDir: zvm_path, } if err := zvm.loadSettings(); err != nil { if errors.Is(err, ErrNoSettings) { zvm.Settings = Settings{ - UseColor: true, + UseColor: true, VersionMapUrl: "https://ziglang.org/download/index.json", } @@ -56,8 +56,8 @@ func Initialize() *ZVM { } type ZVM struct { - zvmBaseDir string - Settings Settings + baseDir string + Settings Settings } // A representaiton of the offical json schema for Zig versions @@ -89,10 +89,10 @@ type ZigOnlVersion = map[string][]map[string]string // } func (z ZVM) getVersion(version string) error { - if _, err := os.Stat(filepath.Join(z.zvmBaseDir, version)); err != nil { + if _, err := os.Stat(filepath.Join(z.baseDir, version)); err != nil { return err } - targetZig := strings.TrimSpace(filepath.Join(z.zvmBaseDir, version, "zig")) + targetZig := strings.TrimSpace(filepath.Join(z.baseDir, version, "zig")) cmd := exec.Command(targetZig, "version") var zigVersion strings.Builder cmd.Stdout = &zigVersion diff --git a/cli/install.go b/cli/install.go index 4bd9d25..8bc8c61 100644 --- a/cli/install.go +++ b/cli/install.go @@ -26,7 +26,7 @@ import ( func (z *ZVM) Install(version string) error { - os.Mkdir(z.zvmBaseDir, 0755) + os.Mkdir(z.baseDir, 0755) rawVersionStructure, err := z.fetchVersionMap() if err != nil { return err @@ -68,7 +68,7 @@ func (z *ZVM) Install(version string) error { pathEnding = "*.tar.xz" } - tempDir, err := os.CreateTemp(z.zvmBaseDir, pathEnding) + tempDir, err := os.CreateTemp(z.baseDir, pathEnding) if err != nil { return err } @@ -121,7 +121,7 @@ func (z *ZVM) Install(version string) error { // installedVersionPath := filepath.Join(z.zvmBaseDir, version) fmt.Println("Extracting bundle...") - if err := ExtractBundle(tempDir.Name(), z.zvmBaseDir); err != nil { + if err := ExtractBundle(tempDir.Name(), z.baseDir); err != nil { log.Fatal(err) } var tarName string @@ -148,8 +148,8 @@ func (z *ZVM) Install(version string) error { if wasZigOnl { - untarredPath := filepath.Join(z.zvmBaseDir, fmt.Sprintf("zig-%s-%s-%s", zigOS, zigArch, version)) - newPath := filepath.Join(z.zvmBaseDir, tarName) + untarredPath := filepath.Join(z.baseDir, fmt.Sprintf("zig-%s-%s-%s", zigOS, zigArch, version)) + newPath := filepath.Join(z.baseDir, tarName) if _, err := os.Stat(untarredPath); err == nil { if os.Stat(newPath); err == nil { @@ -167,15 +167,15 @@ func (z *ZVM) Install(version string) error { } } else { - if err := os.Rename(filepath.Join(z.zvmBaseDir, tarName), filepath.Join(z.zvmBaseDir, version)); err != nil { - if _, err := os.Stat(filepath.Join(z.zvmBaseDir, version)); err == nil { + if err := os.Rename(filepath.Join(z.baseDir, tarName), filepath.Join(z.baseDir, version)); err != nil { + if _, err := os.Stat(filepath.Join(z.baseDir, version)); err == nil { // Room here to make the backup file. - log.Debug("removing", "path", filepath.Join(z.zvmBaseDir, version)) - if err := os.RemoveAll(filepath.Join(z.zvmBaseDir, version)); err != nil { + log.Debug("removing", "path", filepath.Join(z.baseDir, version)) + if err := os.RemoveAll(filepath.Join(z.baseDir, version)); err != nil { log.Fatal(err) } else { - oldName := filepath.Join(z.zvmBaseDir, tarName) - newName := filepath.Join(z.zvmBaseDir, version) + oldName := filepath.Join(z.baseDir, tarName) + newName := filepath.Join(z.baseDir, version) log.Debug("renaming", "old", oldName, "new", newName, "identical", oldName == newName) if oldName != newName { if err := os.Rename(oldName, newName); err != nil { @@ -189,7 +189,7 @@ func (z *ZVM) Install(version string) error { } // This removes the extra download - if err := os.RemoveAll(filepath.Join(z.zvmBaseDir, tarName)); err != nil { + if err := os.RemoveAll(filepath.Join(z.baseDir, tarName)); err != nil { log.Warn(err) } } @@ -293,7 +293,7 @@ func (z *ZVM) InstallZls(version string) error { fmt.Println("Finding ZLS executable...") // make sure dir exists - installDir := filepath.Join(z.zvmBaseDir, version) + installDir := filepath.Join(z.baseDir, version) err := os.MkdirAll(installDir, 0755) if err != nil { return err @@ -340,7 +340,7 @@ func (z *ZVM) InstallZls(version string) error { "Downloading ZLS", ) - versionPath := filepath.Join(z.zvmBaseDir, version) + versionPath := filepath.Join(z.baseDir, version) binaryLocation := filepath.Join(versionPath, filename) if !shouldUnzip { @@ -361,7 +361,7 @@ func (z *ZVM) InstallZls(version string) error { pathEnding = "*.tar.xz" } - tempDir, err := os.CreateTemp(z.zvmBaseDir, pathEnding) + tempDir, err := os.CreateTemp(z.baseDir, pathEnding) if err != nil { return err } @@ -374,7 +374,7 @@ func (z *ZVM) InstallZls(version string) error { } fmt.Println("Extracting ZLS...") - if err := ExtractBundle(tempDir.Name(), filepath.Join(z.zvmBaseDir, version)); err != nil { + if err := ExtractBundle(tempDir.Name(), filepath.Join(z.baseDir, version)); err != nil { log.Fatal(err) } if err := os.Rename(filepath.Join(versionPath, "bin", filename), filepath.Join(versionPath, filename)); err != nil { @@ -392,15 +392,15 @@ func (z *ZVM) InstallZls(version string) error { } func (z *ZVM) createSymlink(version string) { - if _, err := os.Lstat(filepath.Join(z.zvmBaseDir, "bin")); err == nil { + if _, err := os.Lstat(filepath.Join(z.baseDir, "bin")); err == nil { fmt.Println("Removing old symlink") - if err := os.RemoveAll(filepath.Join(z.zvmBaseDir, "bin")); err != nil { + if err := os.RemoveAll(filepath.Join(z.baseDir, "bin")); err != nil { log.Fatal("could not remove bin", err) } } - if err := os.Symlink(filepath.Join(z.zvmBaseDir, version), filepath.Join(z.zvmBaseDir, "bin")); err != nil { + if err := os.Symlink(filepath.Join(z.baseDir, version), filepath.Join(z.baseDir, "bin")); err != nil { log.Fatal(err) } } diff --git a/cli/ls.go b/cli/ls.go index 92932ee..c4570e4 100644 --- a/cli/ls.go +++ b/cli/ls.go @@ -26,7 +26,7 @@ func (z *ZVM) ListVersions() error { } version := zigVersion.String() - dir, err := os.ReadDir(z.zvmBaseDir) + dir, err := os.ReadDir(z.baseDir) if err != nil { return err } diff --git a/cli/uninstall.go b/cli/uninstall.go index a0fe891..aad1092 100644 --- a/cli/uninstall.go +++ b/cli/uninstall.go @@ -7,7 +7,7 @@ import ( ) func (z *ZVM) Uninstall(ver string) error { - version := filepath.Join(z.zvmBaseDir, ver) + version := filepath.Join(z.baseDir, ver) if _, err := os.Stat(version); err == nil { if err := os.RemoveAll(version); err != nil { diff --git a/cli/upgrade.go b/cli/upgrade.go index 1c3ab82..d1409a2 100644 --- a/cli/upgrade.go +++ b/cli/upgrade.go @@ -7,9 +7,11 @@ import ( "io" "net/http" "os" + // "os/user" "path/filepath" "runtime" + // "syscall" "time" "zvm/cli/meta" @@ -60,11 +62,13 @@ func (z *ZVM) Upgrade() error { } defer resp.Body.Close() - tempDownload, err := os.CreateTemp("", fmt.Sprintf("*.%s", archive)) + tempDownload, err := os.CreateTemp(z.baseDir, fmt.Sprintf("*.%s", archive)) if err != nil { return err } defer tempDownload.Close() + // log.Debug("temp name", "path", tempDownload.Name()) + defer os.Remove(tempDownload.Name()) log.Debug("tempDir", "name", tempDownload.Name()) pbar := progressbar.DefaultBytes( @@ -89,10 +93,11 @@ func (z *ZVM) Upgrade() error { log.Debug("zvmPath", "path", zvmPath) - newTemp, err := os.MkdirTemp("", "zvm-upgrade-*") + newTemp, err := os.MkdirTemp(z.baseDir, "zvm-upgrade-*") if err != nil { return errors.Join(ErrFailedUpgrade, err) } + defer os.RemoveAll(newTemp) if err := untar(tempDownload.Name(), newTemp); err != nil { log.Error(err) @@ -107,6 +112,10 @@ func (z *ZVM) Upgrade() error { return errors.Join(ErrFailedUpgrade, err) } + if err := z.Clean(); err != nil { + log.Warn("ZVM failed to clean up after itself.") + } + return nil } @@ -115,19 +124,19 @@ func (z ZVM) getInstallDir() (string, error) { if !ok { this, err := os.Executable() if err != nil { - return filepath.Join(z.zvmBaseDir, "self"), nil + return filepath.Join(z.baseDir, "self"), nil } itIsASymlink, err := isSymlink(this) if err != nil { - return filepath.Join(z.zvmBaseDir, "self"), nil + return filepath.Join(z.baseDir, "self"), nil } var finalPath string if !itIsASymlink { finalPath, err = resolveSymlink(this) if err != nil { - return filepath.Join(z.zvmBaseDir, "self"), nil + return filepath.Join(z.baseDir, "self"), nil } } else { finalPath = this @@ -214,9 +223,6 @@ func isSymlink(path string) (bool, error) { return fileInfo.Mode()&os.ModeSymlink != 0, nil } - - - func CanIUpgrade() (bool, string, error) { release, err := getLatestGitHubRelease("tristanisham", "zvm") if err != nil { diff --git a/cli/use.go b/cli/use.go index 4c36b4d..f71e9a3 100644 --- a/cli/use.go +++ b/cli/use.go @@ -30,12 +30,12 @@ func (z *ZVM) Use(ver string) error { } func (z *ZVM) setBin(ver string) error { - version_path := filepath.Join(z.zvmBaseDir, ver) - if err := os.Remove(filepath.Join(z.zvmBaseDir, "bin")); err != nil { + version_path := filepath.Join(z.baseDir, ver) + if err := os.Remove(filepath.Join(z.baseDir, "bin")); err != nil { log.Warn(err) } - if err := os.Symlink(version_path, filepath.Join(z.zvmBaseDir, "bin")); err != nil { + if err := os.Symlink(version_path, filepath.Join(z.baseDir, "bin")); err != nil { return err } diff --git a/cli/version.go b/cli/version.go index 625c5ce..6b6cea3 100644 --- a/cli/version.go +++ b/cli/version.go @@ -56,7 +56,7 @@ func (z *ZVM) fetchVersionMap() (zigVersionMap, error) { return nil, err } - if err := os.WriteFile(filepath.Join(z.zvmBaseDir, "versions.json"), versions, 0755); err != nil { + if err := os.WriteFile(filepath.Join(z.baseDir, "versions.json"), versions, 0755); err != nil { return nil, err } diff --git a/main.go b/main.go index 424fc0e..09a5925 100644 --- a/main.go +++ b/main.go @@ -43,17 +43,18 @@ func main() { lsRemote := lsFlagSet.Bool("all", false, "List all available versions of Zig to install") // Global config - sVersionMapUrl := flag.String("unstable-vmu", "https://ziglang.org/download/index.json", "Set ZVM's version map URL for custom Zig distribution servers") + sVersionMapUrl := flag.String("unstable-vmu", "default", "Set ZVM's version map URL for custom Zig distribution servers") sColorToggle := flag.Bool("color", true, "Turn on or off ZVM's color output") flag.Parse() if sVersionMapUrl != nil { - log.Warn("this is a beta flag, and may not behave as expected.\nRun --unstable-vmu default to reset your version map.") if *sVersionMapUrl == "default" { if err := zvm.Settings.ResetVersionMap(); err != nil { log.Fatal(err) } } else { + log.Warn("this is a beta flag, and may not behave as expected.\nRun --unstable-vmu default to reset your version map.") + if err := zvm.Settings.SetVersionMapUrl(*sVersionMapUrl); err != nil { log.Fatal(err) } From b232f59d387883e3f9ac7870d740cefe4fd734e6 Mon Sep 17 00:00:00 2001 From: Tristan Isham Date: Tue, 30 Jan 2024 22:49:13 -0500 Subject: [PATCH 3/4] hid vmu for release --- README.md | 9 +-------- help.txt | 5 ----- main.go | 26 +++++++++++++------------- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 5266957..c38ff61 100644 --- a/README.md +++ b/README.md @@ -200,11 +200,4 @@ zvm help ```sh -color # Turn ANSI color printing on or off for ZVM's output, i.e. -color=true ``` -### BETA FLAGS: (Might not work as expected) -```sh --unstable-vmu # Changes the version map url (good if you host your own Zig distrobution server). - # ZVM expects properly formatted URLs with the included protocol. - # URLs that don't serve workable JSON files will break ZVM. If you ever want to reset - # your version map url, just run -unstable-vmu default. - # -vmu "https://my-cdn.local/zig.json" -``` + diff --git a/help.txt b/help.txt index 0439bcc..ad23235 100644 --- a/help.txt +++ b/help.txt @@ -32,10 +32,5 @@ help ------------- Flags ----------------- -color= | Turn color printing on or off for ZVM's output -BETA FLAGS: (Might not work as expected) - --unstable-vmu | Changes the version map url (Good if you host your own Zig distrobution server) - URLs that don't serve workable JSON files will break ZVM. If you ever want to reset - your version map url, just run -unstable-vmu default. Looking for more help? https://github.com/tristanisham/zvm diff --git a/main.go b/main.go index 09a5925..22a8366 100644 --- a/main.go +++ b/main.go @@ -43,24 +43,24 @@ func main() { lsRemote := lsFlagSet.Bool("all", false, "List all available versions of Zig to install") // Global config - sVersionMapUrl := flag.String("unstable-vmu", "default", "Set ZVM's version map URL for custom Zig distribution servers") + // sVersionMapUrl := flag.String("unstable-vmu", "default", "Set ZVM's version map URL for custom Zig distribution servers") sColorToggle := flag.Bool("color", true, "Turn on or off ZVM's color output") flag.Parse() - if sVersionMapUrl != nil { - if *sVersionMapUrl == "default" { - if err := zvm.Settings.ResetVersionMap(); err != nil { - log.Fatal(err) - } - } else { - log.Warn("this is a beta flag, and may not behave as expected.\nRun --unstable-vmu default to reset your version map.") + // if sVersionMapUrl != nil { + // if *sVersionMapUrl == "default" { + // if err := zvm.Settings.ResetVersionMap(); err != nil { + // log.Fatal(err) + // } + // } else { + // log.Warn("this is a beta flag, and may not behave as expected.\nRun --unstable-vmu default to reset your version map.") - if err := zvm.Settings.SetVersionMapUrl(*sVersionMapUrl); err != nil { - log.Fatal(err) - } - } + // if err := zvm.Settings.SetVersionMapUrl(*sVersionMapUrl); err != nil { + // log.Fatal(err) + // } + // } - } + // } if sColorToggle != nil { if *sColorToggle != zvm.Settings.UseColor { From e3fe7d470564a54260e8dca0214a511339c822b3 Mon Sep 17 00:00:00 2001 From: Tristan Isham Date: Wed, 31 Jan 2024 00:59:36 -0500 Subject: [PATCH 4/4] accurate copyright --- help.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/help.txt b/help.txt index ad23235..06ec689 100644 --- a/help.txt +++ b/help.txt @@ -1,5 +1,5 @@ zvm (Zig Version Manager) {{.Version}} -© 2023-present Tristan Isham +© 2022-present Tristan Isham -------------------------------- install, i [flags]