Skip to content

Commit ba74fdb

Browse files
authored
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 <[email protected]>
1 parent 0600f79 commit ba74fdb

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

models/repo.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,26 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
13491349
return sess.Commit()
13501350
}
13511351

1352+
// UpdateRepositoryOwnerNames updates repository owner_names (this should only be used when the ownerName has changed case)
1353+
func UpdateRepositoryOwnerNames(ownerID int64, ownerName string) error {
1354+
if ownerID == 0 {
1355+
return nil
1356+
}
1357+
sess := x.NewSession()
1358+
defer sess.Close()
1359+
if err := sess.Begin(); err != nil {
1360+
return err
1361+
}
1362+
1363+
if _, err := sess.Where("owner_id = ?", ownerID).Cols("owner_name").Update(&Repository{
1364+
OwnerName: ownerName,
1365+
}); err != nil {
1366+
return err
1367+
}
1368+
1369+
return sess.Commit()
1370+
}
1371+
13521372
// UpdateRepositoryUpdatedTime updates a repository's updated time
13531373
func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error {
13541374
_, err := x.Exec("UPDATE repository SET updated_unix = ? WHERE id = ?", updateTime.Unix(), repoID)

routers/org/setting.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func SettingsPost(ctx *context.Context) {
5151
}
5252

5353
org := ctx.Org.Organization
54+
nameChanged := org.Name != form.Name
5455

5556
// Check if organization name has been changed.
5657
if org.LowerName != strings.ToLower(form.Name) {
@@ -74,7 +75,9 @@ func SettingsPost(ctx *context.Context) {
7475
// reset ctx.org.OrgLink with new name
7576
ctx.Org.OrgLink = setting.AppSubURL + "/org/" + form.Name
7677
log.Trace("Organization name changed: %s -> %s", org.Name, form.Name)
78+
nameChanged = false
7779
}
80+
7881
// In case it's just a case change.
7982
org.Name = form.Name
8083
org.LowerName = strings.ToLower(form.Name)
@@ -104,11 +107,17 @@ func SettingsPost(ctx *context.Context) {
104107
return
105108
}
106109
for _, repo := range org.Repos {
110+
repo.OwnerName = org.Name
107111
if err := models.UpdateRepository(repo, true); err != nil {
108112
ctx.ServerError("UpdateRepository", err)
109113
return
110114
}
111115
}
116+
} else if nameChanged {
117+
if err := models.UpdateRepositoryOwnerNames(org.ID, org.Name); err != nil {
118+
ctx.ServerError("UpdateRepository", err)
119+
return
120+
}
112121
}
113122

114123
log.Trace("Organization setting updated: %s", org.Name)

routers/user/setting/profile.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,13 @@ func HandleUsernameChange(ctx *context.Context, user *models.User, newName strin
6767
}
6868
return err
6969
}
70-
log.Trace("User name changed: %s -> %s", user.Name, newName)
70+
} else {
71+
if err := models.UpdateRepositoryOwnerNames(user.ID, newName); err != nil {
72+
ctx.ServerError("UpdateRepository", err)
73+
return err
74+
}
7175
}
76+
log.Trace("User name changed: %s -> %s", user.Name, newName)
7277
return nil
7378
}
7479

@@ -84,6 +89,7 @@ func ProfilePost(ctx *context.Context) {
8489
}
8590

8691
if len(form.Name) != 0 && ctx.User.Name != form.Name {
92+
log.Debug("Changing name for %s to %s", ctx.User.Name, form.Name)
8793
if err := HandleUsernameChange(ctx, ctx.User, form.Name); err != nil {
8894
ctx.Redirect(setting.AppSubURL + "/user/settings")
8995
return

0 commit comments

Comments
 (0)