Skip to content

Commit 75b2787

Browse files
committed
Changed implementation according to review.
1 parent 0365f45 commit 75b2787

File tree

1 file changed

+11
-19
lines changed

1 file changed

+11
-19
lines changed

src/libgit2/refdb_fs.c

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)