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