Fix missing collabrative repos (#2367)
* fix missing collabrative repos * fix bug of collabrative * fix SQL quotes
This commit is contained in:
		
					parent
					
						
							
								da230a2872
							
						
					
				
			
			
				commit
				
					
						f61a1d210c
					
				
			
		
					 3 changed files with 44 additions and 39 deletions
				
			
		| 
						 | 
				
			
			@ -120,10 +120,12 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 | 
			
		|||
		opts.Page = 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var starJoin bool
 | 
			
		||||
	if opts.Starred && opts.OwnerID > 0 {
 | 
			
		||||
		cond = builder.Eq{
 | 
			
		||||
			"star.uid": opts.OwnerID,
 | 
			
		||||
		}
 | 
			
		||||
		starJoin = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	opts.Keyword = strings.ToLower(opts.Keyword)
 | 
			
		||||
| 
						 | 
				
			
			@ -133,34 +135,34 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 | 
			
		|||
 | 
			
		||||
	// Append conditions
 | 
			
		||||
	if !opts.Starred && opts.OwnerID > 0 {
 | 
			
		||||
		cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
 | 
			
		||||
	}
 | 
			
		||||
	if !opts.Private {
 | 
			
		||||
		cond = cond.And(builder.Eq{"is_private": false})
 | 
			
		||||
	}
 | 
			
		||||
		var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
 | 
			
		||||
		if opts.Searcher != nil {
 | 
			
		||||
			var ownerIds []int64
 | 
			
		||||
 | 
			
		||||
	if opts.Searcher != nil {
 | 
			
		||||
		var ownerIds []int64
 | 
			
		||||
			ownerIds = append(ownerIds, opts.Searcher.ID)
 | 
			
		||||
			err = opts.Searcher.GetOrganizations(true)
 | 
			
		||||
 | 
			
		||||
		ownerIds = append(ownerIds, opts.Searcher.ID)
 | 
			
		||||
		err = opts.Searcher.GetOrganizations(true)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, 0, fmt.Errorf("Organization: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, 0, fmt.Errorf("Organization: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
			for _, org := range opts.Searcher.Orgs {
 | 
			
		||||
				ownerIds = append(ownerIds, org.ID)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		for _, org := range opts.Searcher.Orgs {
 | 
			
		||||
			ownerIds = append(ownerIds, org.ID)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		searcherReposCond := builder.In("owner_id", ownerIds)
 | 
			
		||||
		if opts.Collaborate {
 | 
			
		||||
			searcherReposCond = searcherReposCond.Or(builder.Expr(`id IN (SELECT repo_id FROM "access" WHERE access.user_id = ? AND owner_id != ?)`,
 | 
			
		||||
				opts.Searcher.ID, opts.Searcher.ID))
 | 
			
		||||
			searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
 | 
			
		||||
			if opts.Collaborate {
 | 
			
		||||
				searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ? AND owner_id != ?)",
 | 
			
		||||
					opts.Searcher.ID, opts.Searcher.ID))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		cond = cond.And(searcherReposCond)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !opts.Private {
 | 
			
		||||
		cond = cond.And(builder.Eq{"is_private": false})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(opts.OrderBy) == 0 {
 | 
			
		||||
		opts.OrderBy = "name ASC"
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +170,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 | 
			
		|||
	sess := x.NewSession()
 | 
			
		||||
	defer sess.Close()
 | 
			
		||||
 | 
			
		||||
	if opts.Starred && opts.OwnerID > 0 {
 | 
			
		||||
	if starJoin {
 | 
			
		||||
		count, err = sess.
 | 
			
		||||
			Join("INNER", "star", "star.repo_id = repository.id").
 | 
			
		||||
			Where(cond).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,11 +112,12 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 | 
			
		|||
	keyword := strings.Trim(ctx.Query("q"), " ")
 | 
			
		||||
	if len(keyword) == 0 {
 | 
			
		||||
		repos, count, err = opts.Ranger(&models.SearchRepoOptions{
 | 
			
		||||
			Page:     page,
 | 
			
		||||
			PageSize: opts.PageSize,
 | 
			
		||||
			Searcher: ctx.User,
 | 
			
		||||
			OrderBy:  orderBy,
 | 
			
		||||
			Private:  opts.Private,
 | 
			
		||||
			Page:        page,
 | 
			
		||||
			PageSize:    opts.PageSize,
 | 
			
		||||
			Searcher:    ctx.User,
 | 
			
		||||
			OrderBy:     orderBy,
 | 
			
		||||
			Private:     opts.Private,
 | 
			
		||||
			Collaborate: true,
 | 
			
		||||
		})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.Handle(500, "opts.Ranger", err)
 | 
			
		||||
| 
						 | 
				
			
			@ -125,12 +126,13 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 | 
			
		|||
	} else {
 | 
			
		||||
		if isKeywordValid(keyword) {
 | 
			
		||||
			repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
 | 
			
		||||
				Keyword:  keyword,
 | 
			
		||||
				OrderBy:  orderBy,
 | 
			
		||||
				Private:  opts.Private,
 | 
			
		||||
				Page:     page,
 | 
			
		||||
				PageSize: opts.PageSize,
 | 
			
		||||
				Searcher: ctx.User,
 | 
			
		||||
				Keyword:     keyword,
 | 
			
		||||
				OrderBy:     orderBy,
 | 
			
		||||
				Private:     opts.Private,
 | 
			
		||||
				Page:        page,
 | 
			
		||||
				PageSize:    opts.PageSize,
 | 
			
		||||
				Searcher:    ctx.User,
 | 
			
		||||
				Collaborate: true,
 | 
			
		||||
			})
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				ctx.Handle(500, "SearchRepositoryByName", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -205,13 +205,14 @@ func Profile(ctx *context.Context) {
 | 
			
		|||
			ctx.Data["Total"] = total
 | 
			
		||||
		} else {
 | 
			
		||||
			repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
 | 
			
		||||
				Keyword:   keyword,
 | 
			
		||||
				OwnerID:   ctxUser.ID,
 | 
			
		||||
				OrderBy:   orderBy,
 | 
			
		||||
				Private:   showPrivate,
 | 
			
		||||
				Page:      page,
 | 
			
		||||
				IsProfile: true,
 | 
			
		||||
				PageSize:  setting.UI.User.RepoPagingNum,
 | 
			
		||||
				Keyword:     keyword,
 | 
			
		||||
				OwnerID:     ctxUser.ID,
 | 
			
		||||
				OrderBy:     orderBy,
 | 
			
		||||
				Private:     showPrivate,
 | 
			
		||||
				Page:        page,
 | 
			
		||||
				IsProfile:   true,
 | 
			
		||||
				PageSize:    setting.UI.User.RepoPagingNum,
 | 
			
		||||
				Collaborate: true,
 | 
			
		||||
			})
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				ctx.Handle(500, "SearchRepositoryByName", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue