Browse Source

Visual and dependency changes

Jguer 8 years ago
parent
commit
96149fd5b4
1 changed files with 42 additions and 29 deletions
  1. 42 29
      aur/aur.go

+ 42 - 29
aur/aur.go

@@ -256,6 +256,8 @@ func UpdatePackages(baseDir string, conf *alpm.PacmanConfig, flags []string) err
 
 // Install handles install from Result
 func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags []string) (err error) {
+	fmt.Printf("\x1b[1m\x1b[32m==> Installing\x1b[33m %s\x1b[0m\n", a.Name)
+
 	// No need to use filepath.separators because it won't run on inferior platforms
 	err = os.MkdirAll(baseDir+"builds", 0755)
 	if err != nil {
@@ -276,10 +278,6 @@ func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags []string
 		return
 	}
 	defer os.RemoveAll(baseDir + a.Name)
-	_, err = a.Dependencies(conf)
-	if err != nil {
-		return
-	}
 
 	var response string
 	var dir bytes.Buffer
@@ -298,6 +296,10 @@ func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags []string
 			err = editcmd.Run()
 		}
 	}
+	_, err = a.Dependencies(conf)
+	if err != nil {
+		return
+	}
 
 	err = os.Chdir(dir.String())
 	if err != nil {
@@ -319,6 +321,18 @@ func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags []string
 
 // Dependencies returns package dependencies splitting between AUR results and Repo Results not installed
 func (a *Result) Dependencies(conf *alpm.PacmanConfig) (final []string, err error) {
+	h, err := conf.CreateHandle()
+	defer h.Release()
+	if err != nil {
+		return
+	}
+
+	dbList, err := h.SyncDbs()
+	localDb, err := h.LocalDb()
+	if err != nil {
+		return
+	}
+
 	f := func(c rune) bool {
 		return c == '>' || c == '<' || c == '=' || c == ' '
 	}
@@ -331,41 +345,40 @@ func (a *Result) Dependencies(conf *alpm.PacmanConfig) (final []string, err erro
 		return final, fmt.Errorf("Failed to get deps from RPC")
 	}
 
-	var found bool
-	for _, deps := range info.Results[0].MakeDepends {
-		fields := strings.FieldsFunc(deps, f)
-
-		if found, err = IspkgInstalled(fields[0]); found {
-			if err != nil {
-				return
-			}
+	deps := append(info.Results[0].MakeDepends, info.Results[0].Depends...)
+	for _, dep := range deps {
+		fields := strings.FieldsFunc(dep, f)
+		fmt.Println(fields[0])
+		// If package is installed let it go.
+		_, err = localDb.PkgByName(fields[0])
+		if err == nil {
 			continue
 		}
 
-		if found, err = IspkgInRepo(fields[0], conf); !found {
-			if err != nil {
-				return
+		fmt.Println(fields[0])
+		// If package is in repo let it be installed by makepkg.
+		found := false
+		for _, db := range dbList.Slice() {
+			_, err = db.PkgByName(fields[0])
+			if err == nil {
+				found = true
 			}
-			final = append(final, fields[0])
 		}
-	}
-
-	for _, deps := range info.Results[0].Depends {
-		fields := strings.FieldsFunc(deps, f)
 
-		if found, err = IspkgInstalled(fields[0]); found {
-			if err != nil {
-				return
-			}
+		if found {
 			continue
 		}
 
-		if found, err = IspkgInRepo(fields[0], conf); !found {
-			if err != nil {
-				return
-			}
-			final = append(final, fields[0])
+		depinfo, err := Search(fields[0], true)
+		if err != nil {
+			return final, err
+		}
+
+		if len(depinfo.Results) == 0 {
+			return final, fmt.Errorf("Unable to find dependency in repos and AUR.")
 		}
+
+		final = append(final, fields[0])
 	}
 	return
 }