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 2727943..943604c 100644 --- a/refs-be-files.c +++ b/refs-be-files.c @@ -2727,6 +2727,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); @@ -2902,7 +2910,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; @@ -2910,7 +2918,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)); } @@ -2954,9 +2962,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; @@ -3058,8 +3066,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; @@ -3604,12 +3612,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 d8ae9af..da29232 100644 --- a/refs.h +++ b/refs.h @@ -571,6 +571,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, @@ -604,6 +608,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.4.2.644.g97b850b-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