mehh
This commit is contained in:
parent
074ef32802
commit
bb704c4705
4
main.go
4
main.go
@ -1,8 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"train/cmd"
|
||||
)
|
||||
import "train/cmd"
|
||||
|
||||
func main() {
|
||||
cmd.Execute()
|
||||
|
4
pkg/cache/cache.go
vendored
4
pkg/cache/cache.go
vendored
@ -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 {
|
||||
|
@ -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{
|
||||
|
@ -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,21 +59,17 @@ 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 {
|
||||
@ -82,9 +78,7 @@ func unpackPackage(filePath, packageName string) error {
|
||||
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("неизвестный режим пакета")
|
||||
}
|
||||
|
||||
|
14
pkg/paths/paths.go
Normal file
14
pkg/paths/paths.go
Normal file
@ -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")
|
||||
}
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user