PackageManager just because
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
1.9 KiB

package Package
import (
"fmt"
"os"
"os/exec"
"PackageManager/Archive"
"PackageManager/Client/Database"
"PackageManager/Variables"
)
func runInstallCmd(cmdStrs []string) error {
var (
cmd *exec.Cmd
cmdStr string
err error
)
if len(cmdStrs) == 0 {
return nil
}
for _, cmdStr = range cmdStrs {
cmd = exec.Command("/bin/sh", "-c", cmdStr)
cmd.Dir = Variables.RootDir
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
return err
}
}
return nil
}
func CheckPackageDependancies(deps map[string]string) ([]int64, error) {
var (
name, version string
depIds []int64
id int64
e error
)
for name, version = range deps {
id, e = Database.IsPackageInstalled(name, version)
if e != nil {
return depIds, e
}
depIds = append(depIds, id)
}
return depIds, e
}
func InstallPackage(pkgs []string) error {
var (
manifest Manifest
depIds []int64
pkg string
mStr string
e error
)
for _, pkg = range pkgs {
_, e = os.Stat(pkg)
if os.IsNotExist(e) {
return fmt.Errorf("invalid package %s", pkg)
}
}
for _, pkg = range pkgs {
fmt.Printf(
"Installing %s...\n",
pkg,
)
mStr, e = Archive.ExtractManifestFile(pkg)
if e != nil {
return e
}
manifest, e = ParseManifestFile(mStr)
if e != nil {
return e
}
if !Variables.IgnoreDepsCheck {
depIds, e = CheckPackageDependancies(manifest.Dependancies)
if e != nil {
return e
}
}
e = runInstallCmd(manifest.PreInstallCmds)
if e != nil {
return e
}
e = Archive.ExtractArchive(pkg, Variables.RootDir)
if e != nil {
return e
}
e = runInstallCmd(manifest.PostInstallCmds)
if e != nil {
return e
}
e = Database.InsertPackage(manifest.Name, manifest.Version, depIds)
if e != nil {
return e
}
fmt.Printf(
"%s successfully installed\n",
pkg,
)
}
return nil
}