Forbid cross-backend ref renames. This would be pretty weird, but since it will break, we should prevent it. Also make the files backend deal with all non-normal ref renames. Signed-off-by: David Turner <dturner@xxxxxxxxxxxxxxxx> --- refs.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/refs.c b/refs.c index 3a2ad5e..05b1b2a 100644 --- a/refs.c +++ b/refs.c @@ -1415,5 +1415,15 @@ int delete_refs(struct string_list *refnames) int rename_ref(const char *oldref, const char *newref, const char *logmsg) { - return the_refs_backend->rename_ref(oldref, newref, logmsg); + if ((ref_type(oldref) == REF_TYPE_NORMAL) != + (ref_type(newref) == REF_TYPE_NORMAL)) { + return error( + _("Both ref arguments to rename_ref must be normal, " + "or both must be per-worktree/pseudorefs")); + } + if (ref_type(oldref) == REF_TYPE_NORMAL) + /* The files backend always deals with non-normal refs */ + return the_refs_backend->rename_ref(oldref, newref, logmsg); + else + return refs_be_files.rename_ref(oldref, newref, logmsg); } -- 2.4.2.767.g62658d5-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