Skip to content

Commit

Permalink
read_remotes_file: simplify string handling
Browse files Browse the repository at this point in the history
The main motivation for this cleanup is to switch our
line-reading to a strbuf, which removes the use of a
fixed-size buffer (which limited the size of remote URLs).
Since we have the strbuf, we can make use of strbuf_rtrim().

While we're here, we can also simplify the parsing of each
line.  First, we can use skip_prefix() to avoid some magic
numbers.

But second, we can avoid splitting the parsing and actions
for each line into two stages. Right now we figure out which
type of line we have, set an int to a magic number,
skip any intermediate whitespace, and then act on
the resulting value based on the magic number.

Instead, let's factor the whitespace skipping into a
function. That lets us avoid the magic numbers and keep the
actions close to the parsing.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Sep 25, 2015
1 parent f28e3ab commit 0e265a9
Showing 1 changed file with 18 additions and 37 deletions.
55 changes: 18 additions & 37 deletions remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ static const char *pushremote_name;
static struct rewrites rewrites;
static struct rewrites rewrites_push;

#define BUF_SIZE (2048)
static char buffer[BUF_SIZE];

static int valid_remote(const struct remote *remote)
{
return (!!remote->url) || (!!remote->foreign_vcs);
Expand Down Expand Up @@ -243,50 +240,34 @@ static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
rewrite->instead_of_nr++;
}

static const char *skip_spaces(const char *s)
{
while (isspace(*s))
s++;
return s;
}

static void read_remotes_file(struct remote *remote)
{
struct strbuf buf = STRBUF_INIT;
FILE *f = fopen(git_path("remotes/%s", remote->name), "r");

if (!f)
return;
remote->origin = REMOTE_REMOTES;
while (fgets(buffer, BUF_SIZE, f)) {
int value_list;
char *s, *p;

if (starts_with(buffer, "URL:")) {
value_list = 0;
s = buffer + 4;
} else if (starts_with(buffer, "Push:")) {
value_list = 1;
s = buffer + 5;
} else if (starts_with(buffer, "Pull:")) {
value_list = 2;
s = buffer + 5;
} else
continue;

while (isspace(*s))
s++;
if (!*s)
continue;
while (strbuf_getline(&buf, f, '\n') != EOF) {
const char *v;

p = s + strlen(s);
while (isspace(p[-1]))
*--p = 0;
strbuf_rtrim(&buf);

switch (value_list) {
case 0:
add_url_alias(remote, xstrdup(s));
break;
case 1:
add_push_refspec(remote, xstrdup(s));
break;
case 2:
add_fetch_refspec(remote, xstrdup(s));
break;
}
if (skip_prefix(buf.buf, "URL:", &v))
add_url_alias(remote, xstrdup(skip_spaces(v)));
else if (skip_prefix(buf.buf, "Push:", &v))
add_push_refspec(remote, xstrdup(skip_spaces(v)));
else if (skip_prefix(buf.buf, "Pull:", &v))
add_fetch_refspec(remote, xstrdup(skip_spaces(v)));
}
strbuf_release(&buf);
fclose(f);
}

Expand Down

0 comments on commit 0e265a9

Please sign in to comment.