Move parse-options's skip_prefix() to git-compat-util.h
authorMiklos Vajna <vmiklos@frugalware.org>
Fri, 27 Jun 2008 16:21:56 +0000 (18:21 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 1 Jul 2008 05:45:50 +0000 (22:45 -0700)
builtin-remote.c and parse-options.c both have a skip_prefix() function,
for the same purpose. Move parse-options's one to git-compat-util.h and
let builtin-remote use it as well.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-remote.c
git-compat-util.h
parse-options.c

index 145dd85..1491354 100644 (file)
@@ -29,12 +29,6 @@ static inline int postfixcmp(const char *string, const char *postfix)
        return strcmp(string + len1 - len2, postfix);
 }
 
-static inline const char *skip_prefix(const char *name, const char *prefix)
-{
-       return !name ? "" :
-               prefixcmp(name, prefix) ?  name : name + strlen(prefix);
-}
-
 static int opt_parse_track(const struct option *opt, const char *arg, int not)
 {
        struct path_list *list = opt->value;
@@ -182,12 +176,18 @@ static int config_read_branches(const char *key, const char *value, void *cb)
                        info->remote = xstrdup(value);
                } else {
                        char *space = strchr(value, ' ');
-                       value = skip_prefix(value, "refs/heads/");
+                       const char *ptr = skip_prefix(value, "refs/heads/");
+                       if (ptr)
+                               value = ptr;
                        while (space) {
                                char *merge;
                                merge = xstrndup(value, space - value);
                                path_list_append(merge, &info->merge);
-                               value = skip_prefix(space + 1, "refs/heads/");
+                               ptr = skip_prefix(space + 1, "refs/heads/");
+                               if (ptr)
+                                       value = ptr;
+                               else
+                                       value = space + 1;
                                space = strchr(value, ' ');
                        }
                        path_list_append(xstrdup(value), &info->merge);
@@ -219,7 +219,12 @@ static int handle_one_branch(const char *refname,
        refspec.dst = (char *)refname;
        if (!remote_find_tracking(states->remote, &refspec)) {
                struct path_list_item *item;
-               const char *name = skip_prefix(refspec.src, "refs/heads/");
+               const char *name, *ptr;
+               ptr = skip_prefix(refspec.src, "refs/heads/");
+               if (ptr)
+                       name = ptr;
+               else
+                       name = refspec.src;
                /* symbolic refs pointing nowhere were handled already */
                if ((flags & REF_ISSYMREF) ||
                                unsorted_path_list_has_path(&states->tracked,
@@ -248,6 +253,7 @@ static int get_ref_states(const struct ref *ref, struct ref_states *states)
                struct path_list *target = &states->tracked;
                unsigned char sha1[20];
                void *util = NULL;
+               const char *ptr;
 
                if (!ref->peer_ref || read_ref(ref->peer_ref->name, sha1))
                        target = &states->new;
@@ -256,8 +262,10 @@ static int get_ref_states(const struct ref *ref, struct ref_states *states)
                        if (hashcmp(sha1, ref->new_sha1))
                                util = &states;
                }
-               path_list_append(skip_prefix(ref->name, "refs/heads/"),
-                               target)->util = util;
+               ptr = skip_prefix(ref->name, "refs/heads/");
+               if (!ptr)
+                       ptr = ref->name;
+               path_list_append(ptr, target)->util = util;
        }
        free_refs(fetch_map);
 
@@ -522,10 +530,15 @@ static int show(int argc, const char **argv)
                                        "es" : "");
                        for (i = 0; i < states.remote->push_refspec_nr; i++) {
                                struct refspec *spec = states.remote->push + i;
+                               const char *p = "", *q = "";
+                               if (spec->src)
+                                       p = skip_prefix(spec->src, "refs/heads/");
+                               if (spec->dst)
+                                       q = skip_prefix(spec->dst, "refs/heads/");
                                printf(" %s%s%s%s", spec->force ? "+" : "",
-                                       skip_prefix(spec->src, "refs/heads/"),
+                                       p ? p : spec->src,
                                        spec->dst ? ":" : "",
-                                       skip_prefix(spec->dst, "refs/heads/"));
+                                       q ? q : spec->dst);
                        }
                        printf("\n");
                }
index 6f94a81..31edc98 100644 (file)
@@ -127,6 +127,12 @@ extern void set_warn_routine(void (*routine)(const char *warn, va_list params));
 
 extern int prefixcmp(const char *str, const char *prefix);
 
+static inline const char *skip_prefix(const char *str, const char *prefix)
+{
+       size_t len = strlen(prefix);
+       return strncmp(str, prefix, len) ? NULL : str + len;
+}
+
 #ifdef NO_MMAP
 
 #ifndef PROT_READ
index b8bde2b..bbc3ca4 100644 (file)
@@ -22,12 +22,6 @@ static inline const char *get_arg(struct optparse_t *p)
        return *++p->argv;
 }
 
-static inline const char *skip_prefix(const char *str, const char *prefix)
-{
-       size_t len = strlen(prefix);
-       return strncmp(str, prefix, len) ? NULL : str + len;
-}
-
 static int opterror(const struct option *opt, const char *reason, int flags)
 {
        if (flags & OPT_SHORT)