|
@@ -212,111 +212,6 @@ func Upgrade(baseDir string, conf *alpm.PacmanConfig, flags []string) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// UpdatePackages handles AUR updates
|
|
|
-func UpdatePackages(baseDir string, conf *alpm.PacmanConfig, flags []string) error {
|
|
|
-
|
|
|
- fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
|
|
|
-
|
|
|
- h, err := conf.CreateHandle()
|
|
|
- defer h.Release()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
- localDb, err := h.LocalDb()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- dbList, err := h.SyncDbs()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
- var foreign []alpm.Package
|
|
|
-
|
|
|
- // Find foreign packages in system
|
|
|
- for _, pkg := range localDb.PkgCache().Slice() {
|
|
|
- // Change to more effective method
|
|
|
- found := false
|
|
|
- for _, db := range dbList.Slice() {
|
|
|
- _, err = db.PkgByName(pkg.Name())
|
|
|
- if err == nil {
|
|
|
- found = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if !found {
|
|
|
- foreign = append(foreign, pkg)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // Find outdated packages
|
|
|
- type Outdated struct {
|
|
|
- res *Result
|
|
|
- pkgVersion string
|
|
|
- er error
|
|
|
- }
|
|
|
-
|
|
|
- r := make(chan *Outdated) // Allocate a channel.
|
|
|
- for _, pkg := range foreign {
|
|
|
- // fmt.Println("Checking number", i, pkg.Name())
|
|
|
- go func(pkg alpm.Package) {
|
|
|
- q, n, err := Info(pkg.Name())
|
|
|
- if err != nil {
|
|
|
- r <- nil
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if n == 0 {
|
|
|
- r <- nil
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // Leaving this here for now, warn about downgrades later
|
|
|
- if int64(q[0].LastModified) > pkg.InstallDate().Unix() {
|
|
|
- r <- &Outdated{&q[0], pkg.Version(), err}
|
|
|
- } else {
|
|
|
- r <- nil
|
|
|
- }
|
|
|
- }(pkg)
|
|
|
- }
|
|
|
-
|
|
|
- var outdated []*Result
|
|
|
- var checkedPkg *Outdated
|
|
|
- for i := 0; i < len(foreign); i++ {
|
|
|
- // fmt.Println("Wait Cycle", i)
|
|
|
- checkedPkg = <-r
|
|
|
- // fmt.Println(checkedPkg)
|
|
|
- if checkedPkg != nil {
|
|
|
- fmt.Printf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n",
|
|
|
- checkedPkg.res.Name, checkedPkg.pkgVersion, checkedPkg.res.Version)
|
|
|
- outdated = append(outdated, checkedPkg.res)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //If there are no outdated packages, don't prompt
|
|
|
- if len(outdated) == 0 {
|
|
|
- fmt.Println(" there is nothing to do")
|
|
|
- return nil
|
|
|
- }
|
|
|
-
|
|
|
- // Install updated packages
|
|
|
- if NoConfirm(flags) == false {
|
|
|
- fmt.Println("\x1b[1m\x1b[32m==> Proceed with upgrade\x1b[0m\x1b[1m (Y/n)\x1b[0m")
|
|
|
- var response string
|
|
|
- fmt.Scanln(&response)
|
|
|
- if strings.ContainsAny(response, "n & N") {
|
|
|
- return nil
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for _, pkg := range outdated {
|
|
|
- pkg.Install(baseDir, conf, flags)
|
|
|
- }
|
|
|
-
|
|
|
- return nil
|
|
|
-}
|
|
|
|
|
|
// Install handles install from Result
|
|
|
func (a *Result) Install(baseDir string, conf *alpm.PacmanConfig, flags []string) (err error) {
|