Browse Source

Merge pull request #208 from Morganamilo/redownload

Add support to skip pkgbuild downloads.
Morgana 7 years ago
parent
commit
a7be7a839d
4 changed files with 51 additions and 23 deletions
  1. 10 16
      cmd.go
  2. 2 0
      config.go
  3. 22 7
      install.go
  4. 17 0
      yay.8

+ 10 - 16
cmd.go

@@ -46,6 +46,9 @@ Permanent configuration options:
     --noafterclean       Do not remove package sources after successful build
     --timeupdate         Check package's AUR page for changes during sysupgrade
     --notimeupdate       Do not checking of AUR page changes
+    --redownload         Always download pkgbuilds of targets
+    --redownloadall      Always download pkgbuilds of all AUR packages
+    --noredownload       Skip pkgbuild download if in cache and up to date
 
 Print specific options:
     -c --complete        Used for completions
@@ -351,16 +354,6 @@ func handleConfig(option string) bool {
 		config.CleanAfter = true
 	case "noafterclean":
 		config.CleanAfter = false
-		//		case "gendb":
-		//			err = createDevelDB()
-		//			if err != nil {
-		//				fmt.Println(err)
-		//			}
-		//			err = saveVCSInfo()
-		//			if err != nil {
-		//				fmt.Println(err)
-		//			}
-		//			os.Exit(0)
 	case "devel":
 		config.Devel = true
 	case "nodevel":
@@ -373,14 +366,14 @@ func handleConfig(option string) bool {
 		config.SortMode = TopDown
 	case "bottomup":
 		config.SortMode = BottomUp
-		//		case "help":
-		//			usage()
-		//			os.Exit(0)
-		//		case "version":
-		//			fmt.Printf("yay v%s\n", version)
-		//			os.Exit(0)
 	case "noconfirm":
 		config.NoConfirm = true
+	case "redownload":
+		config.ReDownload = "yes"
+	case "redownloadall":
+		config.ReDownload = "all"
+	case "noredownload":
+		config.ReDownload = "no"
 	default:
 		return false
 	}
@@ -390,6 +383,7 @@ func handleConfig(option string) bool {
 }
 
 func handleVersion() {
+	fmt.Print(config.ReDownload)
 	fmt.Printf("yay v%s\n", version)
 }
 

+ 2 - 0
config.go

@@ -31,6 +31,7 @@ type Configuration struct {
 	PacmanBin     string `json:"pacmanbin"`
 	PacmanConf    string `json:"pacmanconf"`
 	TarBin        string `json:"tarbin"`
+	ReDownload    string `json:"redownload"`
 	RequestSplitN int    `json:"requestsplitn"`
 	SearchMode    int    `json:"-"`
 	SortMode      int    `json:"sortmode"`
@@ -128,6 +129,7 @@ func defaultSettings(config *Configuration) {
 	config.TarBin = "/usr/bin/bsdtar"
 	config.TimeUpdate = false
 	config.RequestSplitN = 150
+	config.ReDownload = "no"
 }
 
 // Editor returns the preferred system editor.

+ 22 - 7
install.go

@@ -164,7 +164,7 @@ func install(parser *arguments) error {
 			return fmt.Errorf("Aborting due to user")
 		}
 
-		err = dowloadPkgBuilds(dc.Aur, dc.Bases)
+		err = downloadPkgBuilds(dc.Aur, parser.targets, dc.Bases)
 		if err != nil {
 			return err
 		}
@@ -389,20 +389,35 @@ func parsesrcinfosGenerate(pkgs []*rpc.Pkg, srcinfos map[string]*gopkg.PKGBUILD,
 	return nil
 }
 
-func dowloadPkgBuilds(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg) (err error) {
+func downloadPkgBuilds(pkgs []*rpc.Pkg, targets stringSet, bases map[string][]*rpc.Pkg) error {
 	for k, pkg := range pkgs {
-		//todo make pretty
-		str := bold(cyan("::") + " Downloading (%d/%d): %s\n")
+		if config.ReDownload == "no" || (config.ReDownload == "yes" && !targets.get(pkg.Name)) {
+			dir := config.BuildDir + pkg.PackageBase + "/.SRCINFO"
+			pkgbuild, err := gopkg.ParseSRCINFO(dir)
+
+			if err == nil {
+				version, err := gopkg.NewCompleteVersion(pkg.Version)
+				if err == nil {
+					if !version.Newer(pkgbuild.Version()) {
+						str := bold(cyan("::") + " PKGBUILD up to date, Skipping (%d/%d): %s\n")
+						fmt.Printf(str, k+1, len(pkgs), formatPkgbase(pkg, bases))
+						continue
+					}
+				}
+			}
+		}
+
+		str := bold(cyan("::") + " Downloading PKGBUILD (%d/%d): %s\n")
 
 		fmt.Printf(str, k+1, len(pkgs), formatPkgbase(pkg, bases))
 
-		err = downloadAndUnpack(baseURL+pkg.URLPath, config.BuildDir, false)
+		err := downloadAndUnpack(baseURL+pkg.URLPath, config.BuildDir, false)
 		if err != nil {
-			return
+			return err
 		}
 	}
 
-	return
+	return nil
 }
 
 func downloadPkgBuildsSources(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg) (err error) {

+ 17 - 0
yay.8

@@ -151,6 +151,23 @@ the last modification time of each package's AUR page\&.
 .RS 4
 Do not consider build times during sysupgrade\&.
 .RE
+.PP
+\fB\-\-redownload\fR
+.RS 4
+Always download pkgbuilds of targets even when a copy is avaliable in cache\&.
+.RE
+.PP
+\fB\-\-redownloadall\fR
+.RS 4
+Always download pkgbuilds of all AUR packages even when a copy is avaliable 
+in cache\&.
+.RE
+.PP
+\fB\-\-noredownload\fR
+.RS 4
+When downloading pkgbuilds if the pkgbuild is found in cache and is equal or
+newer than the AUR's version use that instead of downloading a new one\&.
+.RE
 .SH "EXAMPLES"
 .PP
 yay \fIfoo\fR