Bläddra i källkod

Fix case change in ownernames (#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>
tags/v1.15.0-rc1
zeripath 3 år sedan
förälder
incheckning
9fdda90085
Inget konto är kopplat till bidragsgivarens mejladress
3 ändrade filer med 36 tillägg och 1 borttagningar
  1. 20
    0
      models/repo.go
  2. 9
    0
      routers/org/setting.go
  3. 7
    1
      routers/user/setting/profile.go

+ 20
- 0
models/repo.go Visa fil

@@ -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)

+ 9
- 0
routers/org/setting.go Visa fil

@@ -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)

+ 7
- 1
routers/user/setting/profile.go Visa fil

@@ -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

Laddar…
Avbryt
Spara