@@ -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