mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	Fix loading customCommands from per-repo config file (#3835)
- **PR Description** Any newly loaded custom command coming from the per-repo config file should add to the global ones (or override an existing one in the global one), rather than replace all global ones.
This commit is contained in:
		| @@ -196,10 +196,14 @@ func loadUserConfig(configFiles []*ConfigFile, base *UserConfig) (*UserConfig, e | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		existingCustomCommands := base.CustomCommands | ||||
|  | ||||
| 		if err := yaml.Unmarshal(content, base); err != nil { | ||||
| 			return nil, fmt.Errorf("The config at `%s` couldn't be parsed, please inspect it before opening up an issue.\n%w", path, err) | ||||
| 		} | ||||
|  | ||||
| 		base.CustomCommands = append(base.CustomCommands, existingCustomCommands...) | ||||
|  | ||||
| 		if err := base.Validate(); err != nil { | ||||
| 			return nil, fmt.Errorf("The config at `%s` has a validation error.\n%w", path, err) | ||||
| 		} | ||||
|   | ||||
| @@ -30,7 +30,7 @@ func (self *FileSystem) FileContent(path string, matcher *TextMatcher) { | ||||
| 	self.assertWithRetries(func() (bool, string) { | ||||
| 		_, err := os.Stat(path) | ||||
| 		if os.IsNotExist(err) { | ||||
| 			return false, fmt.Sprintf("Expected path '%s' to not exist, but it does", path) | ||||
| 			return false, fmt.Sprintf("Expected path '%s' to exist, but it does not", path) | ||||
| 		} | ||||
|  | ||||
| 		output, err := os.ReadFile(path) | ||||
|   | ||||
| @@ -0,0 +1,60 @@ | ||||
| package config | ||||
|  | ||||
| import ( | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"github.com/jesseduffield/lazygit/pkg/config" | ||||
| 	. "github.com/jesseduffield/lazygit/pkg/integration/components" | ||||
| ) | ||||
|  | ||||
| var CustomCommandsInPerRepoConfig = NewIntegrationTest(NewIntegrationTestArgs{ | ||||
| 	Description:  "Custom commands in per-repo config add to the global ones instead of replacing them", | ||||
| 	ExtraCmdArgs: []string{}, | ||||
| 	Skip:         false, | ||||
| 	SetupConfig: func(cfg *config.AppConfig) { | ||||
| 		otherRepo, _ := filepath.Abs("../other") | ||||
| 		cfg.GetAppState().RecentRepos = []string{otherRepo} | ||||
|  | ||||
| 		cfg.GetUserConfig().CustomCommands = []config.CustomCommand{ | ||||
| 			{ | ||||
| 				Key:     "X", | ||||
| 				Context: "global", | ||||
| 				Command: "printf 'global X' > file.txt", | ||||
| 			}, | ||||
| 			{ | ||||
| 				Key:     "Y", | ||||
| 				Context: "global", | ||||
| 				Command: "printf 'global Y' > file.txt", | ||||
| 			}, | ||||
| 		} | ||||
| 	}, | ||||
| 	SetupRepo: func(shell *Shell) { | ||||
| 		shell.CloneNonBare("other") | ||||
| 		shell.CreateFile("../other/.git/lazygit.yml", ` | ||||
| customCommands: | ||||
|   - key: Y | ||||
|     context: global | ||||
|     command: printf 'local Y' > file.txt | ||||
|   - key: Z | ||||
|     context: global | ||||
|     command: printf 'local Z' > file.txt`) | ||||
| 	}, | ||||
| 	Run: func(t *TestDriver, keys config.KeybindingConfig) { | ||||
| 		t.GlobalPress(keys.Universal.OpenRecentRepos) | ||||
| 		t.ExpectPopup().Menu().Title(Equals("Recent repositories")). | ||||
| 			Lines( | ||||
| 				Contains("other").IsSelected(), | ||||
| 				Contains("Cancel"), | ||||
| 			).Confirm() | ||||
| 		t.Views().Status().Content(Contains("other → master")) | ||||
|  | ||||
| 		t.GlobalPress("X") | ||||
| 		t.FileSystem().FileContent("../other/file.txt", Equals("global X")) | ||||
|  | ||||
| 		t.GlobalPress("Y") | ||||
| 		t.FileSystem().FileContent("../other/file.txt", Equals("local Y")) | ||||
|  | ||||
| 		t.GlobalPress("Z") | ||||
| 		t.FileSystem().FileContent("../other/file.txt", Equals("local Z")) | ||||
| 	}, | ||||
| }) | ||||
| @@ -110,6 +110,7 @@ var tests = []*components.IntegrationTest{ | ||||
| 	commit.Staged, | ||||
| 	commit.StagedWithoutHooks, | ||||
| 	commit.Unstaged, | ||||
| 	config.CustomCommandsInPerRepoConfig, | ||||
| 	config.RemoteNamedStar, | ||||
| 	conflicts.Filter, | ||||
| 	conflicts.ResolveExternally, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user