Skip to content

Commit

Permalink
do not die when error in config parsing of buf occurs
Browse files Browse the repository at this point in the history
If a config parsing error in a file occurs we can die and let the user
fix the issue. This is different for the buf parsing function since it
can be used to parse blobs of .gitmodules files. If a parsing error
occurs here we should proceed since otherwise a database containing such
an error in a single revision could be rendered unusable.

Signed-off-by: Heiko Voigt <[email protected]>
Acked-by: Jeff King <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
hvoigt authored and gitster committed Jul 12, 2013
1 parent 1bc8881 commit b2dc094
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ struct config_source {
} buf;
} u;
const char *name;
int die_on_error;
int linenr;
int eof;
struct strbuf value;
Expand Down Expand Up @@ -442,7 +443,10 @@ static int git_parse_source(config_fn_t fn, void *data)
if (get_value(fn, data, var) < 0)
break;
}
die("bad config file line %d in %s", cf->linenr, cf->name);
if (cf->die_on_error)
die("bad config file line %d in %s", cf->linenr, cf->name);
else
return error("bad config file line %d in %s", cf->linenr, cf->name);
}

static int parse_unit_factor(const char *end, uintmax_t *val)
Expand Down Expand Up @@ -940,7 +944,7 @@ int git_default_config(const char *var, const char *value, void *dummy)
}

/*
* All source specific fields in the union, name and the callbacks
* All source specific fields in the union, die_on_error, name and the callbacks
* fgetc, ungetc, ftell of top need to be initialized before calling
* this function.
*/
Expand Down Expand Up @@ -977,6 +981,7 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)

top.u.file = f;
top.name = filename;
top.die_on_error = 1;
top.fgetc = config_file_fgetc;
top.ungetc = config_file_ungetc;
top.ftell = config_file_ftell;
Expand All @@ -997,6 +1002,7 @@ int git_config_from_buf(config_fn_t fn, const char *name, const char *buf,
top.u.buf.len = len;
top.u.buf.pos = 0;
top.name = name;
top.die_on_error = 0;
top.fgetc = config_buf_fgetc;
top.ungetc = config_buf_ungetc;
top.ftell = config_buf_ftell;
Expand Down

0 comments on commit b2dc094

Please sign in to comment.