Parcourir la source

Github package updates are back, missing generate Database on fresh installs

Jguer il y a 7 ans
Parent
commit
bc7ff1799b
6 fichiers modifiés avec 103 ajouts et 78 suppressions
  1. 6 2
      README.md
  2. 60 35
      cmd.go
  3. 9 2
      config.go
  4. 1 1
      install.go
  5. 26 21
      upgrade.go
  6. 1 17
      vcs.go

+ 6 - 2
README.md

@@ -35,11 +35,15 @@ Yay was created with a few objectives in mind and based on the design of [yaourt
 
 ### Changelog
 
+#### 2.196
+- XDG_CONFIG_HOME support
+- XDG_CACHE_HOME support
+
 #### 2.165
-- Upgrade list now allows skipping upgrade install.
+- Upgrade list now allows skipping upgrade install
 
 #### 2.159
-- Qstats now warns about packages not available in AUR.
+- Qstats now warns about packages not available in AUR
 
 #### 2.152
 - Fetching backend changed to Mikkel Oscar's [Aur](https://github.com/mikkeloscar/aur)

+ 60 - 35
cmd.go

@@ -40,71 +40,97 @@ func usage() {
 }
 
 func init() {
-	defaultSettings(&config)
-
+	var configHome string // configHome handles config directory home
+	var cacheHome string  // cacheHome handles cache home
 	var err error
-	if dir := os.Getenv("XDG_CONFIG_HOME"); dir != "" {
-		if info, err := os.Stat(dir); err == nil && info.IsDir() == true {
-			configfile = os.Getenv("XDG_CONFIG_HOME") + "/yay/config.json"
+
+	if 0 == os.Geteuid() {
+		fmt.Println("Please avoid running yay as root/sudo.")
+	}
+
+	if configHome = os.Getenv("XDG_CONFIG_HOME"); configHome != "" {
+		if info, err := os.Stat(configHome); err == nil && info.IsDir() == true {
+			configHome = configHome + "/yay"
 		} else {
-			configfile = os.Getenv("HOME") + "/.config/yay/config.json"
+			configHome = os.Getenv("HOME") + "/.config/yay"
 		}
 	} else {
-		configfile = os.Getenv("HOME") + "/.config/yay/config.json"
+		configHome = os.Getenv("HOME") + "/.config/yay"
 	}
 
-	if _, err = os.Stat(configfile); os.IsNotExist(err) {
-		err = os.MkdirAll(filepath.Dir(configfile), 0755)
+	if cacheHome = os.Getenv("XDG_CACHE_HOME"); cacheHome != "" {
+		if info, err := os.Stat(cacheHome); err == nil && info.IsDir() == true {
+			cacheHome = cacheHome + "/yay"
+		} else {
+			cacheHome = os.Getenv("HOME") + "/.cache/yay"
+		}
+	} else {
+		cacheHome = os.Getenv("HOME") + "/.config/yay"
+	}
+
+	configFile = configHome + "/config.json"
+	vcsFile = configHome + "/yay_vcs.json"
+	completionFile = cacheHome + "/aur_"
+
+	////////////////
+	// yay config //
+	////////////////
+	defaultSettings(&config)
+
+	if _, err = os.Stat(configFile); os.IsNotExist(err) {
+		err = os.MkdirAll(filepath.Dir(configFile), 0700)
 		if err != nil {
-			fmt.Println("Unable to create config directory:", filepath.Dir(configfile), err)
+			fmt.Println("Unable to create config directory:", filepath.Dir(configFile), err)
 			os.Exit(2)
 		}
 		// Save the default config if nothing is found
 		config.saveConfig()
 	} else {
-		file, err := os.Open(configfile)
+		file, err := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0600)
 		if err != nil {
 			fmt.Println("Error reading config:", err)
 		} else {
+			defer file.Close()
 			decoder := json.NewDecoder(file)
 			err = decoder.Decode(&config)
 			if err != nil {
-				fmt.Println("Loading default Settings\nError reading config:", err)
+				fmt.Println("Loading default Settings.\nError reading config:", err)
 				defaultSettings(&config)
 			}
 		}
 	}
 
-	alpmConf, err = readAlpmConfig(config.PacmanConf)
-	if err != nil {
-		fmt.Println("Unable to read Pacman conf", err)
-		os.Exit(1)
-	}
-
-	alpmHandle, err = alpmConf.CreateHandle()
-	if err != nil {
-		fmt.Println("Unable to CreateHandle", err)
-		os.Exit(1)
-	}
-
+	/////////////////
+	// vcs config //
+	////////////////
 	updated = false
-	configfile = os.Getenv("HOME") + "/.config/yay/yay_vcs.json"
-
-	if _, err := os.Stat(configfile); os.IsNotExist(err) {
-		_ = os.MkdirAll(os.Getenv("HOME")+"/.config/yay", 0755)
-		return
-	}
 
-	file, err := os.Open(configfile)
+	file, err := os.OpenFile(vcsFile, os.O_RDWR|os.O_CREATE, 0600)
 	if err != nil {
 		fmt.Println("error:", err)
 		return
 	}
+	defer file.Close()
 	decoder := json.NewDecoder(file)
 	err = decoder.Decode(&savedInfo)
 	if err != nil {
 		fmt.Println("error:", err)
 	}
+
+	/////////////////
+	// alpm config //
+	/////////////////
+	alpmConf, err = readAlpmConfig(config.PacmanConf)
+	if err != nil {
+		fmt.Println("Unable to read Pacman conf", err)
+		os.Exit(1)
+	}
+
+	alpmHandle, err = alpmConf.CreateHandle()
+	if err != nil {
+		fmt.Println("Unable to CreateHandle", err)
+		os.Exit(1)
+	}
 }
 
 func parser() (op string, options []string, packages []string, changedConfig bool, err error) {
@@ -339,11 +365,10 @@ func numberMenu(pkgS []string, flags []string) (err error) {
 
 // Complete provides completion info for shells
 func complete() (err error) {
-	path := os.Getenv("HOME") + "/.cache/yay/aur_" + config.Shell + ".cache"
+	path := completionFile + config.Shell + ".cache"
 
 	if info, err := os.Stat(path); os.IsNotExist(err) || time.Since(info.ModTime()).Hours() > 48 {
-		os.MkdirAll(os.Getenv("HOME")+"/.cache/yay/", 0755)
-
+		os.MkdirAll(filepath.Dir(completionFile), 0700)
 		out, err := os.Create(path)
 		if err != nil {
 			return err
@@ -358,7 +383,7 @@ func complete() (err error) {
 		return err
 	}
 
-	in, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0755)
+	in, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0600)
 	if err != nil {
 		return err
 	}

+ 9 - 2
config.go

@@ -50,7 +50,14 @@ var specialDBsauce = false
 
 var savedInfo infos
 
-var configfile string
+// configfile holds yay config file path.
+var configFile string
+
+// vcsfile holds yay vcs info file path.
+var vcsFile string
+
+//completion file
+var completionFile string
 
 // Updated returns if database has been updated
 var updated bool
@@ -80,7 +87,7 @@ func readAlpmConfig(pacmanconf string) (conf alpm.PacmanConfig, err error) {
 func (config *Configuration) saveConfig() error {
 	config.NoConfirm = false
 	marshalledinfo, _ := json.MarshalIndent(config, "", "\t")
-	in, err := os.OpenFile(configfile, os.O_RDWR|os.O_CREATE, 0644)
+	in, err := os.OpenFile(configFile, os.O_RDWR|os.O_CREATE, 0644)
 	if err != nil {
 		return err
 	}

+ 1 - 1
install.go

@@ -57,7 +57,7 @@ func aurInstall(pkgName []string, flags []string) (err error) {
 	}
 
 	if len(q) != len(pkgName) {
-		fmt.Printf("Some package from list\n%+v\ndoes not exist", pkgName)
+		fmt.Printf("Some packages from list\n%+v\n do not exist", pkgName)
 	}
 
 	var finalrm []string

+ 26 - 21
upgrade.go

@@ -161,6 +161,26 @@ func isIgnored(pkg alpm.Package) bool {
 	return false
 }
 
+func upDevel(remoteNames []string, packageC chan upgrade, done chan bool) {
+	for _, e := range savedInfo {
+		if e.needsUpdate() {
+			found := false
+			for _, r := range remoteNames {
+				if r == e.Package {
+					found = true
+				}
+			}
+			if found {
+				packageC <- upgrade{e.Package, "devel", e.SHA[0:6], "git"}
+			} else {
+				removeVCSPackage([]string{e.Package})
+			}
+		}
+	}
+	done <- true
+	return
+}
+
 // upAUR gathers foreign packages and checks if they have new versions.
 // Output: Upgrade type package list.
 func upAUR(remote []alpm.Package, remoteNames []string) (toUpgrade upSlice, err error) {
@@ -171,6 +191,12 @@ func upAUR(remote []alpm.Package, remoteNames []string) (toUpgrade upSlice, err
 	packageC := make(chan upgrade)
 	done := make(chan bool)
 
+	if config.Devel {
+		routines++
+		go upDevel(remoteNames, packageC, done)
+		fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Checking development packages...\x1b[0m")
+	}
+
 	for i := len(remote); i != 0; i = j {
 		//Split requests so AUR RPC doesn't get mad at us.
 		j = i - config.RequestSplitN
@@ -328,24 +354,3 @@ func upgradePkgs(flags []string) error {
 	}
 	return nil
 }
-
-func develUpgrade(foreign map[string]alpm.Package, flags []string) error {
-	fmt.Println(" Checking development packages...")
-	develUpdates := checkUpdates(foreign)
-	if len(develUpdates) != 0 {
-		for _, q := range develUpdates {
-			fmt.Printf("\x1b[1m\x1b[32m==>\x1b[33;1m %s\x1b[0m\n", q)
-		}
-		// Install updated packages
-		if !continueTask("Proceed with upgrade?", "nN") {
-			return nil
-		}
-
-		err := aurInstall(develUpdates, flags)
-		if err != nil {
-			fmt.Println(err)
-		}
-	}
-
-	return nil
-}

+ 1 - 17
vcs.go

@@ -6,8 +6,6 @@ import (
 	"net/http"
 	"os"
 	"strings"
-
-	alpm "github.com/jguer/go-alpm"
 )
 
 // branch contains the information of a repository branch
@@ -90,20 +88,6 @@ func (info *Info) needsUpdate() bool {
 	return false
 }
 
-// checkUpdates returns list of outdated packages
-func checkUpdates(foreign map[string]alpm.Package) (toUpdate []string) {
-	for _, e := range savedInfo {
-		if e.needsUpdate() {
-			if _, ok := foreign[e.Package]; ok {
-				toUpdate = append(toUpdate, e.Package)
-			} else {
-				removeVCSPackage([]string{e.Package})
-			}
-		}
-	}
-	return
-}
-
 func inStore(pkgName string) *Info {
 	for i, e := range savedInfo {
 		if pkgName == e.Package {
@@ -148,7 +132,7 @@ func saveVCSInfo() error {
 	if err != nil || string(marshalledinfo) == "null" {
 		return err
 	}
-	in, err := os.OpenFile(configfile, os.O_RDWR|os.O_CREATE, 0755)
+	in, err := os.OpenFile(vcsFile, os.O_RDWR|os.O_CREATE, 0755)
 	if err != nil {
 		return err
 	}