diff --git a/include/git2/reflog.h b/include/git2/reflog.h index 9ad42b73b..f1d08795e 100644 --- a/include/git2/reflog.h +++ b/include/git2/reflog.h @@ -50,6 +50,23 @@ GIT_EXTERN(int) git_reflog_read(git_reflog **reflog, git_reference *ref); */ GIT_EXTERN(int) git_reflog_write(git_reference *ref, const git_oid *oid_old, const git_signature *committer, const char *msg); +/** + * Rename the reflog for the given reference + * + * @param ref the reference + * @param new_name the new name of the reference + * @return GIT_SUCCESS or an error code + */ +GIT_EXTERN(int) git_reflog_rename(git_reference *ref, const char *new_name); + +/** + * Delete the reflog for the given reference + * + * @param ref the reference + * @return GIT_SUCCESS or an error code + */ +GIT_EXTERN(int) git_reflog_delete(git_reference *ref); + /** * Get the number of log entries in a reflog * diff --git a/src/reflog.c b/src/reflog.c index e0fa7a060..f52ae585f 100644 --- a/src/reflog.c +++ b/src/reflog.c @@ -255,6 +255,32 @@ int git_reflog_write(git_reference *ref, const git_oid *oid_old, return reflog_write(log_path, old, new, committer, msg); } +int git_reflog_rename(git_reference *ref, const char *new_name) +{ + char old_path[GIT_PATH_MAX]; + char new_path[GIT_PATH_MAX]; + + git_path_join_n(old_path, 3, ref->owner->path_repository, + GIT_REFLOG_DIR, ref->name); + git_path_join_n(new_path, 3, ref->owner->path_repository, + GIT_REFLOG_DIR, new_name); + + return p_rename(old_path, new_path); +} + +int git_reflog_delete(git_reference *ref) +{ + char path[GIT_PATH_MAX]; + + git_path_join_n(path, 3, ref->owner->path_repository, + GIT_REFLOG_DIR, ref->name); + + if (git_futils_exists(path)) + return GIT_SUCCESS; + + return p_unlink(path); +} + unsigned int git_reflog_entrycount(git_reflog *reflog) { assert(reflog);