Commit 8dde7e11 by Patrick Steinhardt

refdb_fs: refactor error handling in `refdb_reflog_fs__delete`

The function `refdb_reflog_fs__delete` uses the `if (!error && foobar())`
pattern of checking, where error conditions are being checked by following calls
to different code. This does not match our current style, where the call-site of
a function is usually directly responsible for checking the return value.

Convert the function to use `if ((error = foobar()) < 0) goto out;` style. Note
that this changes the code flow a bit: previously, we were always trying to
delete empty reference hierarchies even if deleting the reflog entry has failed.
This wasn't much of a problem -- if deletion failed, the hierarchy will still
contain at least one file and thus the function call was an expensive no-op.
Now, we will only perform this deletion if we have successfully removed the
reflog.
parent bc219657
...@@ -2046,28 +2046,27 @@ cleanup: ...@@ -2046,28 +2046,27 @@ cleanup:
static int refdb_reflog_fs__delete(git_refdb_backend *_backend, const char *name) static int refdb_reflog_fs__delete(git_refdb_backend *_backend, const char *name)
{ {
int error; refdb_fs_backend *backend = (refdb_fs_backend *) _backend;
git_buf path = GIT_BUF_INIT; git_buf path = GIT_BUF_INIT;
int error;
git_repository *repo;
refdb_fs_backend *backend;
assert(_backend && name); assert(_backend && name);
backend = (refdb_fs_backend *) _backend; if ((error = retrieve_reflog_path(&path, backend->repo, name)) < 0)
repo = backend->repo; goto out;
error = retrieve_reflog_path(&path, repo, name); if (!git_path_exists(path.ptr))
goto out;
if (!error && git_path_exists(path.ptr)) { if ((error = p_unlink(path.ptr)) < 0)
error = p_unlink(path.ptr); goto out;
refdb_fs_backend__try_delete_empty_ref_hierarchie(backend, name, true);
}
refdb_fs_backend__try_delete_empty_ref_hierarchie(backend, name, true);
out:
git_buf_dispose(&path); git_buf_dispose(&path);
return error; return error;
} }
int git_refdb_backend_fs( int git_refdb_backend_fs(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment