]> git.ipfire.org Git - thirdparty/git.git/commitdiff
remote rm: handle symbolic refs correctly
authorMichael Haggerty <mhagger@alum.mit.edu>
Sat, 18 Jun 2016 04:15:11 +0000 (06:15 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 20 Jun 2016 18:38:18 +0000 (11:38 -0700)
In the modern world of reference backends, it is not OK to delete a
symref by unlink()ing the file directly. This must be done via the refs
API.

We do so by adding the symref to the list of references to delete along
with the non-symbolic references, then calling delete_refs() with the
new flags option set to REF_NODEREF.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/remote.c

index 1bbf9b44df2cc644539c6e52d33254223035822f..c4b4d674bd139eac863253fe8c1f2d7441496447 100644 (file)
@@ -539,10 +539,6 @@ static int add_branch_for_removal(const char *refname,
                return 0;
        }
 
-       /* make sure that symrefs are deleted */
-       if (flags & REF_ISSYMREF)
-               return unlink(git_path("%s", refname));
-
        string_list_append(branches->branches, refname);
 
        return 0;
@@ -788,7 +784,7 @@ static int rm(int argc, const char **argv)
        strbuf_release(&buf);
 
        if (!result)
-               result = delete_refs(&branches, 0);
+               result = delete_refs(&branches, REF_NODEREF);
        string_list_clear(&branches, 0);
 
        if (skipped.nr) {