@@ -1769,49 +1769,41 @@ static int refdb_fs_backend__rename(
17691769 (error = refdb_fs_backend__lookup (& old , _backend , old_name )) < 0 )
17701770 return error ;
17711771
1772- /* Try to rename the refog; it's ok if the old doesn't exist */
1773- /* Must be done before calling refdb_fs_backend__delete, otherwise */
1774- /* the reflog is deleted before being renamed. */
1775- error = refdb_reflog_fs__rename (_backend , old_name , new_name );
1776- if ((error != 0 ) && (error != GIT_ENOTFOUND )) {
1777- git_reference_free (old );
1778- return error ;
1779- }
1780-
1781- if ((error = refdb_fs_backend__delete (_backend , old_name , NULL , NULL )) < 0 ) {
1782- refdb_reflog_fs__rename (_backend , new_name , old_name );
1772+ if ((error = loose_lock (& file , backend , old -> name )) < 0 ) {
17831773 git_reference_free (old );
17841774 return error ;
17851775 }
17861776
17871777 new = git_reference__realloc (& old , new_name );
17881778 if (!new ) {
1789- refdb_reflog_fs__rename (_backend , new_name , old_name );
17901779 git_reference_free (old );
1780+ git_filebuf_cleanup (& file );
17911781 return -1 ;
17921782 }
17931783
1794- if ((error = loose_lock (& file , backend , new -> name )) < 0 ) {
1795- refdb_reflog_fs__rename (_backend , new_name , old_name );
1784+ if ((error = refdb_fs_backend__delete_tail (_backend , & file , old_name , NULL , NULL )) < 0 ) {
17961785 git_reference_free (new );
1786+ git_filebuf_cleanup (& file );
17971787 return error ;
17981788 }
17991789
1800- if ((error = reflog_append (backend , new , git_reference_target (new ), NULL , who , message )) < 0 ) {
1801- git_reference_free (new );
1802- git_filebuf_cleanup (& file );
1790+ if ((error = loose_lock (& file , backend , new_name )) < 0 ) {
1791+ git_reference_free (old );
18031792 return error ;
18041793 }
18051794
1806- if (error < 0 ) {
1795+ /* Try to rename the refog; it's ok if the old doesn't exist */
1796+ error = refdb_reflog_fs__rename (_backend , old_name , new_name );
1797+ if (((error == 0 ) || (error == GIT_ENOTFOUND )) &&
1798+ ((error = reflog_append (backend , new , git_reference_target (new ), NULL , who , message )) < 0 )) {
18071799 git_reference_free (new );
18081800 git_filebuf_cleanup (& file );
18091801 return error ;
18101802 }
18111803
1812-
18131804 if ((error = loose_commit (& file , new )) < 0 || out == NULL ) {
18141805 git_reference_free (new );
1806+ git_filebuf_cleanup (& file );
18151807 return error ;
18161808 }
18171809
0 commit comments