2016-09-13 03:06:24 +02:00
|
|
|
package aur
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2016-10-17 00:02:48 +02:00
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
"github.com/jguer/yay/pacman"
|
2017-01-05 17:13:52 +01:00
|
|
|
"github.com/jguer/yay/util"
|
2016-09-13 03:06:24 +02:00
|
|
|
)
|
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
// Install sends system commands to make and install a package from pkgName
|
2016-12-10 00:33:21 +01:00
|
|
|
func Install(pkg string, flags []string) (err error) {
|
2016-11-30 18:55:56 +01:00
|
|
|
q, n, err := Info(pkg)
|
2016-09-13 03:06:24 +02:00
|
|
|
if err != nil {
|
2016-11-30 18:55:56 +01:00
|
|
|
return
|
2016-09-13 03:06:24 +02:00
|
|
|
}
|
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
if n == 0 {
|
|
|
|
return fmt.Errorf("Package %s does not exist", pkg)
|
|
|
|
}
|
|
|
|
|
2016-12-10 00:33:21 +01:00
|
|
|
q[0].Install(flags)
|
2016-11-30 18:55:56 +01:00
|
|
|
return err
|
2016-09-13 03:06:24 +02:00
|
|
|
}
|
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
// Upgrade tries to update every foreign package installed in the system
|
2016-12-10 00:33:21 +01:00
|
|
|
func Upgrade(flags []string) error {
|
2016-11-30 18:55:56 +01:00
|
|
|
fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
|
|
|
|
|
2016-11-30 20:07:17 +01:00
|
|
|
foreign, n, err := pacman.ForeignPackages()
|
|
|
|
if err != nil || n == 0 {
|
2016-09-13 03:06:24 +02:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2016-11-30 20:07:17 +01:00
|
|
|
keys := make([]string, len(foreign))
|
|
|
|
i := 0
|
|
|
|
for k := range foreign {
|
|
|
|
keys[i] = k
|
|
|
|
i++
|
|
|
|
}
|
2016-11-30 18:55:56 +01:00
|
|
|
|
2016-11-30 20:07:17 +01:00
|
|
|
q, _, err := MultiInfo(keys)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2016-11-30 18:55:56 +01:00
|
|
|
|
2016-11-30 20:07:17 +01:00
|
|
|
outdated := q[:0]
|
|
|
|
for _, res := range q {
|
|
|
|
if _, ok := foreign[res.Name]; ok {
|
2016-11-30 18:55:56 +01:00
|
|
|
// Leaving this here for now, warn about downgrades later
|
2016-11-30 20:07:17 +01:00
|
|
|
if res.LastModified > foreign[res.Name].Date {
|
|
|
|
fmt.Printf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n",
|
2016-12-02 14:34:14 +01:00
|
|
|
res.Name, foreign[res.Name].Version, res.Version)
|
2016-11-30 20:07:17 +01:00
|
|
|
outdated = append(outdated, res)
|
2016-11-30 18:55:56 +01:00
|
|
|
}
|
|
|
|
}
|
2016-10-02 18:23:55 +02:00
|
|
|
}
|
2016-09-13 03:06:24 +02:00
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
//If there are no outdated packages, don't prompt
|
|
|
|
if len(outdated) == 0 {
|
|
|
|
fmt.Println(" there is nothing to do")
|
|
|
|
return nil
|
|
|
|
}
|
2016-09-13 03:06:24 +02:00
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
// Install updated packages
|
2017-01-05 17:13:52 +01:00
|
|
|
if !util.ContinueTask("Proceed with upgrade?", "nN") {
|
2016-12-10 00:33:21 +01:00
|
|
|
return nil
|
2016-09-13 03:06:24 +02:00
|
|
|
}
|
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
for _, pkg := range outdated {
|
2016-12-10 00:33:21 +01:00
|
|
|
pkg.Install(flags)
|
2016-09-13 03:06:24 +02:00
|
|
|
}
|
|
|
|
|
2016-11-30 18:55:56 +01:00
|
|
|
return nil
|
2016-09-13 03:06:24 +02:00
|
|
|
}
|
2017-02-15 02:50:26 +01:00
|
|
|
|
|
|
|
// GetPkgbuild downloads pkgbuild from the AUR.
|
|
|
|
func GetPkgbuild(pkgN string, dir string) (err error) {
|
|
|
|
aq, numaq, err := Info(pkgN)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if numaq == 0 {
|
|
|
|
return fmt.Errorf("no results")
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("\x1b[1;32m==>\x1b[1;33m %s \x1b[1;32mfound in AUR.\x1b[0m\n", pkgN)
|
|
|
|
util.DownloadAndUnpack(BaseURL+aq[0].URLPath, dir, false)
|
|
|
|
return
|
|
|
|
}
|