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.

89 lines
1.4 KiB

  1. package Package
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "PackageManager/Archive"
  7. "PackageManager/Client/Database"
  8. "PackageManager/Variables"
  9. )
  10. func CheckPackageDependancies(deps map[string]string) ([]int64, error) {
  11. var (
  12. name, version string
  13. depIds []int64
  14. id int64
  15. e error
  16. )
  17. for name, version = range deps {
  18. id, e = Database.IsPackageInstalled(name, version)
  19. if e != nil {
  20. return depIds, e
  21. }
  22. depIds = append(depIds, id)
  23. }
  24. return depIds, e
  25. }
  26. func InstallPackage(pkgs []string) error {
  27. var (
  28. manifest Manifest
  29. depIds []int64
  30. pkg string
  31. mStr string
  32. e error
  33. )
  34. for _, pkg = range pkgs {
  35. _, e = os.Stat(pkg)
  36. if os.IsNotExist(e) {
  37. return errors.New(fmt.Sprintf("Invalid package %s", pkg))
  38. }
  39. }
  40. for _, pkg = range pkgs {
  41. fmt.Printf(
  42. "Installing %s...\n",
  43. pkg,
  44. )
  45. mStr, e = Archive.ExtractManifestFile(pkg)
  46. if e != nil {
  47. return e
  48. }
  49. manifest, e = ParseManifestFile(mStr)
  50. if e != nil {
  51. return e
  52. }
  53. if !Variables.IgnoreDepsCheck {
  54. depIds, e = CheckPackageDependancies(manifest.Dependancies)
  55. if e != nil {
  56. // TODO: Search for package on error
  57. return e
  58. }
  59. }
  60. e = Archive.ExtractArchive(pkg, Variables.RootDir)
  61. if e != nil {
  62. return e
  63. }
  64. e = Database.InsertPackage(manifest.Name, manifest.Version, depIds)
  65. if e != nil {
  66. return e
  67. }
  68. fmt.Printf(
  69. "%s successfully installed\n",
  70. pkg,
  71. )
  72. }
  73. return nil
  74. }