@@ -922,6 +922,7 @@ func VerifyActiveEmailCode(code, email string) *EmailAddress {
922
922
923
923
// ChangeUserName changes all corresponding setting from old user name to new one.
924
924
func ChangeUserName (u * User , newUserName string ) (err error ) {
925
+ oldUserName := u .Name
925
926
if err = IsUsableUsername (newUserName ); err != nil {
926
927
return err
927
928
}
@@ -939,16 +940,24 @@ func ChangeUserName(u *User, newUserName string) (err error) {
939
940
return err
940
941
}
941
942
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 {
943
944
return fmt .Errorf ("Change repo owner name: %v" , err )
944
945
}
945
946
946
947
// 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 ) {
948
949
return fmt .Errorf ("Rename user directory: %v" , err )
949
950
}
950
951
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
952
961
}
953
962
954
963
// checkDupEmail checks whether there are the same email with the user
0 commit comments