aboutsummaryrefslogtreecommitdiffstats
path: root/routers/api/v1/repo/repo.go
diff options
context:
space:
mode:
authorDavid Svantesson <davidsvantesson@gmail.com>2019-08-10 11:32:46 +0200
committerLauris BH <lauris@nix.lv>2019-08-10 12:32:46 +0300
commitcde95f99238cf02e6eb16b79261caf23b1988a76 (patch)
tree530c5736a7c54e769bec191df6bda15c58f2d534 /routers/api/v1/repo/repo.go
parent2ed21e7e09e48e847eff75ef9b665767aadbd30e (diff)
downloadgitea-cde95f99238cf02e6eb16b79261caf23b1988a76.tar.gz
gitea-cde95f99238cf02e6eb16b79261caf23b1988a76.zip
Rewrite existing repo units if setting is not included in api body (#7763)
* Rewrite existing repo units if setting is not included in api body Signed-off-by: David Svantesson <davidsvantesson@gmail.com> * else-if on one row
Diffstat (limited to 'routers/api/v1/repo/repo.go')
-rw-r--r--routers/api/v1/repo/repo.go159
1 files changed, 86 insertions, 73 deletions
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index db8460ac84..8d7e43edff 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -651,89 +651,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 {