diff --git a/clean.go b/clean.go index eb3faa7..d68000b 100644 --- a/clean.go +++ b/clean.go @@ -187,9 +187,8 @@ func cleanUntracked() error { } dir := filepath.Join(config.BuildDir, file.Name()) - if shouldUseGit(dir) { - if err = show(passToGit(dir, "clean", "-fx")); err != nil { + if err := show(passToGit(dir, "clean", "-fx")); err != nil { return err } } @@ -197,3 +196,36 @@ func cleanUntracked() error { return nil } + +func cleanAfter(bases []Base) { + fmt.Println("removing Untracked AUR files from cache...") + + for i, base := range bases { + dir := filepath.Join(config.BuildDir, base.Pkgbase()) + + if shouldUseGit(dir) { + fmt.Printf(bold(cyan("::")+" Cleaning (%d/%d): %s\n"), i+1, len(bases), cyan(dir)) + _, stderr, err := capture(passToGit(dir, "reset", "--hard", "HEAD")) + if err != nil { + fmt.Printf("error resetting %s: %s", base.String(), stderr) + } + + show(passToGit(dir, "clean", "-fx")) + } else { + fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir)) + if err := os.RemoveAll(dir); err != nil { + fmt.Println(err) + } + } + } +} + +func cleanBuilds(bases []Base) { + for i, base := range bases { + dir := filepath.Join(config.BuildDir, base.Pkgbase()) + fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir)) + if err := os.RemoveAll(dir); err != nil { + fmt.Println(err) + } + } +} diff --git a/cmd.go b/cmd.go index 1624991..168a901 100644 --- a/cmd.go +++ b/cmd.go @@ -79,8 +79,8 @@ Permanent configuration options: --removemake Remove makedepends after install --noremovemake Don't remove makedepends after install - --afterclean Remove package sources after successful install - --noafterclean Do not remove package sources after successful build + --cleanafter Remove package sources after successful install + --nocleanafter Do not remove package sources after successful build --bottomup Shows AUR's packages first and then repository's --topdown Shows repository's packages first and then AUR's diff --git a/completions/bash b/completions/bash index 83ef41b..903e1fe 100644 --- a/completions/bash +++ b/completions/bash @@ -66,7 +66,7 @@ _yay() { makepkg pacman tar git gpg gpgflags config requestsplitn sudoloop nosudoloop redownload noredownload redownloadall rebuild rebuildall rebuildtree norebuild sortby answerclean answerdiff answeredit answerupgrade noanswerclean noanswerdiff - noansweredit noanswerupgrade cleanmenu diffmenu editmenu upgrademenu + noansweredit noanswerupgrade cleanmenu diffmenu editmenu upgrademenu cleanafter nocleanafter nocleanmenu nodiffmenu noupgrademenu provides noprovides pgpfetch nopgpfetch useask nouseask combinedupgrade nocombinedupgrade aur repo makepkgconf nomakepkgconf askremovemake removemake noremovemake completioninterval aururl' diff --git a/completions/fish b/completions/fish index c51b3cf..eea19f8 100644 --- a/completions/fish +++ b/completions/fish @@ -65,8 +65,8 @@ complete -c $progname -n "not $noopt" -l topdown -d 'Shows repository packages f complete -c $progname -n "not $noopt" -l bottomup -d 'Shows aur packages first and then repository' -f complete -c $progname -n "not $noopt" -l devel -d 'Check -git/-svn/-hg development version' -f complete -c $progname -n "not $noopt" -l nodevel -d 'Disable development version checking' -f -complete -c $progname -n "not $noopt" -l afterclean -d 'Clean package sources after successful build' -f -complete -c $progname -n "not $noopt" -l noafterclean -d 'Disable package sources cleaning' -f +complete -c $progname -n "not $noopt" -l cleanafter -d 'Clean package sources after successful build' -f +complete -c $progname -n "not $noopt" -l nocleanafter -d 'Disable package sources cleaning' -f complete -c $progname -n "not $noopt" -l timeupdate -d 'Check package modification date and version' -f complete -c $progname -n "not $noopt" -l notimeupdate -d 'Check only package version change' -f diff --git a/completions/zsh b/completions/zsh index cb76a2f..ae4e65b 100644 --- a/completions/zsh +++ b/completions/zsh @@ -80,8 +80,8 @@ _pacman_opts_common=( '--topdown[Show repository packages first]' '--devel[Check -git/-svn/-hg development version]' '--nodevel[Disable development version checking]' - '--afterclean[Clean package sources after successful build]' - '--noafterclean[Disable package sources cleaning after successful build]' + '--cleanafter[Clean package sources after successful build]' + '--nocleanafter[Disable package sources cleaning after successful build]' '--timeupdate[Check packages modification date and version]' '--notimeupdate[Check only package version change]' '--redownload[Always download pkgbuilds of targets]' diff --git a/doc/yay.8 b/doc/yay.8 index bb44bf4..699ecce 100644 --- a/doc/yay.8 +++ b/doc/yay.8 @@ -359,11 +359,17 @@ Download and update PKGBUILDs using tarballs. The above conditions about previously installed packages still apply. .TP -.B \-\-afterclean +.B \-\-cleanafter Remove package sources after successful Install. +For packages downloaded through git, untracked files are removed with the +exception of directories. This allows VCS packages to ealily pull an update +instead of having to re clone the entire repo. + +For packages downloaded via tarball, The entire directory is deleted. + .TP -.B \-\-noafterclean +.B \-\-nocleanafter Do not remove package sources after successful Install. .TP diff --git a/install.go b/install.go index 0c0b659..c147029 100644 --- a/install.go +++ b/install.go @@ -341,7 +341,7 @@ func install(parser *arguments) error { } if config.CleanAfter { - cleanBuilds(do.Aur) + cleanAfter(do.Aur) } return nil @@ -680,14 +680,6 @@ func editDiffNumberMenu(bases []Base, installed stringSet, diff bool) ([]Base, e return toEdit, nil } -func cleanBuilds(bases []Base) { - for i, base := range bases { - dir := filepath.Join(config.BuildDir, base.Pkgbase()) - fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir)) - os.RemoveAll(dir) - } -} - func showPkgbuildDiffs(bases []Base, cloned stringSet) error { for _, base := range bases { pkg := base.Pkgbase() @@ -962,12 +954,14 @@ func buildInstallPkgbuilds(dp *depPool, do *depOrder, srcinfos map[string]*gosrc } if installed { + show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch")) fmt.Println(cyan(pkg+"-"+version) + bold(" is up to date -- skipping")) continue } } if built { + show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch")) fmt.Println(bold(yellow(arrow)), cyan(pkg+"-"+version)+bold(" already made -- skipping build")) } else { diff --git a/parser.go b/parser.go index 1fb97a5..6a22ac5 100644 --- a/parser.go +++ b/parser.go @@ -419,8 +419,8 @@ func isArg(arg string) bool { //yay options case "aururl": case "save": - case "afterclean": - case "noafterclean": + case "afterclean", "cleanafter": + case "noafterclean", "nocleanafter": case "devel": case "nodevel": case "timeupdate": @@ -501,9 +501,9 @@ func handleConfig(option, value string) bool { config.AURURL = value case "save": shouldSaveConfig = true - case "afterclean": + case "afterclean", "cleanafter": config.CleanAfter = true - case "noafterclean": + case "noafterclean", "nocleanafter": config.CleanAfter = false case "devel": config.Devel = true