package Package import ( "errors" "fmt" "os" "PackageManager/Archive" "PackageManager/Client/Database" "PackageManager/Variables" ) 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 errors.New(fmt.Sprintf("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 { // TODO: Search for package on error return e } } e = Archive.ExtractArchive(pkg, Variables.RootDir) 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 }