Re: [PATCH v5 12/27] refs: forbid cross-backend ref renames
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Feb 20, 2016, 04:30 UTC
- Message-ID
- <CACsJy8B0Lt8Eq4GqSCKyA08g0Vvu-1B6dDjpkNmRre3M8DebDg@mail.gmail.com>
- In-Reply-To
- <1455772670-21142-13-git-send-email-dturner@twopensource.com>
On Thu, Feb 18, 2016 at 12:17 PM, David Turner <dturner@twopensource.com> wrote:
Show 21 quoted lines
> This would be pretty weird, but since it will break, we should prevent
> it.
>
> Signed-off-by: David Turner <dturner@twopensource.com>
> ---
> refs.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/refs.c b/refs.c
> index f5754f2..8eb04da 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -1306,5 +1306,11 @@ int delete_refs(struct string_list *refnames)
>
> int rename_ref(const char *oldref, const char *newref, const char *logmsg)
> {
> + if ((ref_type(oldref) == REF_TYPE_NORMAL) !=
> + (ref_type(newref) == REF_TYPE_NORMAL)) {
> + error(_("Both ref arguments to rename_ref must be normal "
> + "(or both must be per-worktree/pseudorefs)"));
> + return -1;You can do return error(...);
> + } > return the_refs_backend->rename_ref(oldref, newref, logmsg);
LMDB backend can't deal with per-worktree rename. So either forbid per-worktree rename here too, or fall back to files backend.
-- Duy