From 0ae8fc2a06ca4ea698434d414b95a0f570e574a7 Mon Sep 17 00:00:00 2001 From: morganamilo Date: Thu, 31 May 2018 16:23:15 +0100 Subject: [PATCH] Support --aur and --repo flags These flags limit operations to only check the repos or only check the AUR. These flags apply to -S, -Si and -Su. -a may also be used as a short option for --aur. --repo has no short option as -r is taken. --- cmd.go | 4 ++++ config.go | 11 +++++++++++ depPool.go | 9 +++++++-- install.go | 6 +++++- query.go | 12 ++++++++---- upgrade.go | 38 +++++++++++++++++++++----------------- 6 files changed, 56 insertions(+), 24 deletions(-) diff --git a/cmd.go b/cmd.go index 1441f3b5..aee37e8c 100644 --- a/cmd.go +++ b/cmd.go @@ -300,6 +300,10 @@ func handleConfig(option, value string) bool { config.Provides = true case "noprovides": config.Provides = false + case "a", "aur": + mode = ModeAUR + case "repo": + mode = ModeRepo default: return false } diff --git a/config.go b/config.go index 105b397a..2ba18df1 100644 --- a/config.go +++ b/config.go @@ -25,6 +25,14 @@ const ( TopDown ) +type targetMode int + +const ( + ModeAUR targetMode = iota + ModeRepo + ModeAny +) + // Configuration stores yay's config. type Configuration struct { BuildDir string `json:"buildDir"` @@ -98,6 +106,9 @@ var alpmConf alpm.PacmanConfig // AlpmHandle is the alpm handle used by yay. var alpmHandle *alpm.Handle +// Mode is used to restrict yay to AUR or repo only modes +var mode targetMode = ModeAny + func readAlpmConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) { file, err := os.Open(pacmanconf) if err != nil { diff --git a/depPool.go b/depPool.go index 0ccc27de..945984bc 100644 --- a/depPool.go +++ b/depPool.go @@ -101,12 +101,17 @@ func (dp *depPool) ResolveTargets(pkgs []string) error { var singleDb *alpm.Db // aur/ prefix means we only check the aur - if target.Db == "aur" { + if target.Db == "aur" || (target.Db == "" && mode == ModeAUR) { dp.Targets = append(dp.Targets, target) aurTargets.set(target.DepString()) continue } + if mode == ModeAUR { + dp.Targets = append(dp.Targets, target) + continue + } + // if theres a different priefix only look in that repo if target.Db != "" { singleDb, err = alpmHandle.SyncDbByName(target.Db) @@ -151,7 +156,7 @@ func (dp *depPool) ResolveTargets(pkgs []string) error { dp.Targets = append(dp.Targets, target) } - if len(aurTargets) > 0 { + if len(aurTargets) > 0 && (mode == ModeAny || mode == ModeAUR) { return dp.resolveAURPackages(aurTargets, true) } diff --git a/install.go b/install.go index ba597b2c..c34091b1 100644 --- a/install.go +++ b/install.go @@ -49,6 +49,10 @@ func install(parser *arguments) error { arguments.op = "S" arguments.targets = make(stringSet) + if mode == ModeAUR { + arguments.delArg("u", "sysupgrade") + } + //if we are doing -u also request all packages needing update if parser.existsArg("u", "sysupgrade") { aurUp, repoUp, err = upList(warnings) @@ -125,7 +129,7 @@ func install(parser *arguments) error { arguments.addTarget(pkg) } - if len(do.Aur) == 0 && len(arguments.targets) == 0 && !parser.existsArg("u", "sysupgrade") { + if len(do.Aur) == 0 && len(arguments.targets) == 0 && (!parser.existsArg("u", "sysupgrade") || mode == ModeAUR) { fmt.Println("There is nothing to do") return nil } diff --git a/query.go b/query.go index 04ff8386..150b6a47 100644 --- a/query.go +++ b/query.go @@ -220,8 +220,8 @@ func syncInfo(pkgS []string) (err error) { } } - if len(aurS) != len(info) { - return fmt.Errorf("Could not find all required packages") + if len(repoS)+len(aurS) != len(pkgS) { + return fmt.Errorf("Could not find all packages") } return @@ -288,10 +288,14 @@ func packageSlices(toCheck []string) (aur []string, repo []string, err error) { db, name := splitDbFromName(_pkg) found := false - if db == "aur" { + if db == "aur" || (mode == ModeAUR && db != "") { + continue + } + + if db == "aur" || (mode == ModeAUR && db == "") { aur = append(aur, _pkg) continue - } else if db != "" { + } else if db != "" || mode == ModeRepo { repo = append(repo, _pkg) continue } diff --git a/upgrade.go b/upgrade.go index 3099e455..2ffb3333 100644 --- a/upgrade.go +++ b/upgrade.go @@ -140,29 +140,33 @@ func upList(warnings *aurWarnings) (aurUp upSlice, repoUp upSlice, err error) { pkgdata := make(map[string]*rpc.Pkg) - fmt.Println(bold(cyan("::") + bold(" Searching databases for updates..."))) - wg.Add(1) - go func() { - repoUp, repoErr = upRepo(local) - wg.Done() - }() - - fmt.Println(bold(cyan("::") + bold(" Searching AUR for updates..."))) - wg.Add(1) - go func() { - aurUp, aurErr = upAUR(remote, remoteNames, pkgdata, warnings) - wg.Done() - }() - - if config.Devel { - fmt.Println(bold(cyan("::") + bold(" Checking development packages..."))) + if mode == ModeAny || mode == ModeRepo { + fmt.Println(bold(cyan("::") + bold(" Searching databases for updates..."))) wg.Add(1) go func() { - develUp, develErr = upDevel(remote) + repoUp, repoErr = upRepo(local) wg.Done() }() } + if mode == ModeAny || mode == ModeAUR { + fmt.Println(bold(cyan("::") + bold(" Searching AUR for updates..."))) + wg.Add(1) + go func() { + aurUp, aurErr = upAUR(remote, remoteNames, pkgdata, warnings) + wg.Done() + }() + + if config.Devel { + fmt.Println(bold(cyan("::") + bold(" Checking development packages..."))) + wg.Add(1) + go func() { + develUp, develErr = upDevel(remote) + wg.Done() + }() + } + } + wg.Wait() printLocalNewerThanAUR(remote, pkgdata)