Skip to content

Commit 9fdda90

Browse files
authored
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>
1 parent 8947422 commit 9fdda90

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
@@ -1350,6 +1350,26 @@ func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
13501350
return sess.Commit()
13511351
}
13521352

1353+
// UpdateRepositoryOwnerNames updates repository owner_names (this should only be used when the ownerName has changed case)
1354+
func UpdateRepositoryOwnerNames(ownerID int64, ownerName string) error {
1355+
if ownerID == 0 {
1356+
return nil
1357+
}
1358+
sess := x.NewSession()
1359+
defer sess.Close()
1360+
if err := sess.Begin(); err != nil {
1361+
return err
1362+
}
1363+
1364+
if _, err := sess.Where("owner_id = ?", ownerID).Cols("owner_name").Update(&Repository{
1365+
OwnerName: ownerName,
1366+
}); err != nil {
1367+
return err
1368+
}
1369+
1370+
return sess.Commit()
1371+
}
1372+
13531373
// UpdateRepositoryUpdatedTime updates a repository's updated time
13541374
func UpdateRepositoryUpdatedTime(repoID int64, updateTime time.Time) error {
13551375
_, 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
@@ -52,6 +52,7 @@ func SettingsPost(ctx *context.Context) {
5252
}
5353

5454
org := ctx.Org.Organization
55+
nameChanged := org.Name != form.Name
5556

5657
// Check if organization name has been changed.
5758
if org.LowerName != strings.ToLower(form.Name) {
@@ -75,7 +76,9 @@ func SettingsPost(ctx *context.Context) {
7576
// reset ctx.org.OrgLink with new name
7677
ctx.Org.OrgLink = setting.AppSubURL + "/org/" + form.Name
7778
log.Trace("Organization name changed: %s -> %s", org.Name, form.Name)
79+
nameChanged = false
7880
}
81+
7982
// In case it's just a case change.
8083
org.Name = form.Name
8184
org.LowerName = strings.ToLower(form.Name)
@@ -105,11 +108,17 @@ func SettingsPost(ctx *context.Context) {
105108
return
106109
}
107110
for _, repo := range org.Repos {
111+
repo.OwnerName = org.Name
108112
if err := models.UpdateRepository(repo, true); err != nil {
109113
ctx.ServerError("UpdateRepository", err)
110114
return
111115
}
112116
}
117+
} else if nameChanged {
118+
if err := models.UpdateRepositoryOwnerNames(org.ID, org.Name); err != nil {
119+
ctx.ServerError("UpdateRepository", err)
120+
return
121+
}
113122
}
114123

115124
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
@@ -68,8 +68,13 @@ func HandleUsernameChange(ctx *context.Context, user *models.User, newName strin
6868
}
6969
return err
7070
}
71-
log.Trace("User name changed: %s -> %s", user.Name, newName)
71+
} else {
72+
if err := models.UpdateRepositoryOwnerNames(user.ID, newName); err != nil {
73+
ctx.ServerError("UpdateRepository", err)
74+
return err
75+
}
7276
}
77+
log.Trace("User name changed: %s -> %s", user.Name, newName)
7378
return nil
7479
}
7580

@@ -85,6 +90,7 @@ func ProfilePost(ctx *context.Context) {
8590
}
8691

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

0 commit comments

Comments
 (0)