From bb704c4705e8ceadddb24d030300a80f9a04683d Mon Sep 17 00:00:00 2001 From: wheelchairy Date: Tue, 4 Feb 2025 18:45:52 +0300 Subject: [PATCH] mehh --- main.go | 6 ++---- pkg/cache/cache.go | 4 +++- pkg/config/config.go | 16 ++++++++++++++-- pkg/installer/installer.go | 29 +++++++---------------------- pkg/paths/paths.go | 14 ++++++++++++++ pkg/version/version.go | 5 +++-- 6 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 pkg/paths/paths.go diff --git a/main.go b/main.go index 6ec3929..e24103c 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,7 @@ package main -import ( - "train/cmd" -) +import "train/cmd" func main() { cmd.Execute() -} +} \ No newline at end of file diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index 8d08b65..ad7aa2e 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -6,9 +6,11 @@ import ( "net/http" "os" "path/filepath" + + "train/pkg/paths" ) -var cacheDir = "./cache" +var cacheDir = filepath.Join(paths.BaseDir(), "cache") func GetCachedFile(url string) (string, error) { if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil { diff --git a/pkg/config/config.go b/pkg/config/config.go index fb13e50..3a1b231 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -5,15 +5,27 @@ import ( "errors" "io/ioutil" "os" + "path/filepath" + + "train/pkg/paths" ) +var configFile string + +func init() { + railsConfig := filepath.Join(paths.BaseDir(), "config", "config.json") + if _, err := os.Stat(railsConfig); err == nil { + configFile = railsConfig + } else { + configFile = "./config.json" + } +} + type Config struct { Repositories []string `json:"repositories"` Packages map[string]string `json:"packages"` } -var configFile = "./config.json" - func LoadConfig() (*Config, error) { if _, err := os.Stat(configFile); os.IsNotExist(err) { cfg := &Config{ diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index 4d27857..6d8a208 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -17,13 +17,14 @@ import ( "runtime" "strings" +// "train/pkg/config" "train/pkg/manifest" + "train/pkg/paths" ) var ( - binInstallDir = "./installed_bins" // for binary - buildInstallDir = "./installed_packages" // for build" - installDir = buildInstallDir // for func + binInstallDir = filepath.Join(paths.BaseDir(), "installed_bins") + buildInstallDir = filepath.Join(paths.BaseDir(), "installed_packages") ) func computeChecksum(filePath string) (string, error) { @@ -41,7 +42,6 @@ func downloadFile(url string) (string, error) { return "", err } defer resp.Body.Close() - tmpFile, err := ioutil.TempFile("", "package_") if err != nil { return "", err @@ -59,32 +59,26 @@ func unpackPackage(filePath, packageName string) error { if err := os.MkdirAll(destDir, os.ModePerm); err != nil { return err } - f, err := os.Open(filePath) if err != nil { return err } defer f.Close() - gzr, err := gzip.NewReader(f) if err != nil { return err } defer gzr.Close() - tr := tar.NewReader(gzr) - for { header, err := tr.Next() if err == io.EOF { - break + break } if err != nil { return err } - target := filepath.Join(destDir, header.Name) - switch header.Typeflag { case tar.TypeDir: if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil { @@ -100,8 +94,6 @@ func unpackPackage(filePath, packageName string) error { return err } outFile.Close() - default: - } } return nil @@ -133,6 +125,7 @@ func saveInstalledPackage(name string, m *manifest.Manifest) error { } func removeInstalledPackageRecord(name string) { + // Здесь можно удалить запись из базы или файла } func InstallPackage(name string) error { @@ -140,7 +133,6 @@ func InstallPackage(name string) error { if err != nil { return fmt.Errorf("не удалось получить манифест: %w", err) } - if strings.ToLower(m.Mode) == "bin" { platformKey := runtime.GOOS + "_" + runtime.GOARCH binaryURL, ok := m.Binaries[platformKey] @@ -152,7 +144,6 @@ func InstallPackage(name string) error { return fmt.Errorf("не удалось скачать бинарник: %w", err) } defer os.Remove(packageFile) - checksum, err := computeChecksum(packageFile) if err != nil { return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err) @@ -160,7 +151,6 @@ func InstallPackage(name string) error { if checksum != m.Checksum { return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum) } - if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil { return err } @@ -180,7 +170,6 @@ func InstallPackage(name string) error { return fmt.Errorf("не удалось скачать пакет: %w", err) } defer os.Remove(packageFile) - checksum, err := computeChecksum(packageFile) if err != nil { return fmt.Errorf("не удалось вычислить контрольную сумму: %w", err) @@ -188,23 +177,19 @@ func InstallPackage(name string) error { if checksum != m.Checksum { return fmt.Errorf("контрольная сумма не совпадает, ожидалось %s, получено %s", m.Checksum, checksum) } - if err := unpackPackage(packageFile, name); err != nil { return fmt.Errorf("не удалось распаковать пакет: %w", err) } - if len(m.Build) > 0 { if err := executeBuildCommands(m.Build, name); err != nil { return fmt.Errorf("ошибка выполнения команд сборки: %w", err) } } - if err := saveInstalledPackage(name, m); err != nil { return fmt.Errorf("не удалось сохранить информацию об установленном пакете: %w", err) } return nil } - return errors.New("неизвестный режим пакета") } @@ -251,4 +236,4 @@ func GetPackageInfo(name string) (string, error) { return "", err } return string(data), nil -} +} \ No newline at end of file diff --git a/pkg/paths/paths.go b/pkg/paths/paths.go new file mode 100644 index 0000000..56c3fe7 --- /dev/null +++ b/pkg/paths/paths.go @@ -0,0 +1,14 @@ +package paths + +import ( + "os" + "path/filepath" +) + +func BaseDir() string { + home, err := os.UserHomeDir() + if err != nil { + return "." + } + return filepath.Join(home, ".rails") +} \ No newline at end of file diff --git a/pkg/version/version.go b/pkg/version/version.go index 22d8143..fa6a01e 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -2,10 +2,11 @@ package version import ( "encoding/json" - "fmt" "io/ioutil" "os" "path/filepath" + + "train/pkg/paths" ) type VersionInfo struct { @@ -13,7 +14,7 @@ type VersionInfo struct { Version string `json:"version"` } -var versionDir = "./versions" +var versionDir = filepath.Join(paths.BaseDir(), "versions") func SaveVersionInfo(pkgName, ver string) error { if err := os.MkdirAll(versionDir, os.ModePerm); err != nil {