Move parse-options's skip_prefix() to git-compat-util.h

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>
This commit is contained in:
Miklos Vajna 2008-06-27 18:21:56 +02:00 committed by Junio C Hamano
parent 653194758e
commit fbca583732
3 changed files with 32 additions and 19 deletions

View 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");
}

View 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

View 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)