فهرست منبع

fix(config): expand tilde for some config fields. Fixes #1774 (#1897)

expande tilde for some fields. Fixes #1774
Jo 2 سال پیش
والد
کامیت
9356481d1c
2فایلهای تغییر یافته به همراه51 افزوده شده و 9 حذف شده
  1. 18 9
      pkg/settings/config.go
  2. 33 0
      pkg/settings/config_test.go

+ 18 - 9
pkg/settings/config.go

@@ -115,21 +115,21 @@ func (c *Configuration) Save(configPath string) error {
 func (c *Configuration) expandEnv() {
 	c.AURURL = os.ExpandEnv(c.AURURL)
 	c.AURRPCURL = os.ExpandEnv(c.AURRPCURL)
-	c.BuildDir = os.ExpandEnv(c.BuildDir)
-	c.Editor = os.ExpandEnv(c.Editor)
+	c.BuildDir = expandEnvOrHome(c.BuildDir)
+	c.Editor = expandEnvOrHome(c.Editor)
 	c.EditorFlags = os.ExpandEnv(c.EditorFlags)
-	c.MakepkgBin = os.ExpandEnv(c.MakepkgBin)
-	c.MakepkgConf = os.ExpandEnv(c.MakepkgConf)
-	c.PacmanBin = os.ExpandEnv(c.PacmanBin)
-	c.PacmanConf = os.ExpandEnv(c.PacmanConf)
+	c.MakepkgBin = expandEnvOrHome(c.MakepkgBin)
+	c.MakepkgConf = expandEnvOrHome(c.MakepkgConf)
+	c.PacmanBin = expandEnvOrHome(c.PacmanBin)
+	c.PacmanConf = expandEnvOrHome(c.PacmanConf)
 	c.GpgFlags = os.ExpandEnv(c.GpgFlags)
 	c.MFlags = os.ExpandEnv(c.MFlags)
 	c.GitFlags = os.ExpandEnv(c.GitFlags)
 	c.SortBy = os.ExpandEnv(c.SortBy)
 	c.SearchBy = os.ExpandEnv(c.SearchBy)
-	c.GitBin = os.ExpandEnv(c.GitBin)
-	c.GpgBin = os.ExpandEnv(c.GpgBin)
-	c.SudoBin = os.ExpandEnv(c.SudoBin)
+	c.GitBin = expandEnvOrHome(c.GitBin)
+	c.GpgBin = expandEnvOrHome(c.GpgBin)
+	c.SudoBin = expandEnvOrHome(c.SudoBin)
 	c.SudoFlags = os.ExpandEnv(c.SudoFlags)
 	c.ReDownload = os.ExpandEnv(c.ReDownload)
 	c.ReBuild = os.ExpandEnv(c.ReBuild)
@@ -140,6 +140,15 @@ func (c *Configuration) expandEnv() {
 	c.RemoveMake = os.ExpandEnv(c.RemoveMake)
 }
 
+func expandEnvOrHome(path string) string {
+	path = os.ExpandEnv(path)
+	if strings.HasPrefix(path, "~/") {
+		path = filepath.Join(os.Getenv("HOME"), path[2:])
+	}
+
+	return path
+}
+
 func (c *Configuration) String() string {
 	var buf bytes.Buffer
 	enc := json.NewEncoder(&buf)

+ 33 - 0
pkg/settings/config_test.go

@@ -75,6 +75,39 @@ func TestNewConfigAURDEST(t *testing.T) {
 	assert.NoError(t, err)
 }
 
+// Test tilde expansion in AURDEST
+func TestNewConfigAURDESTTildeExpansion(t *testing.T) {
+	configDir := t.TempDir()
+	err := os.MkdirAll(filepath.Join(configDir, "yay"), 0o755)
+	assert.NoError(t, err)
+
+	t.Setenv("XDG_CONFIG_HOME", configDir)
+
+	homeDir := t.TempDir()
+	cacheDir := t.TempDir()
+
+	config := map[string]string{"BuildDir": filepath.Join(cacheDir, "test-other-dir")}
+	t.Setenv("AURDEST", "~/test-build-dir")
+	t.Setenv("HOME", homeDir)
+
+	f, err := os.Create(filepath.Join(configDir, "yay", "config.json"))
+	assert.NoError(t, err)
+
+	defer f.Close()
+
+	configJSON, _ := json.Marshal(config)
+	_, err = f.WriteString(string(configJSON))
+	assert.NoError(t, err)
+
+	newConfig, err := NewConfig("v1.0.0")
+	assert.NoError(t, err)
+
+	assert.Equal(t, filepath.Join(homeDir, "test-build-dir"), newConfig.BuildDir)
+
+	_, err = os.Stat(filepath.Join(homeDir, "test-build-dir"))
+	assert.NoError(t, err)
+}
+
 // GIVEN default config
 // WHEN setPrivilegeElevator gets called
 // THEN sudobin should stay as "sudo" (given sudo exists)