Skip to content

Commit 7ad2d03

Browse files
GiteaBotkemzeb
andauthored
Don't only list code-enabled repositories when using repository API (#30817) (#30848)
Backport #30817 by kemzeb We should be listing all repositories by default. Fixes #28483. Co-authored-by: Kemal Zebari <[email protected]>
1 parent ab2ef1a commit 7ad2d03

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

routers/api/v1/user/repo.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ package user
66
import (
77
"net/http"
88

9-
"code.gitea.io/gitea/models/perm"
109
access_model "code.gitea.io/gitea/models/perm/access"
1110
repo_model "code.gitea.io/gitea/models/repo"
12-
unit_model "code.gitea.io/gitea/models/unit"
1311
user_model "code.gitea.io/gitea/models/user"
1412
api "code.gitea.io/gitea/modules/structs"
1513
"code.gitea.io/gitea/routers/api/v1/utils"
@@ -44,7 +42,7 @@ func listUserRepos(ctx *context.APIContext, u *user_model.User, private bool) {
4442
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
4543
return
4644
}
47-
if ctx.IsSigned && ctx.Doer.IsAdmin || permission.UnitAccessMode(unit_model.TypeCode) >= perm.AccessModeRead {
45+
if ctx.IsSigned && ctx.Doer.IsAdmin || permission.HasAnyUnitAccess() {
4846
apiRepos = append(apiRepos, convert.ToRepo(ctx, repos[i], permission))
4947
}
5048
}

tests/integration/api_repo_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"code.gitea.io/gitea/models/db"
1414
access_model "code.gitea.io/gitea/models/perm/access"
1515
repo_model "code.gitea.io/gitea/models/repo"
16+
unit_model "code.gitea.io/gitea/models/unit"
1617
"code.gitea.io/gitea/models/unittest"
1718
user_model "code.gitea.io/gitea/models/user"
1819
"code.gitea.io/gitea/modules/setting"
@@ -326,6 +327,39 @@ func TestAPIOrgRepos(t *testing.T) {
326327
}
327328
}
328329

330+
// See issue #28483. Tests to make sure we consider more than just code unit-enabled repositories.
331+
func TestAPIOrgReposWithCodeUnitDisabled(t *testing.T) {
332+
defer tests.PrepareTestEnv(t)()
333+
repo21 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: "repo21"})
334+
org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo21.OwnerID})
335+
336+
// Disable code repository unit.
337+
var units []unit_model.Type
338+
units = append(units, unit_model.TypeCode)
339+
340+
if err := repo_service.UpdateRepositoryUnits(db.DefaultContext, repo21, nil, units); err != nil {
341+
assert.Fail(t, "should have been able to delete code repository unit; failed to %v", err)
342+
}
343+
assert.False(t, repo21.UnitEnabled(db.DefaultContext, unit_model.TypeCode))
344+
345+
session := loginUser(t, "user2")
346+
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadOrganization)
347+
348+
req := NewRequestf(t, "GET", "/api/v1/orgs/%s/repos", org3.Name).
349+
AddTokenAuth(token)
350+
351+
resp := MakeRequest(t, req, http.StatusOK)
352+
var apiRepos []*api.Repository
353+
DecodeJSON(t, resp, &apiRepos)
354+
355+
var repoNames []string
356+
for _, r := range apiRepos {
357+
repoNames = append(repoNames, r.Name)
358+
}
359+
360+
assert.Contains(t, repoNames, repo21.Name)
361+
}
362+
329363
func TestAPIGetRepoByIDUnauthorized(t *testing.T) {
330364
defer tests.PrepareTestEnv(t)()
331365
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})

0 commit comments

Comments
 (0)