Skip to content

Commit

Permalink
Rework completion
Browse files Browse the repository at this point in the history
Bash seperates on whitespace, so the fish completion file
actually works for bash and zsh. So remove the concept of shells
entirley and just use the singular aur_sh.cache file.

If for some reason output without the repository data is needed, the
user could always just pipe it into awk like so
`yay -Pc | awk '{print $1}'`. Or perhaps a --quiet option could be added
where yay will strip the output itself.

The completion cache now updates when installing AUR packages. This is
done as a goroutine with no wait groups. This ensures the program will
never hang if there is a problem.

The completion is stil updated during -Pc but as long as an AUR package
has been installed recently it should not need to update.

The cache will now also wait 7 days instead of 2 before refreshing.
A refresh can be forced using -Pcc.
  • Loading branch information
Morganamilo committed Jul 26, 2018
1 parent 96532c0 commit 9c88261
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 37 deletions.
9 changes: 3 additions & 6 deletions cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,13 +361,10 @@ func handlePrint() (err error) {
err = printUpdateList(cmdArgs)
case cmdArgs.existsArg("w", "news"):
err = printNewsFeed()
case cmdArgs.existsDouble("c", "complete"):
complete(true)
case cmdArgs.existsArg("c", "complete"):
switch {
case cmdArgs.existsArg("f", "fish"):
complete("fish")
default:
complete("sh")
}
complete(false)
case cmdArgs.existsArg("s", "stats"):
err = localStatistics()
default:
Expand Down
52 changes: 21 additions & 31 deletions completions.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package main

import (
"bufio"
"fmt"
"io"
"net/http"
"os"
Expand All @@ -13,7 +12,7 @@ import (
)

//CreateAURList creates a new completion file
func createAURList(out *os.File, shell string) (err error) {
func createAURList(out *os.File) (err error) {
resp, err := http.Get("https://aur.archlinux.org/packages.gz")
if err != nil {
return err
Expand All @@ -24,72 +23,63 @@ func createAURList(out *os.File, shell string) (err error) {

scanner.Scan()
for scanner.Scan() {
fmt.Print(scanner.Text())
out.WriteString(scanner.Text())
if shell == "fish" {
fmt.Print("\tAUR\n")
out.WriteString("\tAUR\n")
} else {
fmt.Print("\n")
out.WriteString("\n")
}
out.WriteString("\tAUR\n")
}

return nil
}

//CreatePackageList appends Repo packages to completion cache
func createRepoList(out *os.File, shell string) (err error) {
func createRepoList(out *os.File) (err error) {
dbList, err := alpmHandle.SyncDbs()
if err != nil {
return
}

_ = dbList.ForEach(func(db alpm.Db) error {
_ = db.PkgCache().ForEach(func(pkg alpm.Package) error {
fmt.Print(pkg.Name())
out.WriteString(pkg.Name())
if shell == "fish" {
fmt.Print("\t" + pkg.DB().Name() + "\n")
out.WriteString("\t" + pkg.DB().Name() + "\n")
} else {
fmt.Print("\n")
out.WriteString("\n")
}
out.WriteString("\t" + pkg.DB().Name() + "\n")
return nil
})
return nil
})
return nil
}

// Complete provides completion info for shells
func complete(shell string) error {
var path string

if shell == "fish" {
path = filepath.Join(cacheHome, "aur_fish"+".cache")
} else {
path = filepath.Join(cacheHome, "aur_sh"+".cache")
}
func updateCompletion(force bool) error {
path := filepath.Join(cacheHome, "completion.cache")
info, err := os.Stat(path)

if os.IsNotExist(err) || time.Since(info.ModTime()).Hours() > 48 {
if os.IsNotExist(err) || time.Since(info.ModTime()).Hours() >= 7*24 || force {
os.MkdirAll(filepath.Dir(path), 0755)
out, errf := os.Create(path)
if errf != nil {
return errf
}

if createAURList(out, shell) != nil {
if createAURList(out) != nil {
defer os.Remove(path)
}
erra := createRepoList(out, shell)
erra := createRepoList(out)

out.Close()
return erra
}

return nil
}

// Complete provides completion info for shells
func complete(force bool) error {
path := filepath.Join(cacheHome, "completion.cache")

err := updateCompletion(force)
if err != nil {
return err
}

in, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
return err
Expand Down
2 changes: 2 additions & 0 deletions install.go
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,8 @@ func install(parser *arguments) error {
}
}

go updateCompletion(false)

err = downloadPkgBuildsSources(do.Aur, do.Bases, incompatible)
if err != nil {
return err
Expand Down

0 comments on commit 9c88261

Please sign in to comment.