aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeripath2021-06-03 06:09:43 +0100
committerGitHub2021-06-03 13:09:43 +0800
commitba74fdbda95bc27d8ade3720b52fa723443482d6 (patch)
tree38494161551696329add590f1cf1820a6bfb526b
parent0600f7972a254a157a31b8099b2879b0f35a4a50 (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.go20
-rw-r--r--routers/org/setting.go9
-rw-r--r--routers/user/setting/profile.go8
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