Skip to content

Commit 2595c70

Browse files
authored
ChangeUserName: rename user files back on DB issue (#14447)
1 parent 00dc35e commit 2595c70

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

models/user.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ func VerifyActiveEmailCode(code, email string) *EmailAddress {
922922

923923
// ChangeUserName changes all corresponding setting from old user name to new one.
924924
func ChangeUserName(u *User, newUserName string) (err error) {
925+
oldUserName := u.Name
925926
if err = IsUsableUsername(newUserName); err != nil {
926927
return err
927928
}
@@ -939,16 +940,24 @@ func ChangeUserName(u *User, newUserName string) (err error) {
939940
return err
940941
}
941942

942-
if _, err = sess.Exec("UPDATE `repository` SET owner_name=? WHERE owner_name=?", newUserName, u.Name); err != nil {
943+
if _, err = sess.Exec("UPDATE `repository` SET owner_name=? WHERE owner_name=?", newUserName, oldUserName); err != nil {
943944
return fmt.Errorf("Change repo owner name: %v", err)
944945
}
945946

946947
// Do not fail if directory does not exist
947-
if err = os.Rename(UserPath(u.Name), UserPath(newUserName)); err != nil && !os.IsNotExist(err) {
948+
if err = os.Rename(UserPath(oldUserName), UserPath(newUserName)); err != nil && !os.IsNotExist(err) {
948949
return fmt.Errorf("Rename user directory: %v", err)
949950
}
950951

951-
return sess.Commit()
952+
if err = sess.Commit(); err != nil {
953+
if err2 := os.Rename(UserPath(newUserName), UserPath(oldUserName)); err2 != nil && !os.IsNotExist(err2) {
954+
log.Critical("Unable to rollback directory change during failed username change from: %s to: %s. DB Error: %v. Filesystem Error: %v", oldUserName, newUserName, err, err2)
955+
return fmt.Errorf("failed to rollback directory change during failed username change from: %s to: %s. DB Error: %w. Filesystem Error: %v", oldUserName, newUserName, err, err2)
956+
}
957+
return err
958+
}
959+
960+
return nil
952961
}
953962

954963
// checkDupEmail checks whether there are the same email with the user

0 commit comments

Comments
 (0)