diff options
author | zeripath | 2021-06-03 06:09:43 +0100 |
---|---|---|
committer | GitHub | 2021-06-03 13:09:43 +0800 |
commit | ba74fdbda95bc27d8ade3720b52fa723443482d6 (patch) | |
tree | 38494161551696329add590f1cf1820a6bfb526b | |
parent | 0600f7972a254a157a31b8099b2879b0f35a4a50 (diff) |
Fix case change in ownernames (#16045) (#16050)
Backport #16045
If you change the case of a username the change needs to be propagated to their
repositories.
Signed-off-by: Andrew Thornton <art27@cantab.net>
-rw-r--r-- | models/repo.go | 20 | ||||
-rw-r--r-- | routers/org/setting.go | 9 | ||||
-rw-r--r-- | routers/user/setting/profile.go | 8 |
3 files changed, 36 insertions, 1 deletions
diff --git a/models/repo.go b/models/repo.go index f62be9d27..61b0e0f5b 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1349,6 +1349,26 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) { return sess.Commit() } +// UpdateRepositoryOwnerNames updates repository owner_names (this should only be used when the ownerName has changed case) +func UpdateRepositoryOwnerNames(ownerID int64, ownerName string) error { + if ownerID == 0 { + return nil + } + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + + if _, err := sess.Where("owner_id = ?", ownerID).Cols("owner_name").Update(&Repository{ + OwnerName: ownerName, + }); err != nil { + return err + } + + return sess.Commit() +} + // UpdateRepositoryUpdatedTime updates a repository's updated time func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error { _, err := x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID) diff --git a/routers/org/setting.go b/routers/org/setting.go index a01b2c862..aa4a3c28c 100644 --- a/routers/org/setting.go +++ b/routers/org/setting.go @@ -51,6 +51,7 @@ func SettingsPost(ctx *context.Context) { } org := ctx.Org.Organization + nameChanged := org.Name != form.Name // Check if organization name has been changed. if org.LowerName != strings.ToLower(form.Name) { @@ -74,7 +75,9 @@ func SettingsPost(ctx *context.Context) { // reset ctx.org.OrgLink with new name ctx.Org.OrgLink = setting.AppSubURL + "/org/" + form.Name log.Trace("Organization name changed: %s -> %s", org.Name, form.Name) + nameChanged = false } + // In case it's just a case change. org.Name = form.Name org.LowerName = strings.ToLower(form.Name) @@ -104,11 +107,17 @@ func SettingsPost(ctx *context.Context) { return } for _, repo := range org.Repos { + repo.OwnerName = org.Name if err := models.UpdateRepository(repo, true); err != nil { ctx.ServerError("UpdateRepository", err) return } } + } else if nameChanged { + if err := models.UpdateRepositoryOwnerNames(org.ID, org.Name); err != nil { + ctx.ServerError("UpdateRepository", err) + return + } } log.Trace("Organization setting updated: %s", org.Name) diff --git a/routers/user/setting/profile.go b/routers/user/setting/profile.go index 38e371196..c4664e063 100644 --- a/routers/user/setting/profile.go +++ b/routers/user/setting/profile.go @@ -67,8 +67,13 @@ func HandleUsernameChange(ctx *context.Context, user *models.User, newName strin } return err } - log.Trace("User name changed: %s -> %s", user.Name, newName) + } else { + if err := models.UpdateRepositoryOwnerNames(user.ID, newName); err != nil { + ctx.ServerError("UpdateRepository", err) + return err + } } + log.Trace("User name changed: %s -> %s", user.Name, newName) return nil } @@ -84,6 +89,7 @@ func ProfilePost(ctx *context.Context) { } if len(form.Name) != 0 && ctx.User.Name != form.Name { + log.Debug("Changing name for %s to %s", ctx.User.Name, form.Name) if err := HandleUsernameChange(ctx, ctx.User, form.Name); err != nil { ctx.Redirect(setting.AppSubURL + "/user/settings") return |