mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 16:01:32 +01:00 
			
		
		
		
	fix: Wrong repo list on Explore page if user already loggin. (#1009)
* fix: Wrong repo list on Explore page if user already loggin. * fix: code readable. * fix: declare variable
This commit is contained in:
		
							parent
							
								
									d6748284bd
								
							
						
					
					
						commit
						83b6d03231
					
				| @ -132,3 +132,39 @@ | ||||
|   num_pulls: 0 | ||||
|   num_closed_pulls: 0 | ||||
|   is_mirror: false | ||||
| 
 | ||||
| - | ||||
|   id: 12 | ||||
|   owner_id: 14 | ||||
|   lower_name: test_repo_12 | ||||
|   name: test_repo_12 | ||||
|   is_private: false | ||||
|   num_issues: 0 | ||||
|   num_closed_issues: 0 | ||||
|   num_pulls: 0 | ||||
|   num_closed_pulls: 0 | ||||
|   is_mirror: false | ||||
| 
 | ||||
| - | ||||
|   id: 13 | ||||
|   owner_id: 14 | ||||
|   lower_name: test_repo_13 | ||||
|   name: test_repo_13 | ||||
|   is_private: true | ||||
|   num_issues: 0 | ||||
|   num_closed_issues: 0 | ||||
|   num_pulls: 0 | ||||
|   num_closed_pulls: 0 | ||||
|   is_mirror: false | ||||
| 
 | ||||
| - | ||||
|   id: 14 | ||||
|   owner_id: 14 | ||||
|   lower_name: test_repo_14 | ||||
|   name: test_repo_14 | ||||
|   is_private: false | ||||
|   num_issues: 0 | ||||
|   num_closed_issues: 0 | ||||
|   num_pulls: 0 | ||||
|   num_closed_pulls: 0 | ||||
|   is_mirror: false | ||||
|  | ||||
| @ -194,3 +194,18 @@ | ||||
|   avatar_email: user13@example.com | ||||
|   num_repos: 1 | ||||
|   is_active: true | ||||
| 
 | ||||
| - | ||||
|   id: 14 | ||||
|   lower_name: user14 | ||||
|   name: user14 | ||||
|   full_name: User 14 | ||||
|   email: user14@example.com | ||||
|   passwd: password | ||||
|   type: 0 # individual | ||||
|   salt: salt | ||||
|   is_admin: false | ||||
|   avatar: avatar14 | ||||
|   avatar_email: user13@example.com | ||||
|   num_repos: 3 | ||||
|   is_active: true | ||||
|  | ||||
| @ -30,6 +30,7 @@ import ( | ||||
| 
 | ||||
| 	"github.com/Unknwon/cae/zip" | ||||
| 	"github.com/Unknwon/com" | ||||
| 	"github.com/go-xorm/builder" | ||||
| 	"github.com/go-xorm/xorm" | ||||
| 	version "github.com/mcuadros/go-version" | ||||
| 	ini "gopkg.in/ini.v1" | ||||
| @ -1797,7 +1798,11 @@ type SearchRepoOptions struct { | ||||
| // SearchRepositoryByName takes keyword and part of repository name to search, | ||||
| // it returns results in given range and number of total results. | ||||
| func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ int64, _ error) { | ||||
| 	var sess *xorm.Session | ||||
| 	var ( | ||||
| 		sess *xorm.Session | ||||
| 		cond builder.Cond = builder.NewCond() | ||||
| 	) | ||||
| 
 | ||||
| 	if len(opts.Keyword) == 0 { | ||||
| 		return repos, 0, nil | ||||
| 	} | ||||
| @ -1810,26 +1815,24 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ in | ||||
| 	repos = make([]*Repository, 0, opts.PageSize) | ||||
| 
 | ||||
| 	if opts.Starred && opts.OwnerID > 0 { | ||||
| 		sess = x. | ||||
| 			Join("INNER", "star", "star.repo_id = repository.id"). | ||||
| 			Where("star.uid = ?", opts.OwnerID). | ||||
| 			And("lower_name LIKE ?", "%"+opts.Keyword+"%") | ||||
| 	} else { | ||||
| 		sess = x.Where("lower_name LIKE ?", "%"+opts.Keyword+"%") | ||||
| 		cond = builder.Eq{ | ||||
| 			"star.uid": opts.OwnerID, | ||||
| 		} | ||||
| 	} | ||||
| 	cond = cond.And(builder.Like{"lower_name", opts.Keyword}) | ||||
| 
 | ||||
| 	// Append conditions | ||||
| 	if !opts.Starred && opts.OwnerID > 0 { | ||||
| 		sess.And("owner_id = ?", opts.OwnerID) | ||||
| 		cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) | ||||
| 	} | ||||
| 	if !opts.Private { | ||||
| 		sess.And("is_private=?", false) | ||||
| 		cond = cond.And(builder.Eq{"is_private": false}) | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.Searcher != nil { | ||||
| 		var ownerIds []int64 | ||||
| 
 | ||||
| 		sess.Or("owner_id = ?", opts.Searcher.ID) | ||||
| 
 | ||||
| 		ownerIds = append(ownerIds, opts.Searcher.ID) | ||||
| 		err := opts.Searcher.GetOrganizations(true) | ||||
| 
 | ||||
| 		if err != nil { | ||||
| @ -1837,14 +1840,24 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, _ in | ||||
| 		} | ||||
| 
 | ||||
| 		for _, org := range opts.Searcher.Orgs { | ||||
| 			sess.Or("owner_id = ?", org.ID) | ||||
| 			ownerIds = append(ownerIds, org.ID) | ||||
| 		} | ||||
| 
 | ||||
| 		cond = cond.Or(builder.And(builder.Like{"lower_name", opts.Keyword}, builder.In("owner_id", ownerIds))) | ||||
| 	} | ||||
| 
 | ||||
| 	if len(opts.OrderBy) == 0 { | ||||
| 		opts.OrderBy = "name ASC" | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.Starred && opts.OwnerID > 0 { | ||||
| 		sess = x. | ||||
| 			Join("INNER", "star", "star.repo_id = repository.id"). | ||||
| 			Where(cond) | ||||
| 	} else { | ||||
| 		sess = x.Where(cond) | ||||
| 	} | ||||
| 
 | ||||
| 	var countSess xorm.Session | ||||
| 	countSess = *sess | ||||
| 	count, err := countSess.Count(new(Repository)) | ||||
|  | ||||
| @ -125,3 +125,55 @@ func TestForkRepository(t *testing.T) { | ||||
| 	assert.Error(t, err) | ||||
| 	assert.True(t, IsErrRepoAlreadyExist(err)) | ||||
| } | ||||
| 
 | ||||
| func TestSearchRepositoryByName(t *testing.T) { | ||||
| 	assert.NoError(t, PrepareTestDatabase()) | ||||
| 
 | ||||
| 	// test search public repository on explore page | ||||
| 	repos, count, err := SearchRepositoryByName(&SearchRepoOptions{ | ||||
| 		Keyword:  "repo_12", | ||||
| 		Page:     1, | ||||
| 		PageSize: 10, | ||||
| 		Searcher: nil, | ||||
| 	}) | ||||
| 
 | ||||
| 	assert.NotNil(t, repos) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "test_repo_12", repos[0].Name) | ||||
| 	assert.Equal(t, int64(1), count) | ||||
| 
 | ||||
| 	repos, count, err = SearchRepositoryByName(&SearchRepoOptions{ | ||||
| 		Keyword:  "test_repo", | ||||
| 		Page:     1, | ||||
| 		PageSize: 10, | ||||
| 		Searcher: nil, | ||||
| 	}) | ||||
| 
 | ||||
| 	assert.NotNil(t, repos) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, int64(2), count) | ||||
| 
 | ||||
| 	// test search private repository on explore page | ||||
| 	repos, count, err = SearchRepositoryByName(&SearchRepoOptions{ | ||||
| 		Keyword:  "repo_13", | ||||
| 		Page:     1, | ||||
| 		PageSize: 10, | ||||
| 		Searcher: &User{ID: 14}, | ||||
| 	}) | ||||
| 
 | ||||
| 	assert.NotNil(t, repos) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "test_repo_13", repos[0].Name) | ||||
| 	assert.Equal(t, int64(1), count) | ||||
| 
 | ||||
| 	repos, count, err = SearchRepositoryByName(&SearchRepoOptions{ | ||||
| 		Keyword:  "test_repo", | ||||
| 		Page:     1, | ||||
| 		PageSize: 10, | ||||
| 		Searcher: &User{ID: 14}, | ||||
| 	}) | ||||
| 
 | ||||
| 	assert.NotNil(t, repos) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, int64(3), count) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user