Compare commits
No commits in common. "a606043450f4e183efd9b9b20dd3abd19e9a7219" and "aaab254cc91088b4a96265ef87daa7cf23188d58" have entirely different histories.
a606043450
...
aaab254cc9
@ -56,7 +56,8 @@ func downloadFile(url string) (string, error) {
|
||||
|
||||
func unpackPackage(filePath, packageName string) error {
|
||||
destDir := filepath.Join(buildInstallDir, packageName)
|
||||
if err := os.MkdirAll(destDir, os.ModePerm); err != nil {
|
||||
err := os.MkdirAll(destDir, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
f, err := os.Open(filePath)
|
||||
@ -81,7 +82,8 @@ func unpackPackage(filePath, packageName string) error {
|
||||
target := filepath.Join(destDir, header.Name)
|
||||
switch header.Typeflag {
|
||||
case tar.TypeDir:
|
||||
if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil {
|
||||
err := os.MkdirAll(target, os.FileMode(header.Mode))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case tar.TypeReg:
|
||||
@ -89,7 +91,8 @@ func unpackPackage(filePath, packageName string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := io.Copy(outFile, tr); err != nil {
|
||||
_, err = io.Copy(outFile, tr)
|
||||
if err != nil {
|
||||
outFile.Close()
|
||||
return err
|
||||
}
|
||||
@ -114,7 +117,8 @@ func executeBuildCommands(commands []string, packageName string) error {
|
||||
|
||||
func saveInstalledPackage(name string, m *manifest.Manifest) error {
|
||||
packagePath := filepath.Join(buildInstallDir, name)
|
||||
if err := os.MkdirAll(packagePath, os.ModePerm); err != nil {
|
||||
err := os.MkdirAll(packagePath, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
jsonData, err := json.MarshalIndent(m, "", " ")
|
||||
@ -147,7 +151,8 @@ func InstallPackage(name string) error {
|
||||
if computedChecksum != binaryInfo.Checksum {
|
||||
return fmt.Errorf("checksum mismatch: expected %s, got %s", binaryInfo.Checksum, computedChecksum)
|
||||
}
|
||||
if err := os.MkdirAll(binInstallDir, os.ModePerm); err != nil {
|
||||
err = os.MkdirAll(binInstallDir, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
destPath := filepath.Join(binInstallDir, m.Name)
|
||||
@ -155,7 +160,8 @@ func InstallPackage(name string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := ioutil.WriteFile(destPath, data, 0755); err != nil {
|
||||
err = ioutil.WriteFile(destPath, data, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Binary package %s installed in %s\n", m.Name, destPath)
|
||||
@ -173,17 +179,38 @@ func InstallPackage(name string) error {
|
||||
if computedChecksum != m.Checksum {
|
||||
return fmt.Errorf("checksum mismatch: expected %s, got %s", m.Checksum, computedChecksum)
|
||||
}
|
||||
if err := unpackPackage(packageFile, name); err != nil {
|
||||
err = unpackPackage(packageFile, name)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to unpack package: %w", err)
|
||||
}
|
||||
if len(m.Build) > 0 {
|
||||
if err := executeBuildCommands(m.Build, name); err != nil {
|
||||
err = executeBuildCommands(m.Build, name)
|
||||
if err != nil {
|
||||
return fmt.Errorf("build command error: %w", err)
|
||||
}
|
||||
}
|
||||
if err := saveInstalledPackage(name, m); err != nil {
|
||||
err = saveInstalledPackage(name, m)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to save manifest: %w", err)
|
||||
}
|
||||
if name == "choochoo-build" {
|
||||
destDir := filepath.Join(paths.BaseDir(), "bin")
|
||||
err = os.MkdirAll(destDir, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
srcBinary := filepath.Join(buildInstallDir, name, "choochoo")
|
||||
targetBinary := filepath.Join(destDir, "choochoo")
|
||||
data, err := ioutil.ReadFile(srcBinary)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read built binary: %w", err)
|
||||
}
|
||||
err = ioutil.WriteFile(targetBinary, data, 0755)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to write binary to %s: %w", targetBinary, err)
|
||||
}
|
||||
fmt.Printf("Binary choochoo installed in %s\n", targetBinary)
|
||||
}
|
||||
fmt.Printf("Build package %s installed successfully\n", m.Name)
|
||||
return nil
|
||||
}
|
||||
@ -195,17 +222,20 @@ func RemovePackage(name string) error {
|
||||
if _, err := os.Stat(packagePath); os.IsNotExist(err) {
|
||||
return errors.New("package not found")
|
||||
}
|
||||
if err := os.RemoveAll(packagePath); err != nil {
|
||||
err := os.RemoveAll(packagePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to remove package: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func UpdatePackage(name string) error {
|
||||
if err := RemovePackage(name); err != nil {
|
||||
err := RemovePackage(name)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to remove package for update: %w", err)
|
||||
}
|
||||
if err := InstallPackage(name); err != nil {
|
||||
err = InstallPackage(name)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to install package: %w", err)
|
||||
}
|
||||
return nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user