mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	get remote branches when getting remotes
This commit is contained in:
		| @@ -17,6 +17,7 @@ type Branch struct { | ||||
| 	Recency   string | ||||
| 	Pushables string | ||||
| 	Pullables string | ||||
| 	Hash      string | ||||
| 	Selected  bool | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1061,40 +1061,3 @@ func (c *GitCommand) BeginInteractiveRebaseForCommit(commits []*Commit, commitIn | ||||
| func (c *GitCommand) SetUpstreamBranch(upstream string) error { | ||||
| 	return c.OSCommand.RunCommand(fmt.Sprintf("git branch -u %s", upstream)) | ||||
| } | ||||
|  | ||||
| func (c *GitCommand) GetRemotes() ([]*Remote, error) { | ||||
| 	goGitRemotes, err := c.Repo.Remotes() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return nil, nil | ||||
|  | ||||
| 	remotes := make([]*Remote, len(goGitRemotes)) | ||||
|  | ||||
| 	// TODO: consider including the goGitRemote itself | ||||
| 	for i, goGitRemote := range goGitRemotes { | ||||
| 		goGitBranches, err := goGitRemote.List(&gogit.ListOptions{}) | ||||
| 		if err != nil { | ||||
| 			c.Log.Warn(err) | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		branches := []*Branch{} | ||||
| 		for _, goGitBranch := range goGitBranches { | ||||
| 			// for now we're only getting branch references, not tags/notes/etc | ||||
| 			if goGitBranch.Name().IsBranch() { | ||||
| 				branches = append(branches, &Branch{ | ||||
| 					Name: goGitBranch.Name().String(), | ||||
| 				}) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		remotes[i] = &Remote{ | ||||
| 			Name:     goGitRemote.Config().Name, | ||||
| 			Urls:     goGitRemote.Config().URLs, | ||||
| 			Branches: branches, | ||||
| 		} | ||||
| 	} | ||||
| 	return remotes, nil | ||||
| } | ||||
|   | ||||
							
								
								
									
										70
									
								
								pkg/commands/loading_remotes.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								pkg/commands/loading_remotes.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| package commands | ||||
|  | ||||
| import ( | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| func (c *GitCommand) GetBranchesFromDir(dirPath string) ([]*Branch, error) { | ||||
| 	branches := []*Branch{} | ||||
| 	err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error { | ||||
| 		if err != nil { | ||||
| 			// it's possible that go-git is referencing a remote we don't have locally | ||||
| 			// in which case we'll just swallow this error | ||||
| 			c.Log.Error(err) | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		if info.IsDir() { | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		// it's a file: we need to get the path and work out the branch name from that | ||||
| 		fileContents, err := ioutil.ReadFile(path) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		branches = append(branches, &Branch{ | ||||
| 			Name: strings.TrimPrefix(path, dirPath)[1:], // stripping prefix slash | ||||
| 			Hash: strings.TrimSpace(string(fileContents)), | ||||
| 		}) | ||||
|  | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return branches, nil | ||||
| } | ||||
|  | ||||
| func (c *GitCommand) GetRemotes() ([]*Remote, error) { | ||||
| 	goGitRemotes, err := c.Repo.Remotes() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// first step is to get our remotes from go-git | ||||
| 	remotes := make([]*Remote, len(goGitRemotes)) | ||||
| 	for i, goGitRemote := range goGitRemotes { | ||||
| 		name := goGitRemote.Config().Name | ||||
| 		c.Log.Warn(name) | ||||
|  | ||||
| 		// can't seem to easily get the branches of the remotes from go-git so we'll | ||||
| 		// traverse the directory recursively | ||||
| 		branches, err := c.GetBranchesFromDir(filepath.Join(".git", "refs", "remotes", name)) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		remotes[i] = &Remote{ | ||||
| 			Name:     goGitRemote.Config().Name, | ||||
| 			Urls:     goGitRemote.Config().URLs, | ||||
| 			Branches: branches, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return remotes, nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user