mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Sort branches and tags by date descending (#21136)
This fixes #5709 and #17316 by changing the order of listed branches and tags to show the ones with latest commits atop. It's achieved with changing underlying "show-ref" git command with "for-each-ref" as suggested in https://stackoverflow.com/a/5188364 Also, it's passing format string so the output matches "show-ref" command output. close #5709 close #17316
This commit is contained in:
		| @@ -63,7 +63,7 @@ func (repo *Repository) IsBranchExist(name string) bool { | ||||
| // GetBranchNames returns branches from the repository, skipping skip initial branches and | ||||
| // returning at most limit branches, or all branches if limit is 0. | ||||
| func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) { | ||||
| 	return callShowRef(repo.Ctx, repo.Path, BranchPrefix, "--heads", skip, limit) | ||||
| 	return callShowRef(repo.Ctx, repo.Path, BranchPrefix, BranchPrefix+" --sort=-committerdate", skip, limit) | ||||
| } | ||||
|  | ||||
| // WalkReferences walks all the references from the repository | ||||
| @@ -77,9 +77,9 @@ func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walk | ||||
| 	var arg string | ||||
| 	switch refType { | ||||
| 	case ObjectTag: | ||||
| 		arg = "--tags" | ||||
| 		arg = TagPrefix + " --sort=-taggerdate" | ||||
| 	case ObjectBranch: | ||||
| 		arg = "--heads" | ||||
| 		arg = BranchPrefix + " --sort=-committerdate" | ||||
| 	default: | ||||
| 		arg = "" | ||||
| 	} | ||||
| @@ -107,9 +107,9 @@ func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, wal | ||||
|  | ||||
| 	go func() { | ||||
| 		stderrBuilder := &strings.Builder{} | ||||
| 		args := []string{"show-ref"} | ||||
| 		args := []string{"for-each-ref", "--format=%(objectname) %(refname)"} | ||||
| 		if arg != "" { | ||||
| 			args = append(args, arg) | ||||
| 			args = append(args, strings.Fields(arg)...) | ||||
| 		} | ||||
| 		err := NewCommand(ctx, args...).Run(&RunOpts{ | ||||
| 			Dir:    repoPath, | ||||
|   | ||||
| @@ -22,14 +22,14 @@ func TestRepository_GetBranches(t *testing.T) { | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Len(t, branches, 2) | ||||
| 	assert.EqualValues(t, 3, countAll) | ||||
| 	assert.ElementsMatch(t, []string{"branch1", "branch2"}, branches) | ||||
| 	assert.ElementsMatch(t, []string{"master", "branch2"}, branches) | ||||
|  | ||||
| 	branches, countAll, err = bareRepo1.GetBranchNames(0, 0) | ||||
|  | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Len(t, branches, 3) | ||||
| 	assert.EqualValues(t, 3, countAll) | ||||
| 	assert.ElementsMatch(t, []string{"branch1", "branch2", "master"}, branches) | ||||
| 	assert.ElementsMatch(t, []string{"master", "branch2", "branch1"}, branches) | ||||
|  | ||||
| 	branches, countAll, err = bareRepo1.GetBranchNames(5, 1) | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,7 @@ func (repo *Repository) IsTagExist(name string) bool { | ||||
| // GetTags returns all tags of the repository. | ||||
| // returning at most limit tags, or all if limit is 0. | ||||
| func (repo *Repository) GetTags(skip, limit int) (tags []string, err error) { | ||||
| 	tags, _, err = callShowRef(repo.Ctx, repo.Path, TagPrefix, "--tags", skip, limit) | ||||
| 	tags, _, err = callShowRef(repo.Ctx, repo.Path, TagPrefix, TagPrefix+" --sort=-taggerdate", skip, limit) | ||||
| 	return tags, err | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user