]> source.dussan.org Git - gitea.git/commitdiff
Rewrite existing repo units if setting is not included in api body (#7811)
authorDavid Svantesson <davidsvantesson@gmail.com>
Sun, 11 Aug 2019 09:45:45 +0000 (11:45 +0200)
committerLauris BH <lauris@nix.lv>
Sun, 11 Aug 2019 09:45:45 +0000 (12:45 +0300)
Signed-off-by: David Svantesson <davidsvantesson@gmail.com>
routers/api/v1/repo/repo.go

index 26cfff51ce76bc3bf98fc5a64343757f5253886e..a2b1c5941cd2e0d985d2cac5aef07c9e5009c982 100644 (file)
@@ -646,89 +646,102 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
                })
        }
 
-       if opts.HasIssues != nil {
-               if *opts.HasIssues {
-                       // We don't currently allow setting individual issue settings through the API,
-                       // only can enable/disable issues, so when enabling issues,
-                       // we either get the existing config which means it was already enabled,
-                       // or create a new config since it doesn't exist.
-                       unit, err := repo.GetUnit(models.UnitTypeIssues)
-                       var config *models.IssuesConfig
-                       if err != nil {
-                               // Unit type doesn't exist so we make a new config file with default values
-                               config = &models.IssuesConfig{
-                                       EnableTimetracker:                true,
-                                       AllowOnlyContributorsToTrackTime: true,
-                                       EnableDependencies:               true,
-                               }
-                       } else {
-                               config = unit.IssuesConfig()
+       if opts.HasIssues == nil {
+               // If HasIssues setting not touched, rewrite existing repo unit
+               if unit, err := repo.GetUnit(models.UnitTypeIssues); err == nil {
+                       units = append(units, *unit)
+               } else if unit, err := repo.GetUnit(models.UnitTypeExternalTracker); err == nil {
+                       units = append(units, *unit)
+               }
+       } else if *opts.HasIssues {
+               // We don't currently allow setting individual issue settings through the API,
+               // only can enable/disable issues, so when enabling issues,
+               // we either get the existing config which means it was already enabled,
+               // or create a new config since it doesn't exist.
+               unit, err := repo.GetUnit(models.UnitTypeIssues)
+               var config *models.IssuesConfig
+               if err != nil {
+                       // Unit type doesn't exist so we make a new config file with default values
+                       config = &models.IssuesConfig{
+                               EnableTimetracker:                true,
+                               AllowOnlyContributorsToTrackTime: true,
+                               EnableDependencies:               true,
                        }
-                       units = append(units, models.RepoUnit{
-                               RepoID: repo.ID,
-                               Type:   models.UnitTypeIssues,
-                               Config: config,
-                       })
+               } else {
+                       config = unit.IssuesConfig()
                }
+               units = append(units, models.RepoUnit{
+                       RepoID: repo.ID,
+                       Type:   models.UnitTypeIssues,
+                       Config: config,
+               })
        }
 
-       if opts.HasWiki != nil {
-               if *opts.HasWiki {
-                       // We don't currently allow setting individual wiki settings through the API,
-                       // only can enable/disable the wiki, so when enabling the wiki,
-                       // we either get the existing config which means it was already enabled,
-                       // or create a new config since it doesn't exist.
-                       config := &models.UnitConfig{}
-                       units = append(units, models.RepoUnit{
-                               RepoID: repo.ID,
-                               Type:   models.UnitTypeWiki,
-                               Config: config,
-                       })
+       if opts.HasWiki == nil {
+               // If HasWiki setting not touched, rewrite existing repo unit
+               if unit, err := repo.GetUnit(models.UnitTypeWiki); err == nil {
+                       units = append(units, *unit)
+               } else if unit, err := repo.GetUnit(models.UnitTypeExternalWiki); err == nil {
+                       units = append(units, *unit)
                }
+       } else if *opts.HasWiki {
+               // We don't currently allow setting individual wiki settings through the API,
+               // only can enable/disable the wiki, so when enabling the wiki,
+               // we either get the existing config which means it was already enabled,
+               // or create a new config since it doesn't exist.
+               config := &models.UnitConfig{}
+               units = append(units, models.RepoUnit{
+                       RepoID: repo.ID,
+                       Type:   models.UnitTypeWiki,
+                       Config: config,
+               })
        }
 
-       if opts.HasPullRequests != nil {
-               if *opts.HasPullRequests {
-                       // We do allow setting individual PR settings through the API, so
-                       // we get the config settings and then set them
-                       // if those settings were provided in the opts.
-                       unit, err := repo.GetUnit(models.UnitTypePullRequests)
-                       var config *models.PullRequestsConfig
-                       if err != nil {
-                               // Unit type doesn't exist so we make a new config file with default values
-                               config = &models.PullRequestsConfig{
-                                       IgnoreWhitespaceConflicts: false,
-                                       AllowMerge:                true,
-                                       AllowRebase:               true,
-                                       AllowRebaseMerge:          true,
-                                       AllowSquash:               true,
-                               }
-                       } else {
-                               config = unit.PullRequestsConfig()
-                       }
-
-                       if opts.IgnoreWhitespaceConflicts != nil {
-                               config.IgnoreWhitespaceConflicts = *opts.IgnoreWhitespaceConflicts
-                       }
-                       if opts.AllowMerge != nil {
-                               config.AllowMerge = *opts.AllowMerge
-                       }
-                       if opts.AllowRebase != nil {
-                               config.AllowRebase = *opts.AllowRebase
-                       }
-                       if opts.AllowRebaseMerge != nil {
-                               config.AllowRebaseMerge = *opts.AllowRebaseMerge
-                       }
-                       if opts.AllowSquash != nil {
-                               config.AllowSquash = *opts.AllowSquash
+       if opts.HasPullRequests == nil {
+               // If HasPullRequest setting not touched, rewrite existing repo unit
+               if unit, err := repo.GetUnit(models.UnitTypePullRequests); err == nil {
+                       units = append(units, *unit)
+               }
+       } else if *opts.HasPullRequests {
+               // We do allow setting individual PR settings through the API, so
+               // we get the config settings and then set them
+               // if those settings were provided in the opts.
+               unit, err := repo.GetUnit(models.UnitTypePullRequests)
+               var config *models.PullRequestsConfig
+               if err != nil {
+                       // Unit type doesn't exist so we make a new config file with default values
+                       config = &models.PullRequestsConfig{
+                               IgnoreWhitespaceConflicts: false,
+                               AllowMerge:                true,
+                               AllowRebase:               true,
+                               AllowRebaseMerge:          true,
+                               AllowSquash:               true,
                        }
+               } else {
+                       config = unit.PullRequestsConfig()
+               }
 
-                       units = append(units, models.RepoUnit{
-                               RepoID: repo.ID,
-                               Type:   models.UnitTypePullRequests,
-                               Config: config,
-                       })
+               if opts.IgnoreWhitespaceConflicts != nil {
+                       config.IgnoreWhitespaceConflicts = *opts.IgnoreWhitespaceConflicts
+               }
+               if opts.AllowMerge != nil {
+                       config.AllowMerge = *opts.AllowMerge
+               }
+               if opts.AllowRebase != nil {
+                       config.AllowRebase = *opts.AllowRebase
+               }
+               if opts.AllowRebaseMerge != nil {
+                       config.AllowRebaseMerge = *opts.AllowRebaseMerge
+               }
+               if opts.AllowSquash != nil {
+                       config.AllowSquash = *opts.AllowSquash
                }
+
+               units = append(units, models.RepoUnit{
+                       RepoID: repo.ID,
+                       Type:   models.UnitTypePullRequests,
+                       Config: config,
+               })
        }
 
        if err := models.UpdateRepositoryUnits(repo, units); err != nil {