transport-helper.c: do not overwrite forced bit
[gitweb.git] / refs.c
diff --git a/refs.c b/refs.c
index 46177ad256c7991df327ea0d2fba31eb10bbdaab..3710748ab88d8fa4639c3a0a436ca0e2b0c25552 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -72,6 +72,10 @@ int check_refname_format(const char *refname, int flags)
 {
        int component_len, component_count = 0;
 
+       if (!strcmp(refname, "@"))
+               /* Refname is a single character '@'. */
+               return -1;
+
        while (1) {
                /* We are at the start of a path component. */
                component_len = check_refname_component(refname, flags);
@@ -1951,7 +1955,7 @@ static int remove_empty_directories(const char *file)
 static char *substitute_branch_name(const char **string, int *len)
 {
        struct strbuf buf = STRBUF_INIT;
-       int ret = interpret_branch_name(*string, &buf);
+       int ret = interpret_branch_name(*string, *len, &buf);
 
        if (ret == *len) {
                size_t size;
@@ -3231,7 +3235,7 @@ int update_ref(const char *action, const char *refname,
               int flags, enum action_on_err onerr)
 {
        struct ref_lock *lock;
-       lock = update_ref_lock(refname, oldval, flags, 0, onerr);
+       lock = update_ref_lock(refname, oldval, flags, NULL, onerr);
        if (!lock)
                return 1;
        return update_ref_write(action, refname, sha1, lock, onerr);
@@ -3337,14 +3341,6 @@ int update_refs(const char *action, const struct ref_update **updates_orig,
        return ret;
 }
 
-struct ref *find_ref_by_name(const struct ref *list, const char *name)
-{
-       for ( ; list; list = list->next)
-               if (!strcmp(list->name, name))
-                       return (struct ref *)list;
-       return NULL;
-}
-
 /*
  * generate a format suitable for scanf from a ref_rev_parse_rules
  * rule, that is replace the "%.*s" spec with a "%s" spec