Because HEAD and stash are per-worktree, other backends need to go through the files backend to manage these refs and their reflogs. To enable this, we make some files backend functions public. Signed-off-by: David Turner <dturner@xxxxxxxxxxxxxxxx> --- refs-be-files.c | 34 +++++++++++++++++++++------------- refs.h | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/refs-be-files.c b/refs-be-files.c index ec7ec8d..7c9473f 100644 --- a/refs-be-files.c +++ b/refs-be-files.c @@ -2710,6 +2710,14 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1, const unsigned char *new_sha1, const char *msg, int flags, struct strbuf *err) { + return files_log_ref_write(refname, old_sha1, new_sha1, msg, flags, + err); +} + +int files_log_ref_write(const char *refname, const unsigned char *old_sha1, + const unsigned char *new_sha1, const char *msg, + int flags, struct strbuf *err) +{ struct strbuf sb = STRBUF_INIT; int ret = log_ref_write_1(refname, old_sha1, new_sha1, msg, &sb, flags, err); @@ -2885,7 +2893,7 @@ static int files_create_symref(struct ref_transaction *trans, return 0; } -static int files_reflog_exists(const char *refname) +int files_reflog_exists(const char *refname) { struct stat st; @@ -2893,7 +2901,7 @@ static int files_reflog_exists(const char *refname) S_ISREG(st.st_mode); } -static int files_delete_reflog(const char *refname) +int files_delete_reflog(const char *refname) { return remove_path(git_path("logs/%s", refname)); } @@ -2937,9 +2945,9 @@ static char *find_beginning_of_line(char *bob, char *scan) return scan; } -static int files_for_each_reflog_ent_reverse(const char *refname, - each_reflog_ent_fn fn, - void *cb_data) +int files_for_each_reflog_ent_reverse(const char *refname, + each_reflog_ent_fn fn, + void *cb_data) { struct strbuf sb = STRBUF_INIT; FILE *logfp; @@ -3041,8 +3049,8 @@ static int files_for_each_reflog_ent_reverse(const char *refname, return ret; } -static int files_for_each_reflog_ent(const char *refname, - each_reflog_ent_fn fn, void *cb_data) +int files_for_each_reflog_ent(const char *refname, + each_reflog_ent_fn fn, void *cb_data) { FILE *logfp; struct strbuf sb = STRBUF_INIT; @@ -3583,12 +3591,12 @@ static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, return 0; } -static int files_reflog_expire(const char *refname, const unsigned char *sha1, - unsigned int flags, - reflog_expiry_prepare_fn prepare_fn, - reflog_expiry_should_prune_fn should_prune_fn, - reflog_expiry_cleanup_fn cleanup_fn, - void *policy_cb_data) +int files_reflog_expire(const char *refname, const unsigned char *sha1, + unsigned int flags, + reflog_expiry_prepare_fn prepare_fn, + reflog_expiry_should_prune_fn should_prune_fn, + reflog_expiry_cleanup_fn cleanup_fn, + void *policy_cb_data) { static struct lock_file reflog_lock; struct expire_reflog_cb cb; diff --git a/refs.h b/refs.h index e5ef8a3..91d30b5 100644 --- a/refs.h +++ b/refs.h @@ -570,6 +570,10 @@ enum ref_type ref_type(const char *refname); int copy_reflog_msg(char *buf, const char *msg); +int files_log_ref_write(const char *refname, const unsigned char *old_sha1, + const unsigned char *new_sha1, const char *msg, + int flags, struct strbuf *err); + enum expire_reflog_flags { EXPIRE_REFLOGS_DRY_RUN = 1 << 0, EXPIRE_REFLOGS_UPDATE_REF = 1 << 1, @@ -603,6 +607,22 @@ typedef int reflog_expiry_should_prune_fn(unsigned char *osha1, const char *message, void *cb_data); typedef void reflog_expiry_cleanup_fn(void *cb_data); +int files_reflog_expire(const char *refname, const unsigned char *sha1, + unsigned int flags, + reflog_expiry_prepare_fn prepare_fn, + reflog_expiry_should_prune_fn should_prune_fn, + reflog_expiry_cleanup_fn cleanup_fn, + void *policy_cb_data); + +int files_for_each_reflog_ent(const char *refname, + each_reflog_ent_fn fn, void *cb_data); + +int files_for_each_reflog_ent_reverse(const char *refname, + each_reflog_ent_fn fn, void *cb_data); + +int files_delete_reflog(const char *refname); +int files_reflog_exists(const char *refname); + /* * Expire reflog entries for the specified reference. sha1 is the old * value of the reference. flags is a combination of the constants in -- 2.0.4.315.gad8727a-twtrsrc -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html