Skip to content

Commit db7f8cb

Browse files
committed
Extract shared stash group membership loop
Reduce duplicated collaborator/member group traversal so identity matching behavior stays consistent across repository and organization checks.
1 parent 2d747c6 commit db7f8cb

2 files changed

Lines changed: 14 additions & 15 deletions

File tree

scm/driver/stash/org.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,26 @@ func (s *organizationService) IsMember(ctx context.Context, org, user string) (b
8282
if err != nil {
8383
return false, res, err
8484
}
85+
if isUserInGroups(ctx, user, groups, s.client, opts) {
86+
return true, res, nil
87+
}
88+
return false, res, nil
89+
}
90+
91+
func isUserInGroups(ctx context.Context, requestedUser string, groups []*projGroup, client *wrapper, opts *scm.ListOptions) bool {
8592
for _, pgroup := range groups {
86-
// Get list of users in a group
87-
users, err := usersInGroups(ctx, pgroup.Group.Name, s.client, opts)
93+
users, err := usersInGroups(ctx, pgroup.Group.Name, client, opts)
8894
if err != nil {
8995
continue
9096
}
9197
for _, member := range users {
92-
if isRequestedUser(user, member.Name, member.Slug) {
93-
return true, res, nil
98+
if isRequestedUser(requestedUser, member.Name, member.Slug) {
99+
return true
94100
}
95101
}
96102
}
97-
return false, res, nil
103+
104+
return false
98105
}
99106

100107
func isRequestedUser(requested, name, slug string) bool {

scm/driver/stash/repo.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,16 +276,8 @@ func (s *repositoryService) IsCollaborator(ctx context.Context, repo, user strin
276276
if err != nil {
277277
return false, resp, err
278278
}
279-
for _, pgroup := range groups {
280-
members, err := usersInGroups(ctx, pgroup.Group.Name, s.client, opts)
281-
if err != nil {
282-
continue
283-
}
284-
for _, member := range members {
285-
if isRequestedUser(user, member.Name, member.Slug) {
286-
return true, resp, nil
287-
}
288-
}
279+
if isUserInGroups(ctx, user, groups, s.client, opts) {
280+
return true, resp, nil
289281
}
290282

291283
return false, resp, nil

0 commit comments

Comments
 (0)