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>tags/v1.15.0-rc1
@@ -1350,6 +1350,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) |
@@ -52,6 +52,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) { | |||
@@ -75,7 +76,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) | |||
@@ -105,11 +108,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) |
@@ -68,8 +68,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 | |||
} | |||
@@ -85,6 +90,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 |