Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ef613ee

Browse files
authored
Add has_code to repository REST API (#35214)
similar to how we can enable/disable repos or issues on a repo add the code unit as option to it. affects ``` PATCH /repos/{owner}/{repo} ``` --- *Sponsored by Kithara Software GmbH*
1 parent 793815a commit ef613ee

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

‎modules/structs/repo.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ type Repository struct {
8484
Updated time.Time `json:"updated_at"`
8585
ArchivedAt time.Time `json:"archived_at"`
8686
Permissions *Permission `json:"permissions,omitempty"`
87+
HasCode bool `json:"has_code"`
8788
HasIssues bool `json:"has_issues"`
8889
InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
8990
ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
@@ -170,6 +171,8 @@ type EditRepoOption struct {
170171
Private *bool `json:"private,omitempty"`
171172
// either `true` to make this repository a template or `false` to make it a normal repository
172173
Template *bool `json:"template,omitempty"`
174+
// either `true` to enable code for this repository or `false` to disable it.
175+
HasCode *bool `json:"has_code,omitempty"`
173176
// either `true` to enable issues for this repository or `false` to disable them.
174177
HasIssues *bool `json:"has_issues,omitempty"`
175178
// set this structure to configure internal issue tracker

‎routers/api/v1/repo/repo.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,18 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
869869
}
870870
}
871871

872+
if opts.HasCode != nil && !unit_model.TypeCode.UnitGlobalDisabled() {
873+
if *opts.HasCode {
874+
units = append(units, repo_model.RepoUnit{
875+
RepoID: repo.ID,
876+
Type: unit_model.TypeCode,
877+
Config: &repo_model.UnitConfig{},
878+
})
879+
} else {
880+
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeCode)
881+
}
882+
}
883+
872884
if opts.HasPullRequests != nil && !unit_model.TypePullRequests.UnitGlobalDisabled() {
873885
if *opts.HasPullRequests {
874886
// We do allow setting individual PR settings through the API, so

‎templates/swagger/v1_json.tmpl

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎tests/integration/api_repo_edit_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,36 @@ func getRepoEditOptionFromRepo(repo *repo_model.Repository) *api.EditRepoOption
7676
allowFastForwardOnly = config.AllowFastForwardOnly
7777
}
7878
archived := repo.IsArchived
79+
hasProjects := false
80+
var projectsMode *string
81+
if unit, err := repo.GetUnit(db.DefaultContext, unit_model.TypeProjects); err == nil && unit != nil {
82+
hasProjects = true
83+
pm := string(unit.ProjectsConfig().ProjectsMode)
84+
projectsMode = &pm
85+
}
86+
hasCode := repo.UnitEnabled(db.DefaultContext, unit_model.TypeCode)
87+
hasPackages := repo.UnitEnabled(db.DefaultContext, unit_model.TypePackages)
88+
hasReleases := repo.UnitEnabled(db.DefaultContext, unit_model.TypeReleases)
89+
hasActions := false
90+
if unit, err := repo.GetUnit(db.DefaultContext, unit_model.TypeActions); err == nil && unit != nil {
91+
hasActions = true
92+
// TODO: expose action config of repo to api
93+
// actionsConfig = &api.RepoActionsConfig{
94+
// DisabledWorkflows: unit.ActionsConfig().DisabledWorkflows,
95+
// }
96+
}
7997
return &api.EditRepoOption{
8098
Name: &name,
8199
Description: &description,
82100
Website: &website,
83101
Private: &private,
84102
HasIssues: &hasIssues,
103+
HasProjects: &hasProjects,
104+
ProjectsMode: projectsMode,
105+
HasCode: &hasCode,
106+
HasPackages: &hasPackages,
107+
HasReleases: &hasReleases,
108+
HasActions: &hasActions,
85109
ExternalTracker: externalTracker,
86110
InternalTracker: internalTracker,
87111
HasWiki: &hasWiki,
@@ -108,6 +132,11 @@ func getNewRepoEditOption(opts *api.EditRepoOption) *api.EditRepoOption {
108132
private := !*opts.Private
109133
hasIssues := !*opts.HasIssues
110134
hasWiki := !*opts.HasWiki
135+
hasProjects := !*opts.HasProjects
136+
hasCode := !*opts.HasCode
137+
hasPackages := !*opts.HasPackages
138+
hasReleases := !*opts.HasReleases
139+
hasActions := !*opts.HasActions
111140
defaultBranch := "master"
112141
hasPullRequests := !*opts.HasPullRequests
113142
ignoreWhitespaceConflicts := !*opts.IgnoreWhitespaceConflicts
@@ -125,6 +154,11 @@ func getNewRepoEditOption(opts *api.EditRepoOption) *api.EditRepoOption {
125154
DefaultBranch: &defaultBranch,
126155
HasIssues: &hasIssues,
127156
HasWiki: &hasWiki,
157+
HasProjects: &hasProjects,
158+
HasCode: &hasCode,
159+
HasPackages: &hasPackages,
160+
HasReleases: &hasReleases,
161+
HasActions: &hasActions,
128162
HasPullRequests: &hasPullRequests,
129163
IgnoreWhitespaceConflicts: &ignoreWhitespaceConflicts,
130164
AllowMerge: &allowMerge,
@@ -156,6 +190,11 @@ func TestAPIRepoEdit(t *testing.T) {
156190

157191
// Test editing a repo1 which user2 owns, changing name and many properties
158192
origRepoEditOption := getRepoEditOptionFromRepo(repo1)
193+
assert.True(t, *origRepoEditOption.HasCode)
194+
assert.True(t, *origRepoEditOption.HasPackages)
195+
assert.True(t, *origRepoEditOption.HasProjects)
196+
assert.True(t, *origRepoEditOption.HasReleases)
197+
assert.True(t, *origRepoEditOption.HasActions)
159198
repoEditOption := getNewRepoEditOption(origRepoEditOption)
160199
req := NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/repos/%s/%s", user2.Name, repo1.Name), &repoEditOption).
161200
AddTokenAuth(token2)
@@ -177,6 +216,11 @@ func TestAPIRepoEdit(t *testing.T) {
177216
assert.Equal(t, *repoEditOption.Archived, *repo1editedOption.Archived)
178217
assert.Equal(t, *repoEditOption.Private, *repo1editedOption.Private)
179218
assert.Equal(t, *repoEditOption.HasWiki, *repo1editedOption.HasWiki)
219+
assert.Equal(t, *repoEditOption.HasCode, *repo1editedOption.HasCode)
220+
assert.Equal(t, *repoEditOption.HasPackages, *repo1editedOption.HasPackages)
221+
assert.Equal(t, *repoEditOption.HasProjects, *repo1editedOption.HasProjects)
222+
assert.Equal(t, *repoEditOption.HasReleases, *repo1editedOption.HasReleases)
223+
assert.Equal(t, *repoEditOption.HasActions, *repo1editedOption.HasActions)
180224

181225
// Test editing repo1 to use internal issue and wiki (default)
182226
*repoEditOption.HasIssues = true
@@ -224,6 +268,11 @@ func TestAPIRepoEdit(t *testing.T) {
224268
assert.Equal(t, *repo1editedOption.ExternalTracker, *repoEditOption.ExternalTracker)
225269
assert.True(t, *repo1editedOption.HasWiki)
226270
assert.Equal(t, *repo1editedOption.ExternalWiki, *repoEditOption.ExternalWiki)
271+
assert.False(t, *repo1editedOption.HasCode)
272+
assert.False(t, *repo1editedOption.HasPackages)
273+
assert.False(t, *repo1editedOption.HasProjects)
274+
assert.False(t, *repo1editedOption.HasReleases)
275+
assert.False(t, *repo1editedOption.HasActions)
227276

228277
repoEditOption.ExternalTracker.ExternalTrackerStyle = "regexp"
229278
repoEditOption.ExternalTracker.ExternalTrackerRegexpPattern = `(\d+)`
@@ -272,6 +321,11 @@ func TestAPIRepoEdit(t *testing.T) {
272321
assert.NotNil(t, *repo1editedOption.ExternalTracker)
273322
assert.True(t, *repo1editedOption.HasWiki)
274323
assert.NotNil(t, *repo1editedOption.ExternalWiki)
324+
assert.False(t, *repo1editedOption.HasCode)
325+
assert.False(t, *repo1editedOption.HasPackages)
326+
assert.False(t, *repo1editedOption.HasProjects)
327+
assert.False(t, *repo1editedOption.HasReleases)
328+
assert.False(t, *repo1editedOption.HasActions)
275329

276330
// reset repo in db
277331
req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/repos/%s/%s", user2.Name, *repoEditOption.Name), &origRepoEditOption).

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /