Merge branch 'js/use-bug-macro'

Developer support update, by using BUG() macro instead of die() to
mark codepaths that should not happen more clearly.

* js/use-bug-macro:
  BUG_exit_code: fix sparse "symbol not declared" warning
  Convert remaining die*(BUG) messages
  Replace all die("BUG: ...") calls by BUG() ones
  run-command: use BUG() to report bugs, not die()
  test-tool: help verifying BUG() code paths
This commit is contained in:
Junio C Hamano 2018-05-30 14:04:07 +09:00
commit 50f08db594
69 changed files with 214 additions and 206 deletions

View File

@ -2375,7 +2375,7 @@ static void update_pre_post_images(struct image *preimage,
if (postlen if (postlen
? postlen < new_buf - postimage->buf ? postlen < new_buf - postimage->buf
: postimage->len < new_buf - postimage->buf) : postimage->len < new_buf - postimage->buf)
die("BUG: caller miscounted postlen: asked %d, orig = %d, used = %d", BUG("caller miscounted postlen: asked %d, orig = %d, used = %d",
(int)postlen, (int) postimage->len, (int)(new_buf - postimage->buf)); (int)postlen, (int) postimage->len, (int)(new_buf - postimage->buf));
/* Fix the length of the whole thing */ /* Fix the length of the whole thing */
@ -3509,7 +3509,7 @@ static int load_current(struct apply_state *state,
unsigned mode = patch->new_mode; unsigned mode = patch->new_mode;
if (!patch->is_new) if (!patch->is_new)
die("BUG: patch to %s is not a creation", patch->old_name); BUG("patch to %s is not a creation", patch->old_name);
pos = cache_name_pos(name, strlen(name)); pos = cache_name_pos(name, strlen(name));
if (pos < 0) if (pos < 0)

View File

@ -441,7 +441,7 @@ static int write_tar_filter_archive(const struct archiver *ar,
int r; int r;
if (!ar->data) if (!ar->data)
die("BUG: tar-filter archiver called with no filter defined"); BUG("tar-filter archiver called with no filter defined");
strbuf_addstr(&cmd, ar->data); strbuf_addstr(&cmd, ar->data);
if (args->compression_level >= 0) if (args->compression_level >= 0)

10
attr.c
View File

@ -157,7 +157,7 @@ static void all_attrs_init(struct attr_hashmap *map, struct attr_check *check)
size = hashmap_get_size(&map->map); size = hashmap_get_size(&map->map);
if (size < check->all_attrs_nr) if (size < check->all_attrs_nr)
die("BUG: interned attributes shouldn't be deleted"); BUG("interned attributes shouldn't be deleted");
/* /*
* If the number of attributes in the global dictionary has increased * If the number of attributes in the global dictionary has increased
@ -541,7 +541,7 @@ static void check_vector_remove(struct attr_check *check)
break; break;
if (i >= check_vector.nr) if (i >= check_vector.nr)
die("BUG: no entry found"); BUG("no entry found");
/* shift entries over */ /* shift entries over */
for (; i < check_vector.nr - 1; i++) for (; i < check_vector.nr - 1; i++)
@ -599,11 +599,11 @@ struct attr_check *attr_check_initl(const char *one, ...)
const struct git_attr *attr; const struct git_attr *attr;
param = va_arg(params, const char *); param = va_arg(params, const char *);
if (!param) if (!param)
die("BUG: counted %d != ended at %d", BUG("counted %d != ended at %d",
check->nr, cnt); check->nr, cnt);
attr = git_attr(param); attr = git_attr(param);
if (!attr) if (!attr)
die("BUG: %s: not a valid attribute name", param); BUG("%s: not a valid attribute name", param);
check->items[cnt].attr = attr; check->items[cnt].attr = attr;
} }
va_end(params); va_end(params);
@ -714,7 +714,7 @@ void git_attr_set_direction(enum git_attr_direction new_direction,
struct index_state *istate) struct index_state *istate)
{ {
if (is_bare_repository() && new_direction != GIT_ATTR_INDEX) if (is_bare_repository() && new_direction != GIT_ATTR_INDEX)
die("BUG: non-INDEX attr direction in a bare repo"); BUG("non-INDEX attr direction in a bare repo");
if (new_direction != direction) if (new_direction != direction)
drop_all_attr_stacks(); drop_all_attr_stacks();

View File

@ -1806,7 +1806,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
l->item = c; l->item = c;
if (add_decoration(&sb->revs->children, if (add_decoration(&sb->revs->children,
&c->parents->item->object, l)) &c->parents->item->object, l))
die("BUG: not unique item in first-parent chain"); BUG("not unique item in first-parent chain");
c = c->parents->item; c = c->parents->item;
} }

View File

@ -403,11 +403,11 @@ static void am_load(struct am_state *state)
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
if (read_state_file(&sb, state, "next", 1) < 0) if (read_state_file(&sb, state, "next", 1) < 0)
die("BUG: state file 'next' does not exist"); BUG("state file 'next' does not exist");
state->cur = strtol(sb.buf, NULL, 10); state->cur = strtol(sb.buf, NULL, 10);
if (read_state_file(&sb, state, "last", 1) < 0) if (read_state_file(&sb, state, "last", 1) < 0)
die("BUG: state file 'last' does not exist"); BUG("state file 'last' does not exist");
state->last = strtol(sb.buf, NULL, 10); state->last = strtol(sb.buf, NULL, 10);
if (read_author_script(state) < 0) if (read_author_script(state) < 0)
@ -986,7 +986,7 @@ static int split_mail(struct am_state *state, enum patch_format patch_format,
case PATCH_FORMAT_MBOXRD: case PATCH_FORMAT_MBOXRD:
return split_mail_mbox(state, paths, keep_cr, 1); return split_mail_mbox(state, paths, keep_cr, 1);
default: default:
die("BUG: invalid patch_format"); BUG("invalid patch_format");
} }
return -1; return -1;
} }
@ -1041,7 +1041,7 @@ static void am_setup(struct am_state *state, enum patch_format patch_format,
str = "b"; str = "b";
break; break;
default: default:
die("BUG: invalid value for state->keep"); BUG("invalid value for state->keep");
} }
write_state_text(state, "keep", str); write_state_text(state, "keep", str);
@ -1058,7 +1058,7 @@ static void am_setup(struct am_state *state, enum patch_format patch_format,
str = "t"; str = "t";
break; break;
default: default:
die("BUG: invalid value for state->scissors"); BUG("invalid value for state->scissors");
} }
write_state_text(state, "scissors", str); write_state_text(state, "scissors", str);
@ -1216,7 +1216,7 @@ static int parse_mail(struct am_state *state, const char *mail)
mi.keep_non_patch_brackets_in_subject = 1; mi.keep_non_patch_brackets_in_subject = 1;
break; break;
default: default:
die("BUG: invalid value for state->keep"); BUG("invalid value for state->keep");
} }
if (state->message_id) if (state->message_id)
@ -1232,7 +1232,7 @@ static int parse_mail(struct am_state *state, const char *mail)
mi.use_scissors = 1; mi.use_scissors = 1;
break; break;
default: default:
die("BUG: invalid value for state->scissors"); BUG("invalid value for state->scissors");
} }
mi.input = xfopen(mail, "r"); mi.input = xfopen(mail, "r");
@ -1463,7 +1463,7 @@ static int run_apply(const struct am_state *state, const char *index_file)
int options = 0; int options = 0;
if (init_apply_state(&apply_state, NULL)) if (init_apply_state(&apply_state, NULL))
die("BUG: init_apply_state() failed"); BUG("init_apply_state() failed");
argv_array_push(&apply_opts, "apply"); argv_array_push(&apply_opts, "apply");
argv_array_pushv(&apply_opts, state->git_apply_opts.argv); argv_array_pushv(&apply_opts, state->git_apply_opts.argv);
@ -1489,7 +1489,7 @@ static int run_apply(const struct am_state *state, const char *index_file)
apply_state.apply_verbosity = verbosity_silent; apply_state.apply_verbosity = verbosity_silent;
if (check_apply_state(&apply_state, force_apply)) if (check_apply_state(&apply_state, force_apply))
die("BUG: check_apply_state() failed"); BUG("check_apply_state() failed");
argv_array_push(&apply_paths, am_path(state, "patch")); argv_array_push(&apply_paths, am_path(state, "patch"));
@ -2407,7 +2407,7 @@ int cmd_am(int argc, const char **argv, const char *prefix)
ret = show_patch(&state); ret = show_patch(&state);
break; break;
default: default:
die("BUG: invalid resume value"); BUG("invalid resume value");
} }
am_state_release(&state); am_state_release(&state);

View File

@ -500,7 +500,7 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
if (!skip_prefix(oldref.buf, "refs/heads/", &interpreted_oldname) || if (!skip_prefix(oldref.buf, "refs/heads/", &interpreted_oldname) ||
!skip_prefix(newref.buf, "refs/heads/", &interpreted_newname)) { !skip_prefix(newref.buf, "refs/heads/", &interpreted_newname)) {
die("BUG: expected prefix missing for refs"); BUG("expected prefix missing for refs");
} }
if (copy) if (copy)

View File

@ -312,7 +312,7 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
die("could not convert '%s' %s", die("could not convert '%s' %s",
oid_to_hex(oid), data->rest); oid_to_hex(oid), data->rest);
} else } else
die("BUG: invalid cmdmode: %c", opt->cmdmode); BUG("invalid cmdmode: %c", opt->cmdmode);
batch_write(opt, contents, size); batch_write(opt, contents, size);
free(contents); free(contents);
} else if (stream_blob_to_fd(1, oid, NULL, 0) < 0) } else if (stream_blob_to_fd(1, oid, NULL, 0) < 0)
@ -387,7 +387,7 @@ static void batch_one_object(const char *obj_name, struct batch_options *opt,
(uintmax_t)strlen(obj_name), obj_name); (uintmax_t)strlen(obj_name), obj_name);
break; break;
default: default:
die("BUG: unknown get_sha1_with_context result %d\n", BUG("unknown get_sha1_with_context result %d\n",
result); result);
break; break;
} }

View File

@ -823,7 +823,7 @@ static void write_refspec_config(const char *src_ref_prefix,
} else if (remote_head_points_at) { } else if (remote_head_points_at) {
const char *head = remote_head_points_at->name; const char *head = remote_head_points_at->name;
if (!skip_prefix(head, "refs/heads/", &head)) if (!skip_prefix(head, "refs/heads/", &head))
die("BUG: remote HEAD points at non-head?"); BUG("remote HEAD points at non-head?");
strbuf_addf(&value, "+%s:%s%s", remote_head_points_at->name, strbuf_addf(&value, "+%s:%s%s", remote_head_points_at->name,
branch_top->buf, head); branch_top->buf, head);

View File

@ -495,7 +495,7 @@ static int is_a_merge(const struct commit *current_head)
static void assert_split_ident(struct ident_split *id, const struct strbuf *buf) static void assert_split_ident(struct ident_split *id, const struct strbuf *buf)
{ {
if (split_ident_line(id, buf->buf, buf->len) || !id->date_begin) if (split_ident_line(id, buf->buf, buf->len) || !id->date_begin)
die("BUG: unable to parse our own ident: %s", buf->buf); BUG("unable to parse our own ident: %s", buf->buf);
} }
static void export_one(const char *var, const char *s, const char *e, int hack) static void export_one(const char *var, const char *s, const char *e, int hack)

View File

@ -398,7 +398,7 @@ static char *normalize_value(const char *key, const char *value)
return xstrdup(value); return xstrdup(value);
} }
die("BUG: cannot normalize type %d", type); BUG("cannot normalize type %d", type);
} }
static int get_color_found; static int get_color_found;

View File

@ -516,7 +516,7 @@ static void anonymize_ident_line(const char **beg, const char **end)
/* skip "committer", "author", "tagger", etc */ /* skip "committer", "author", "tagger", etc */
end_of_header = strchr(*beg, ' '); end_of_header = strchr(*beg, ' ');
if (!end_of_header) if (!end_of_header)
die("BUG: malformed line fed to anonymize_ident_line: %.*s", BUG("malformed line fed to anonymize_ident_line: %.*s",
(int)(*end - *beg), *beg); (int)(*end - *beg), *beg);
end_of_header++; end_of_header++;
strbuf_add(out, *beg, end_of_header - *beg); strbuf_add(out, *beg, end_of_header - *beg);

View File

@ -869,7 +869,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
if (obj->type == OBJ_COMMIT) { if (obj->type == OBJ_COMMIT) {
struct commit *commit = (struct commit *) obj; struct commit *commit = (struct commit *) obj;
if (detach_commit_buffer(commit, NULL) != data) if (detach_commit_buffer(commit, NULL) != data)
die("BUG: parse_object_buffer transmogrified our buffer"); BUG("parse_object_buffer transmogrified our buffer");
} }
obj->flags |= FLAG_CHECKED; obj->flags |= FLAG_CHECKED;
} }
@ -1018,7 +1018,7 @@ static struct base_data *find_unresolved_deltas_1(struct base_data *base,
if (!compare_and_swap_type(&child->real_type, OBJ_REF_DELTA, if (!compare_and_swap_type(&child->real_type, OBJ_REF_DELTA,
base->obj->real_type)) base->obj->real_type))
die("BUG: child->real_type != OBJ_REF_DELTA"); BUG("child->real_type != OBJ_REF_DELTA");
resolve_delta(child, base, result); resolve_delta(child, base, result);
if (base->ref_first == base->ref_last && base->ofs_last == -1) if (base->ref_first == base->ref_last && base->ofs_last == -1)

View File

@ -391,7 +391,7 @@ int init_db(const char *git_dir, const char *real_git_dir,
else if (get_shared_repository() == PERM_EVERYBODY) else if (get_shared_repository() == PERM_EVERYBODY)
xsnprintf(buf, sizeof(buf), "%d", OLD_PERM_EVERYBODY); xsnprintf(buf, sizeof(buf), "%d", OLD_PERM_EVERYBODY);
else else
die("BUG: invalid value for shared_repository"); BUG("invalid value for shared_repository");
git_config_set("core.sharedrepository", buf); git_config_set("core.sharedrepository", buf);
git_config_set("receive.denyNonFastforwards", "true"); git_config_set("receive.denyNonFastforwards", "true");
} }

View File

@ -166,7 +166,7 @@ static void show_killed_files(const struct index_state *istate,
*/ */
pos = index_name_pos(istate, ent->name, ent->len); pos = index_name_pos(istate, ent->name, ent->len);
if (0 <= pos) if (0 <= pos)
die("BUG: killed-file %.*s not found", BUG("killed-file %.*s not found",
ent->len, ent->name); ent->len, ent->name);
pos = -pos - 1; pos = -pos - 1;
while (pos < istate->cache_nr && while (pos < istate->cache_nr &&

View File

@ -461,7 +461,7 @@ static int add(int argc, const char **argv, const char *prefix)
if (d.buf.len || allow_empty) { if (d.buf.len || allow_empty) {
write_note_data(&d, &new_note); write_note_data(&d, &new_note);
if (add_note(t, &object, &new_note, combine_notes_overwrite)) if (add_note(t, &object, &new_note, combine_notes_overwrite))
die("BUG: combine_notes_overwrite failed"); BUG("combine_notes_overwrite failed");
commit_notes(t, "Notes added by 'git notes add'"); commit_notes(t, "Notes added by 'git notes add'");
} else { } else {
fprintf(stderr, _("Removing note for object %s\n"), fprintf(stderr, _("Removing note for object %s\n"),
@ -544,7 +544,7 @@ static int copy(int argc, const char **argv, const char *prefix)
} }
if (add_note(t, &object, from_note, combine_notes_overwrite)) if (add_note(t, &object, from_note, combine_notes_overwrite))
die("BUG: combine_notes_overwrite failed"); BUG("combine_notes_overwrite failed");
commit_notes(t, "Notes added by 'git notes copy'"); commit_notes(t, "Notes added by 'git notes copy'");
out: out:
free_notes(t); free_notes(t);
@ -621,7 +621,7 @@ static int append_edit(int argc, const char **argv, const char *prefix)
if (d.buf.len || allow_empty) { if (d.buf.len || allow_empty) {
write_note_data(&d, &new_note); write_note_data(&d, &new_note);
if (add_note(t, &object, &new_note, combine_notes_overwrite)) if (add_note(t, &object, &new_note, combine_notes_overwrite))
die("BUG: combine_notes_overwrite failed"); BUG("combine_notes_overwrite failed");
logmsg = xstrfmt("Notes added by 'git notes %s'", argv[0]); logmsg = xstrfmt("Notes added by 'git notes %s'", argv[0]);
} else { } else {
fprintf(stderr, _("Removing note for object %s\n"), fprintf(stderr, _("Removing note for object %s\n"),
@ -831,7 +831,7 @@ static int merge(int argc, const char **argv, const char *prefix)
const char *short_ref = NULL; const char *short_ref = NULL;
if (!skip_prefix(o.local_ref, "refs/notes/", &short_ref)) if (!skip_prefix(o.local_ref, "refs/notes/", &short_ref))
die("BUG: local ref %s is outside of refs/notes/", BUG("local ref %s is outside of refs/notes/",
o.local_ref); o.local_ref);
strbuf_addf(&merge_key, "notes.%s.mergeStrategy", short_ref); strbuf_addf(&merge_key, "notes.%s.mergeStrategy", short_ref);

View File

@ -1668,7 +1668,7 @@ static void break_delta_chains(struct object_entry *entry)
* is a bug. * is a bug.
*/ */
if (cur->dfs_state != DFS_NONE) if (cur->dfs_state != DFS_NONE)
die("BUG: confusing delta dfs state in first pass: %d", BUG("confusing delta dfs state in first pass: %d",
cur->dfs_state); cur->dfs_state);
/* /*
@ -1725,7 +1725,7 @@ static void break_delta_chains(struct object_entry *entry)
if (cur->dfs_state == DFS_DONE) if (cur->dfs_state == DFS_DONE)
break; break;
else if (cur->dfs_state != DFS_ACTIVE) else if (cur->dfs_state != DFS_ACTIVE)
die("BUG: confusing delta dfs state in second pass: %d", BUG("confusing delta dfs state in second pass: %d",
cur->dfs_state); cur->dfs_state);
/* /*

View File

@ -543,7 +543,7 @@ static int run_fetch(const char *repo, const char **refspecs)
argv_array_push(&args, repo); argv_array_push(&args, repo);
argv_array_pushv(&args, refspecs); argv_array_pushv(&args, refspecs);
} else if (*refspecs) } else if (*refspecs)
die("BUG: refspecs without repo?"); BUG("refspecs without repo?");
ret = run_command_v_opt(args.argv, RUN_GIT_CMD); ret = run_command_v_opt(args.argv, RUN_GIT_CMD);
argv_array_clear(&args); argv_array_clear(&args);
return ret; return ret;

View File

@ -1378,7 +1378,7 @@ static void warn_if_skipped_connectivity_check(struct command *commands,
} }
} }
if (!checked_connectivity) if (!checked_connectivity)
die("BUG: connectivity check skipped???"); BUG("connectivity check skipped???");
} }
static void execute_commands_non_atomic(struct command *commands, static void execute_commands_non_atomic(struct command *commands,

View File

@ -1174,7 +1174,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
report(_("Untracked cache enabled for '%s'"), get_git_work_tree()); report(_("Untracked cache enabled for '%s'"), get_git_work_tree());
break; break;
default: default:
die("BUG: bad untracked_cache value: %d", untracked_cache); BUG("bad untracked_cache value: %d", untracked_cache);
} }
if (fsmonitor > 0) { if (fsmonitor > 0) {

View File

@ -230,7 +230,7 @@ static int deflate_to_pack(struct bulk_checkin_state *state,
* pack, and write into it. * pack, and write into it.
*/ */
if (!idx) if (!idx)
die("BUG: should not happen"); BUG("should not happen");
hashfile_truncate(state->f, &checkpoint); hashfile_truncate(state->f, &checkpoint);
state->offset = checkpoint.offset; state->offset = checkpoint.offset;
finish_bulk_checkin(state); finish_bulk_checkin(state);

View File

@ -174,7 +174,7 @@ static char *color_output(char *out, int len, const struct color *c, char type)
break; break;
case COLOR_ANSI: case COLOR_ANSI:
if (len < 2) if (len < 2)
die("BUG: color parsing ran out of space"); BUG("color parsing ran out of space");
*out++ = type; *out++ = type;
*out++ = '0' + c->value; *out++ = '0' + c->value;
break; break;
@ -256,7 +256,7 @@ int color_parse_mem(const char *value, int value_len, char *dst)
#undef OUT #undef OUT
#define OUT(x) do { \ #define OUT(x) do { \
if (dst == end) \ if (dst == end) \
die("BUG: color parsing ran out of space"); \ BUG("color parsing ran out of space"); \
*dst++ = (x); \ *dst++ = (x); \
} while(0) } while(0)

View File

@ -214,7 +214,7 @@ void print_columns(const struct string_list *list, unsigned int colopts,
display_table(list, colopts, &nopts); display_table(list, colopts, &nopts);
break; break;
default: default:
die("BUG: invalid layout mode %d", COL_LAYOUT(colopts)); BUG("invalid layout mode %d", COL_LAYOUT(colopts));
} }
} }

View File

@ -103,7 +103,7 @@ static int config_buf_ungetc(int c, struct config_source *conf)
if (conf->u.buf.pos > 0) { if (conf->u.buf.pos > 0) {
conf->u.buf.pos--; conf->u.buf.pos--;
if (conf->u.buf.buf[conf->u.buf.pos] != c) if (conf->u.buf.buf[conf->u.buf.pos] != c)
die("BUG: config_buf can only ungetc the same character"); BUG("config_buf can only ungetc the same character");
return c; return c;
} }
@ -190,7 +190,7 @@ static int prepare_include_condition_pattern(struct strbuf *pat)
strbuf_realpath(&path, cf->path, 1); strbuf_realpath(&path, cf->path, 1);
slash = find_last_dir_sep(path.buf); slash = find_last_dir_sep(path.buf);
if (!slash) if (!slash)
die("BUG: how is this possible?"); BUG("how is this possible?");
strbuf_splice(pat, 0, 1, path.buf, slash - path.buf); strbuf_splice(pat, 0, 1, path.buf, slash - path.buf);
prefix = slash - path.buf + 1 /* slash */; prefix = slash - path.buf + 1 /* slash */;
} else if (!is_absolute_path(pat->buf)) } else if (!is_absolute_path(pat->buf))
@ -1814,7 +1814,7 @@ static int configset_add_value(struct config_set *cs, const char *key, const cha
l_item->value_index = e->value_list.nr - 1; l_item->value_index = e->value_list.nr - 1;
if (!cf) if (!cf)
die("BUG: configset_add_value has no source"); BUG("configset_add_value has no source");
if (cf->name) { if (cf->name) {
kv_info->filename = strintern(cf->name); kv_info->filename = strintern(cf->name);
kv_info->linenr = cf->linenr; kv_info->linenr = cf->linenr;
@ -3208,7 +3208,7 @@ const char *current_config_origin_type(void)
else if(cf) else if(cf)
type = cf->origin_type; type = cf->origin_type;
else else
die("BUG: current_config_origin_type called outside config callback"); BUG("current_config_origin_type called outside config callback");
switch (type) { switch (type) {
case CONFIG_ORIGIN_BLOB: case CONFIG_ORIGIN_BLOB:
@ -3222,7 +3222,7 @@ const char *current_config_origin_type(void)
case CONFIG_ORIGIN_CMDLINE: case CONFIG_ORIGIN_CMDLINE:
return "command line"; return "command line";
default: default:
die("BUG: unknown config origin type"); BUG("unknown config origin type");
} }
} }
@ -3234,7 +3234,7 @@ const char *current_config_name(void)
else if (cf) else if (cf)
name = cf->name; name = cf->name;
else else
die("BUG: current_config_name called outside config callback"); BUG("current_config_name called outside config callback");
return name ? name : ""; return name ? name : "";
} }

2
date.c
View File

@ -185,7 +185,7 @@ struct date_mode *date_mode_from_type(enum date_mode_type type)
{ {
static struct date_mode mode; static struct date_mode mode;
if (type == DATE_STRFTIME) if (type == DATE_STRFTIME)
die("BUG: cannot create anonymous strftime date_mode struct"); BUG("cannot create anonymous strftime date_mode struct");
mode.type = type; mode.type = type;
mode.local = 0; mode.local = 0;
return &mode; return &mode;

12
diff.c
View File

@ -1184,7 +1184,7 @@ static void emit_diff_symbol_from_struct(struct diff_options *o,
fputs(o->stat_sep, o->file); fputs(o->stat_sep, o->file);
break; break;
default: default:
die("BUG: unknown diff symbol"); BUG("unknown diff symbol");
} }
strbuf_release(&sb); strbuf_release(&sb);
} }
@ -1343,7 +1343,7 @@ static struct diff_tempfile *claim_diff_tempfile(void) {
for (i = 0; i < ARRAY_SIZE(diff_temp); i++) for (i = 0; i < ARRAY_SIZE(diff_temp); i++)
if (!diff_temp[i].name) if (!diff_temp[i].name)
return diff_temp + i; return diff_temp + i;
die("BUG: diff is failing to clean up its tempfiles"); BUG("diff is failing to clean up its tempfiles");
} }
static void remove_tempfile(void) static void remove_tempfile(void)
@ -3841,7 +3841,7 @@ static const char *diff_abbrev_oid(const struct object_id *oid, int abbrev)
if (abbrev < 0) if (abbrev < 0)
abbrev = FALLBACK_DEFAULT_ABBREV; abbrev = FALLBACK_DEFAULT_ABBREV;
if (abbrev > GIT_SHA1_HEXSZ) if (abbrev > GIT_SHA1_HEXSZ)
die("BUG: oid abbreviation out of range: %d", abbrev); BUG("oid abbreviation out of range: %d", abbrev);
if (abbrev) if (abbrev)
hex[abbrev] = '\0'; hex[abbrev] = '\0';
return hex; return hex;
@ -4335,7 +4335,7 @@ static int stat_opt(struct diff_options *options, const char **av)
int argcount = 1; int argcount = 1;
if (!skip_prefix(arg, "--stat", &arg)) if (!skip_prefix(arg, "--stat", &arg))
die("BUG: stat option does not begin with --stat: %s", arg); BUG("stat option does not begin with --stat: %s", arg);
end = (char *)arg; end = (char *)arg;
switch (*arg) { switch (*arg) {
@ -5520,7 +5520,7 @@ static void diff_flush_patch_all_file_pairs(struct diff_options *o)
struct diff_queue_struct *q = &diff_queued_diff; struct diff_queue_struct *q = &diff_queued_diff;
if (WSEH_NEW & WS_RULE_MASK) if (WSEH_NEW & WS_RULE_MASK)
die("BUG: WS rules bit mask overlaps with diff symbol flags"); BUG("WS rules bit mask overlaps with diff symbol flags");
if (o->color_moved) if (o->color_moved)
o->emitted_symbols = &esm; o->emitted_symbols = &esm;
@ -6054,7 +6054,7 @@ size_t fill_textconv(struct userdiff_driver *driver,
} }
if (!driver->textconv) if (!driver->textconv)
die("BUG: fill_textconv called with non-textconv driver"); BUG("fill_textconv called with non-textconv driver");
if (driver->textconv_cache && df->oid_valid) { if (driver->textconv_cache && df->oid_valid) {
*outbuf = notes_cache_get(driver->textconv_cache, *outbuf = notes_cache_get(driver->textconv_cache,

View File

@ -188,7 +188,7 @@ struct dir_iterator *dir_iterator_begin(const char *path)
struct dir_iterator *dir_iterator = &iter->base; struct dir_iterator *dir_iterator = &iter->base;
if (!path || !*path) if (!path || !*path)
die("BUG: empty path passed to dir_iterator_begin()"); BUG("empty path passed to dir_iterator_begin()");
strbuf_init(&iter->base.path, PATH_MAX); strbuf_init(&iter->base.path, PATH_MAX);
strbuf_addstr(&iter->base.path, path); strbuf_addstr(&iter->base.path, path);

View File

@ -1074,7 +1074,7 @@ int git_qsort_s(void *base, size_t nmemb, size_t size,
#define QSORT_S(base, n, compar, ctx) do { \ #define QSORT_S(base, n, compar, ctx) do { \
if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \ if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \
die("BUG: qsort_s() failed"); \ BUG("qsort_s() failed"); \
} while (0) } while (0)
#ifndef REG_STARTEND #ifndef REG_STARTEND
@ -1133,6 +1133,9 @@ static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
#define HAVE_VARIADIC_MACROS 1 #define HAVE_VARIADIC_MACROS 1
#endif #endif
/* usage.c: only to be used for testing BUG() implementation (see test-tool) */
extern int BUG_exit_code;
#ifdef HAVE_VARIADIC_MACROS #ifdef HAVE_VARIADIC_MACROS
__attribute__((format (printf, 3, 4))) NORETURN __attribute__((format (printf, 3, 4))) NORETURN
void BUG_fl(const char *file, int line, const char *fmt, ...); void BUG_fl(const char *file, int line, const char *fmt, ...);

16
grep.c
View File

@ -404,7 +404,7 @@ static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
die("Couldn't allocate PCRE JIT stack"); die("Couldn't allocate PCRE JIT stack");
pcre_assign_jit_stack(p->pcre1_extra_info, NULL, p->pcre1_jit_stack); pcre_assign_jit_stack(p->pcre1_extra_info, NULL, p->pcre1_jit_stack);
} else if (p->pcre1_jit_on != 0) { } else if (p->pcre1_jit_on != 0) {
die("BUG: The pcre1_jit_on variable should be 0 or 1, not %d", BUG("The pcre1_jit_on variable should be 0 or 1, not %d",
p->pcre1_jit_on); p->pcre1_jit_on);
} }
#endif #endif
@ -550,7 +550,7 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
die("Couldn't allocate PCRE2 match context"); die("Couldn't allocate PCRE2 match context");
pcre2_jit_stack_assign(p->pcre2_match_context, NULL, p->pcre2_jit_stack); pcre2_jit_stack_assign(p->pcre2_match_context, NULL, p->pcre2_jit_stack);
} else if (p->pcre2_jit_on != 0) { } else if (p->pcre2_jit_on != 0) {
die("BUG: The pcre2_jit_on variable should be 0 or 1, not %d", BUG("The pcre2_jit_on variable should be 0 or 1, not %d",
p->pcre1_jit_on); p->pcre1_jit_on);
} }
} }
@ -917,10 +917,10 @@ static struct grep_expr *prep_header_patterns(struct grep_opt *opt)
for (p = opt->header_list; p; p = p->next) { for (p = opt->header_list; p; p = p->next) {
if (p->token != GREP_PATTERN_HEAD) if (p->token != GREP_PATTERN_HEAD)
die("BUG: a non-header pattern in grep header list."); BUG("a non-header pattern in grep header list.");
if (p->field < GREP_HEADER_FIELD_MIN || if (p->field < GREP_HEADER_FIELD_MIN ||
GREP_HEADER_FIELD_MAX <= p->field) GREP_HEADER_FIELD_MAX <= p->field)
die("BUG: unknown header field %d", p->field); BUG("unknown header field %d", p->field);
compile_regexp(p, opt); compile_regexp(p, opt);
} }
@ -933,7 +933,7 @@ static struct grep_expr *prep_header_patterns(struct grep_opt *opt)
h = compile_pattern_atom(&pp); h = compile_pattern_atom(&pp);
if (!h || pp != p->next) if (!h || pp != p->next)
die("BUG: malformed header expr"); BUG("malformed header expr");
if (!header_group[p->field]) { if (!header_group[p->field]) {
header_group[p->field] = h; header_group[p->field] = h;
continue; continue;
@ -1652,7 +1652,7 @@ static int fill_textconv_grep(struct userdiff_driver *driver,
fill_filespec(df, &null_oid, 0, 0100644); fill_filespec(df, &null_oid, 0, 0100644);
break; break;
default: default:
die("BUG: attempt to textconv something without a path?"); BUG("attempt to textconv something without a path?");
} }
/* /*
@ -1748,7 +1748,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
case GREP_BINARY_TEXT: case GREP_BINARY_TEXT:
break; break;
default: default:
die("BUG: unknown binary handling mode"); BUG("unknown binary handling mode");
} }
} }
@ -2072,7 +2072,7 @@ static int grep_source_load(struct grep_source *gs)
case GREP_SOURCE_BUF: case GREP_SOURCE_BUF:
return gs->buf ? 0 : -1; return gs->buf ? 0 : -1;
} }
die("BUG: invalid grep_source type to load"); BUG("invalid grep_source type to load");
} }
void grep_source_load_driver(struct grep_source *gs) void grep_source_load_driver(struct grep_source *gs)

8
http.c
View File

@ -1846,7 +1846,7 @@ static int update_url_from_redirect(struct strbuf *base,
return 0; return 0;
if (!skip_prefix(asked, base->buf, &tail)) if (!skip_prefix(asked, base->buf, &tail))
die("BUG: update_url_from_redirect: %s is not a superset of %s", BUG("update_url_from_redirect: %s is not a superset of %s",
asked, base->buf); asked, base->buf);
new_len = got->len; new_len = got->len;
@ -1894,7 +1894,7 @@ static int http_request_reauth(const char *url,
strbuf_reset(result); strbuf_reset(result);
break; break;
default: default:
die("BUG: HTTP_KEEP_ERROR is only supported with strbufs"); BUG("HTTP_KEEP_ERROR is only supported with strbufs");
} }
} }
@ -2105,7 +2105,7 @@ int finish_http_pack_request(struct http_pack_request *preq)
*lst = (*lst)->next; *lst = (*lst)->next;
if (!strip_suffix(preq->tmpfile, ".pack.temp", &len)) if (!strip_suffix(preq->tmpfile, ".pack.temp", &len))
die("BUG: pack tmpfile does not end in .pack.temp?"); BUG("pack tmpfile does not end in .pack.temp?");
tmp_idx = xstrfmt("%.*s.idx.temp", (int)len, preq->tmpfile); tmp_idx = xstrfmt("%.*s.idx.temp", (int)len, preq->tmpfile);
argv_array_push(&ip.args, "index-pack"); argv_array_push(&ip.args, "index-pack");
@ -2201,7 +2201,7 @@ static size_t fwrite_sha1_file(char *ptr, size_t eltsize, size_t nmemb,
CURLcode c = curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE, CURLcode c = curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE,
&slot->http_code); &slot->http_code);
if (c != CURLE_OK) if (c != CURLE_OK)
die("BUG: curl_easy_getinfo for HTTP code failed: %s", BUG("curl_easy_getinfo for HTTP code failed: %s",
curl_easy_strerror(c)); curl_easy_strerror(c));
if (slot->http_code >= 300) if (slot->http_code >= 300)
return size; return size;

View File

@ -511,7 +511,7 @@ static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
va_start(va, fmt); va_start(va, fmt);
if (blen <= 0 || (unsigned)(ret = vsnprintf(buf, blen, fmt, va)) >= (unsigned)blen) if (blen <= 0 || (unsigned)(ret = vsnprintf(buf, blen, fmt, va)) >= (unsigned)blen)
die("BUG: buffer too small. Please report a bug."); BUG("buffer too small. Please report a bug.");
va_end(va); va_end(va);
return ret; return ret;
} }

View File

@ -193,7 +193,7 @@ char *get_locked_file_path(struct lock_file *lk)
strbuf_addstr(&ret, get_tempfile_path(lk->tempfile)); strbuf_addstr(&ret, get_tempfile_path(lk->tempfile));
if (ret.len <= LOCK_SUFFIX_LEN || if (ret.len <= LOCK_SUFFIX_LEN ||
strcmp(ret.buf + ret.len - LOCK_SUFFIX_LEN, LOCK_SUFFIX)) strcmp(ret.buf + ret.len - LOCK_SUFFIX_LEN, LOCK_SUFFIX))
die("BUG: get_locked_file_path() called for malformed lock object"); BUG("get_locked_file_path() called for malformed lock object");
/* remove ".lock": */ /* remove ".lock": */
strbuf_setlen(&ret, ret.len - LOCK_SUFFIX_LEN); strbuf_setlen(&ret, ret.len - LOCK_SUFFIX_LEN);
return strbuf_detach(&ret, NULL); return strbuf_detach(&ret, NULL);

View File

@ -716,7 +716,7 @@ static void flush_inbody_header_accum(struct mailinfo *mi)
if (!mi->inbody_header_accum.len) if (!mi->inbody_header_accum.len)
return; return;
if (!check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0)) if (!check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0))
die("BUG: inbody_header_accum, if not empty, must always contain a valid in-body header"); BUG("inbody_header_accum, if not empty, must always contain a valid in-body header");
strbuf_reset(&mi->inbody_header_accum); strbuf_reset(&mi->inbody_header_accum);
} }

View File

@ -392,7 +392,7 @@ struct tree *write_tree_from_memory(struct merge_options *o)
fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce), fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce),
(int)ce_namelen(ce), ce->name); (int)ce_namelen(ce), ce->name);
} }
die("BUG: unmerged index entries in merge-recursive.c"); BUG("unmerged index entries in merge-recursive.c");
} }
if (!active_cache_tree) if (!active_cache_tree)
@ -1166,7 +1166,7 @@ static int merge_file_1(struct merge_options *o,
break; break;
} }
} else } else
die("BUG: unsupported object type in the tree"); BUG("unsupported object type in the tree");
} }
if (result->merge) if (result->merge)
@ -2419,7 +2419,7 @@ static int process_renames(struct merge_options *o,
const char *ren2_dst = ren2->pair->two->path; const char *ren2_dst = ren2->pair->two->path;
enum rename_type rename_type; enum rename_type rename_type;
if (strcmp(ren1_src, ren2_src) != 0) if (strcmp(ren1_src, ren2_src) != 0)
die("BUG: ren1_src != ren2_src"); BUG("ren1_src != ren2_src");
ren2->dst_entry->processed = 1; ren2->dst_entry->processed = 1;
ren2->processed = 1; ren2->processed = 1;
if (strcmp(ren1_dst, ren2_dst) != 0) { if (strcmp(ren1_dst, ren2_dst) != 0) {
@ -2453,7 +2453,7 @@ static int process_renames(struct merge_options *o,
ren2 = lookup->util; ren2 = lookup->util;
ren2_dst = ren2->pair->two->path; ren2_dst = ren2->pair->two->path;
if (strcmp(ren1_dst, ren2_dst) != 0) if (strcmp(ren1_dst, ren2_dst) != 0)
die("BUG: ren1_dst != ren2_dst"); BUG("ren1_dst != ren2_dst");
clean_merge = 0; clean_merge = 0;
ren2->processed = 1; ren2->processed = 1;
@ -3057,7 +3057,7 @@ static int process_entry(struct merge_options *o,
*/ */
remove_file(o, 1, path, !a_mode); remove_file(o, 1, path, !a_mode);
} else } else
die("BUG: fatal merge failure, shouldn't happen."); BUG("fatal merge failure, shouldn't happen.");
return clean_merge; return clean_merge;
} }
@ -3135,7 +3135,7 @@ int merge_trees(struct merge_options *o,
for (i = 0; i < entries->nr; i++) { for (i = 0; i < entries->nr; i++) {
struct stage_data *e = entries->items[i].util; struct stage_data *e = entries->items[i].util;
if (!e->processed) if (!e->processed)
die("BUG: unprocessed path??? %s", BUG("unprocessed path??? %s",
entries->items[i].string); entries->items[i].string);
} }

View File

@ -442,7 +442,7 @@ static int merge_one_change(struct notes_merge_options *o,
printf("Using remote notes for %s\n", printf("Using remote notes for %s\n",
oid_to_hex(&p->obj)); oid_to_hex(&p->obj));
if (add_note(t, &p->obj, &p->remote, combine_notes_overwrite)) if (add_note(t, &p->obj, &p->remote, combine_notes_overwrite))
die("BUG: combine_notes_overwrite failed"); BUG("combine_notes_overwrite failed");
return 0; return 0;
case NOTES_MERGE_RESOLVE_UNION: case NOTES_MERGE_RESOLVE_UNION:
if (o->verbosity >= 2) if (o->verbosity >= 2)
@ -490,7 +490,7 @@ static int merge_changes(struct notes_merge_options *o,
trace_printf("\t\t\tno local change, adopted remote\n"); trace_printf("\t\t\tno local change, adopted remote\n");
if (add_note(t, &p->obj, &p->remote, if (add_note(t, &p->obj, &p->remote,
combine_notes_overwrite)) combine_notes_overwrite))
die("BUG: combine_notes_overwrite failed"); BUG("combine_notes_overwrite failed");
} else { } else {
/* need file-level merge between local and remote */ /* need file-level merge between local and remote */
trace_printf("\t\t\tneed content-level merge\n"); trace_printf("\t\t\tneed content-level merge\n");

View File

@ -477,7 +477,7 @@ static void write_selected_commits_v1(struct hashfile *f,
sha1_pos(stored->commit->object.oid.hash, index, index_nr, sha1_access); sha1_pos(stored->commit->object.oid.hash, index, index_nr, sha1_access);
if (commit_pos < 0) if (commit_pos < 0)
die("BUG: trying to write commit not in index"); BUG("trying to write commit not in index");
hashwrite_be32(f, commit_pos); hashwrite_be32(f, commit_pos);
hashwrite_u8(f, stored->xor_offset); hashwrite_u8(f, stored->xor_offset);

View File

@ -255,7 +255,7 @@ static char *pack_bitmap_filename(struct packed_git *p)
size_t len; size_t len;
if (!strip_suffix(p->pack_name, ".pack", &len)) if (!strip_suffix(p->pack_name, ".pack", &len))
die("BUG: pack_name does not end in .pack"); BUG("pack_name does not end in .pack");
return xstrfmt("%.*s.bitmap", (int)len, p->pack_name); return xstrfmt("%.*s.bitmap", (int)len, p->pack_name);
} }
@ -723,13 +723,13 @@ int prepare_bitmap_walk(struct rev_info *revs)
revs->ignore_missing_links = 0; revs->ignore_missing_links = 0;
if (haves_bitmap == NULL) if (haves_bitmap == NULL)
die("BUG: failed to perform bitmap walk"); BUG("failed to perform bitmap walk");
} }
wants_bitmap = find_objects(revs, wants, haves_bitmap); wants_bitmap = find_objects(revs, wants, haves_bitmap);
if (!wants_bitmap) if (!wants_bitmap)
die("BUG: failed to perform bitmap walk"); BUG("failed to perform bitmap walk");
if (haves_bitmap) if (haves_bitmap)
bitmap_and_not(wants_bitmap, haves_bitmap); bitmap_and_not(wants_bitmap, haves_bitmap);

View File

@ -60,7 +60,7 @@ static void rehash_objects(struct packing_data *pdata)
&found); &found);
if (found) if (found)
die("BUG: Duplicate object in hash"); BUG("Duplicate object in hash");
pdata->index[ix] = i + 1; pdata->index[ix] = i + 1;
entry++; entry++;

View File

@ -188,7 +188,7 @@ int open_pack_index(struct packed_git *p)
return 0; return 0;
if (!strip_suffix(p->pack_name, ".pack", &len)) if (!strip_suffix(p->pack_name, ".pack", &len))
die("BUG: pack_name does not end in .pack"); BUG("pack_name does not end in .pack");
idx_name = xstrfmt("%.*s.idx", (int)len, p->pack_name); idx_name = xstrfmt("%.*s.idx", (int)len, p->pack_name);
ret = check_packed_git_idx(idx_name, p); ret = check_packed_git_idx(idx_name, p);
free(idx_name); free(idx_name);
@ -317,7 +317,7 @@ void close_all_packs(struct raw_object_store *o)
for (p = o->packed_git; p; p = p->next) for (p = o->packed_git; p; p = p->next)
if (p->do_not_close) if (p->do_not_close)
die("BUG: want to close pack marked 'do-not-close'"); BUG("want to close pack marked 'do-not-close'");
else else
close_pack(p); close_pack(p);
} }
@ -1567,7 +1567,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
case OBJ_OFS_DELTA: case OBJ_OFS_DELTA:
case OBJ_REF_DELTA: case OBJ_REF_DELTA:
if (data) if (data)
die("BUG: unpack_entry: left loop at a valid delta"); BUG("unpack_entry: left loop at a valid delta");
break; break;
case OBJ_COMMIT: case OBJ_COMMIT:
case OBJ_TREE: case OBJ_TREE:

View File

@ -198,7 +198,7 @@ static void parse_pathspec_attr_match(struct pathspec_item *item, const char *va
} }
if (item->attr_check->nr != item->attr_match_nr) if (item->attr_check->nr != item->attr_match_nr)
die("BUG: should have same number of entries"); BUG("should have same number of entries");
string_list_clear(&list, 0); string_list_clear(&list, 0);
} }
@ -422,7 +422,7 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
if (pathspec_prefix >= 0 && if (pathspec_prefix >= 0 &&
(prefixlen || (prefix && *prefix))) (prefixlen || (prefix && *prefix)))
die("BUG: 'prefix' magic is supposed to be used at worktree's root"); BUG("'prefix' magic is supposed to be used at worktree's root");
if ((magic & PATHSPEC_LITERAL) && (magic & PATHSPEC_GLOB)) if ((magic & PATHSPEC_LITERAL) && (magic & PATHSPEC_GLOB))
die(_("%s: 'literal' and 'glob' are incompatible"), elt); die(_("%s: 'literal' and 'glob' are incompatible"), elt);
@ -486,7 +486,7 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
/* sanity checks, pathspec matchers assume these are sane */ /* sanity checks, pathspec matchers assume these are sane */
if (item->nowildcard_len > item->len || if (item->nowildcard_len > item->len ||
item->prefix > item->len) { item->prefix > item->len) {
die ("BUG: error initializing pathspec_item"); BUG("error initializing pathspec_item");
} }
} }
@ -545,7 +545,7 @@ void parse_pathspec(struct pathspec *pathspec,
if ((flags & PATHSPEC_PREFER_CWD) && if ((flags & PATHSPEC_PREFER_CWD) &&
(flags & PATHSPEC_PREFER_FULL)) (flags & PATHSPEC_PREFER_FULL))
die("BUG: PATHSPEC_PREFER_CWD and PATHSPEC_PREFER_FULL are incompatible"); BUG("PATHSPEC_PREFER_CWD and PATHSPEC_PREFER_FULL are incompatible");
/* No arguments with prefix -> prefix pathspec */ /* No arguments with prefix -> prefix pathspec */
if (!entry) { if (!entry) {
@ -553,7 +553,7 @@ void parse_pathspec(struct pathspec *pathspec,
return; return;
if (!(flags & PATHSPEC_PREFER_CWD)) if (!(flags & PATHSPEC_PREFER_CWD))
die("BUG: PATHSPEC_PREFER_CWD requires arguments"); BUG("PATHSPEC_PREFER_CWD requires arguments");
pathspec->items = item = xcalloc(1, sizeof(*item)); pathspec->items = item = xcalloc(1, sizeof(*item));
item->match = xstrdup(prefix); item->match = xstrdup(prefix);
@ -609,7 +609,7 @@ void parse_pathspec(struct pathspec *pathspec,
if (pathspec->magic & PATHSPEC_MAXDEPTH) { if (pathspec->magic & PATHSPEC_MAXDEPTH) {
if (flags & PATHSPEC_KEEP_ORDER) if (flags & PATHSPEC_KEEP_ORDER)
die("BUG: PATHSPEC_MAXDEPTH_VALID and PATHSPEC_KEEP_ORDER are incompatible"); BUG("PATHSPEC_MAXDEPTH_VALID and PATHSPEC_KEEP_ORDER are incompatible");
QSORT(pathspec->items, pathspec->nr, pathspec_item_cmp); QSORT(pathspec->items, pathspec->nr, pathspec_item_cmp);
} }
} }

View File

@ -277,7 +277,7 @@ static int get_packet_data(int fd, char **src_buf, size_t *src_size,
ssize_t ret; ssize_t ret;
if (fd >= 0 && src_buf && *src_buf) if (fd >= 0 && src_buf && *src_buf)
die("BUG: multiple sources given to packet_read"); BUG("multiple sources given to packet_read");
/* Read up to "size" bytes from our source, whatever it is. */ /* Read up to "size" bytes from our source, whatever it is. */
if (src_buf && *src_buf) { if (src_buf && *src_buf) {

View File

@ -20,7 +20,7 @@ void prio_queue_reverse(struct prio_queue *queue)
int i, j; int i, j;
if (queue->compare != NULL) if (queue->compare != NULL)
die("BUG: prio_queue_reverse() on non-LIFO queue"); BUG("prio_queue_reverse() on non-LIFO queue");
for (i = 0; i < (j = (queue->nr - 1) - i); i++) for (i = 0; i < (j = (queue->nr - 1) - i); i++)
swap(queue, i, j); swap(queue, i, j);
} }

View File

@ -824,7 +824,7 @@ static int grab_objectname(const char *name, const struct object_id *oid,
v->s = xstrdup(find_unique_abbrev(oid, atom->u.objectname.length)); v->s = xstrdup(find_unique_abbrev(oid, atom->u.objectname.length));
return 1; return 1;
} else } else
die("BUG: unknown %%(objectname) option"); BUG("unknown %%(objectname) option");
} }
return 0; return 0;
} }
@ -1372,7 +1372,7 @@ static void fill_remote_ref_details(struct used_atom *atom, const char *refname,
else else
*s = ""; *s = "";
} else } else
die("BUG: unhandled RR_* enum"); BUG("unhandled RR_* enum");
} }
char *get_head_description(void) char *get_head_description(void)

34
refs.c
View File

@ -962,10 +962,10 @@ void ref_transaction_free(struct ref_transaction *transaction)
/* OK */ /* OK */
break; break;
case REF_TRANSACTION_PREPARED: case REF_TRANSACTION_PREPARED:
die("BUG: free called on a prepared reference transaction"); BUG("free called on a prepared reference transaction");
break; break;
default: default:
die("BUG: unexpected reference transaction state"); BUG("unexpected reference transaction state");
break; break;
} }
@ -987,7 +987,7 @@ struct ref_update *ref_transaction_add_update(
struct ref_update *update; struct ref_update *update;
if (transaction->state != REF_TRANSACTION_OPEN) if (transaction->state != REF_TRANSACTION_OPEN)
die("BUG: update called for transaction that is not open"); BUG("update called for transaction that is not open");
FLEX_ALLOC_STR(update, refname, refname); FLEX_ALLOC_STR(update, refname, refname);
ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc); ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
@ -1037,7 +1037,7 @@ int ref_transaction_create(struct ref_transaction *transaction,
struct strbuf *err) struct strbuf *err)
{ {
if (!new_oid || is_null_oid(new_oid)) if (!new_oid || is_null_oid(new_oid))
die("BUG: create called without valid new_oid"); BUG("create called without valid new_oid");
return ref_transaction_update(transaction, refname, new_oid, return ref_transaction_update(transaction, refname, new_oid,
&null_oid, flags, msg, err); &null_oid, flags, msg, err);
} }
@ -1049,7 +1049,7 @@ int ref_transaction_delete(struct ref_transaction *transaction,
struct strbuf *err) struct strbuf *err)
{ {
if (old_oid && is_null_oid(old_oid)) if (old_oid && is_null_oid(old_oid))
die("BUG: delete called with old_oid set to zeros"); BUG("delete called with old_oid set to zeros");
return ref_transaction_update(transaction, refname, return ref_transaction_update(transaction, refname,
&null_oid, old_oid, &null_oid, old_oid,
flags, msg, err); flags, msg, err);
@ -1062,7 +1062,7 @@ int ref_transaction_verify(struct ref_transaction *transaction,
struct strbuf *err) struct strbuf *err)
{ {
if (!old_oid) if (!old_oid)
die("BUG: verify called with old_oid set to NULL"); BUG("verify called with old_oid set to NULL");
return ref_transaction_update(transaction, refname, return ref_transaction_update(transaction, refname,
NULL, old_oid, NULL, old_oid,
flags, NULL, err); flags, NULL, err);
@ -1660,7 +1660,7 @@ static struct ref_store *ref_store_init(const char *gitdir,
struct ref_store *refs; struct ref_store *refs;
if (!be) if (!be)
die("BUG: reference backend %s is unknown", be_name); BUG("reference backend %s is unknown", be_name);
refs = be->init(gitdir, flags); refs = be->init(gitdir, flags);
return refs; return refs;
@ -1691,7 +1691,7 @@ static void register_ref_store_map(struct hashmap *map,
hashmap_init(map, ref_store_hash_cmp, NULL, 0); hashmap_init(map, ref_store_hash_cmp, NULL, 0);
if (hashmap_put(map, alloc_ref_store_hash_entry(name, refs))) if (hashmap_put(map, alloc_ref_store_hash_entry(name, refs)))
die("BUG: %s ref_store '%s' initialized twice", type, name); BUG("%s ref_store '%s' initialized twice", type, name);
} }
struct ref_store *get_submodule_ref_store(const char *submodule) struct ref_store *get_submodule_ref_store(const char *submodule)
@ -1837,7 +1837,7 @@ int ref_update_reject_duplicates(struct string_list *refnames,
refnames->items[i].string); refnames->items[i].string);
return 1; return 1;
} else if (cmp > 0) { } else if (cmp > 0) {
die("BUG: ref_update_reject_duplicates() received unsorted list"); BUG("ref_update_reject_duplicates() received unsorted list");
} }
} }
return 0; return 0;
@ -1853,13 +1853,13 @@ int ref_transaction_prepare(struct ref_transaction *transaction,
/* Good. */ /* Good. */
break; break;
case REF_TRANSACTION_PREPARED: case REF_TRANSACTION_PREPARED:
die("BUG: prepare called twice on reference transaction"); BUG("prepare called twice on reference transaction");
break; break;
case REF_TRANSACTION_CLOSED: case REF_TRANSACTION_CLOSED:
die("BUG: prepare called on a closed reference transaction"); BUG("prepare called on a closed reference transaction");
break; break;
default: default:
die("BUG: unexpected reference transaction state"); BUG("unexpected reference transaction state");
break; break;
} }
@ -1886,10 +1886,10 @@ int ref_transaction_abort(struct ref_transaction *transaction,
ret = refs->be->transaction_abort(refs, transaction, err); ret = refs->be->transaction_abort(refs, transaction, err);
break; break;
case REF_TRANSACTION_CLOSED: case REF_TRANSACTION_CLOSED:
die("BUG: abort called on a closed reference transaction"); BUG("abort called on a closed reference transaction");
break; break;
default: default:
die("BUG: unexpected reference transaction state"); BUG("unexpected reference transaction state");
break; break;
} }
@ -1914,10 +1914,10 @@ int ref_transaction_commit(struct ref_transaction *transaction,
/* Fall through to finish. */ /* Fall through to finish. */
break; break;
case REF_TRANSACTION_CLOSED: case REF_TRANSACTION_CLOSED:
die("BUG: commit called on a closed reference transaction"); BUG("commit called on a closed reference transaction");
break; break;
default: default:
die("BUG: unexpected reference transaction state"); BUG("unexpected reference transaction state");
break; break;
} }
@ -1998,7 +1998,7 @@ int refs_verify_refname_available(struct ref_store *refs,
} }
if (ok != ITER_DONE) if (ok != ITER_DONE)
die("BUG: error while iterating over references"); BUG("error while iterating over references");
extra_refname = find_descendant_ref(dirname.buf, extras, skip); extra_refname = find_descendant_ref(dirname.buf, extras, skip);
if (extra_refname) if (extra_refname)

View File

@ -121,7 +121,7 @@ static void files_assert_main_repository(struct files_ref_store *refs,
if (refs->store_flags & REF_STORE_MAIN) if (refs->store_flags & REF_STORE_MAIN)
return; return;
die("BUG: operation %s only allowed for main ref store", caller); BUG("operation %s only allowed for main ref store", caller);
} }
/* /*
@ -137,13 +137,13 @@ static struct files_ref_store *files_downcast(struct ref_store *ref_store,
struct files_ref_store *refs; struct files_ref_store *refs;
if (ref_store->be != &refs_be_files) if (ref_store->be != &refs_be_files)
die("BUG: ref_store is type \"%s\" not \"files\" in %s", BUG("ref_store is type \"%s\" not \"files\" in %s",
ref_store->be->name, caller); ref_store->be->name, caller);
refs = (struct files_ref_store *)ref_store; refs = (struct files_ref_store *)ref_store;
if ((refs->store_flags & required_flags) != required_flags) if ((refs->store_flags & required_flags) != required_flags)
die("BUG: operation %s requires abilities 0x%x, but only have 0x%x", BUG("operation %s requires abilities 0x%x, but only have 0x%x",
caller, required_flags, refs->store_flags); caller, required_flags, refs->store_flags);
return refs; return refs;
@ -162,7 +162,7 @@ static void files_reflog_path(struct files_ref_store *refs,
strbuf_addf(sb, "%s/logs/%s", refs->gitcommondir, refname); strbuf_addf(sb, "%s/logs/%s", refs->gitcommondir, refname);
break; break;
default: default:
die("BUG: unknown ref type %d of ref %s", BUG("unknown ref type %d of ref %s",
ref_type(refname), refname); ref_type(refname), refname);
} }
} }
@ -180,7 +180,7 @@ static void files_ref_path(struct files_ref_store *refs,
strbuf_addf(sb, "%s/%s", refs->gitcommondir, refname); strbuf_addf(sb, "%s/%s", refs->gitcommondir, refname);
break; break;
default: default:
die("BUG: unknown ref type %d of ref %s", BUG("unknown ref type %d of ref %s",
ref_type(refname), refname); ref_type(refname), refname);
} }
} }
@ -2006,7 +2006,7 @@ static int files_for_each_reflog_ent_reverse(struct ref_store *ref_store,
} }
if (!ret && sb.len) if (!ret && sb.len)
die("BUG: reverse reflog parser had leftover data"); BUG("reverse reflog parser had leftover data");
fclose(logfp); fclose(logfp);
strbuf_release(&sb); strbuf_release(&sb);
@ -2084,7 +2084,7 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator, static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator,
struct object_id *peeled) struct object_id *peeled)
{ {
die("BUG: ref_iterator_peel() called for reflog_iterator"); BUG("ref_iterator_peel() called for reflog_iterator");
} }
static int files_reflog_iterator_abort(struct ref_iterator *ref_iterator) static int files_reflog_iterator_abort(struct ref_iterator *ref_iterator)
@ -2869,7 +2869,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
assert(err); assert(err);
if (transaction->state != REF_TRANSACTION_OPEN) if (transaction->state != REF_TRANSACTION_OPEN)
die("BUG: commit called for transaction that is not open"); BUG("commit called for transaction that is not open");
/* Fail if a refname appears more than once in the transaction: */ /* Fail if a refname appears more than once in the transaction: */
for (i = 0; i < transaction->nr; i++) for (i = 0; i < transaction->nr; i++)
@ -2895,7 +2895,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
*/ */
if (refs_for_each_rawref(&refs->base, ref_present, if (refs_for_each_rawref(&refs->base, ref_present,
&affected_refnames)) &affected_refnames))
die("BUG: initial ref transaction called with existing refs"); BUG("initial ref transaction called with existing refs");
packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, err); packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, err);
if (!packed_transaction) { if (!packed_transaction) {
@ -2908,7 +2908,7 @@ static int files_initial_transaction_commit(struct ref_store *ref_store,
if ((update->flags & REF_HAVE_OLD) && if ((update->flags & REF_HAVE_OLD) &&
!is_null_oid(&update->old_oid)) !is_null_oid(&update->old_oid))
die("BUG: initial ref transaction with old_sha1 set"); BUG("initial ref transaction with old_sha1 set");
if (refs_verify_refname_available(&refs->base, update->refname, if (refs_verify_refname_available(&refs->base, update->refname,
&affected_refnames, NULL, &affected_refnames, NULL,
err)) { err)) {

View File

@ -54,7 +54,7 @@ static int empty_ref_iterator_advance(struct ref_iterator *ref_iterator)
static int empty_ref_iterator_peel(struct ref_iterator *ref_iterator, static int empty_ref_iterator_peel(struct ref_iterator *ref_iterator,
struct object_id *peeled) struct object_id *peeled)
{ {
die("BUG: peel called for empty iterator"); BUG("peel called for empty iterator");
} }
static int empty_ref_iterator_abort(struct ref_iterator *ref_iterator) static int empty_ref_iterator_abort(struct ref_iterator *ref_iterator)
@ -177,7 +177,7 @@ static int merge_ref_iterator_peel(struct ref_iterator *ref_iterator,
(struct merge_ref_iterator *)ref_iterator; (struct merge_ref_iterator *)ref_iterator;
if (!iter->current) { if (!iter->current) {
die("BUG: peel called before advance for merge iterator"); BUG("peel called before advance for merge iterator");
} }
return ref_iterator_peel(*iter->current, peeled); return ref_iterator_peel(*iter->current, peeled);
} }
@ -338,7 +338,7 @@ static int prefix_ref_iterator_advance(struct ref_iterator *ref_iterator)
* trimming, report it as a bug: * trimming, report it as a bug:
*/ */
if (strlen(iter->iter0->refname) <= iter->trim) if (strlen(iter->iter0->refname) <= iter->trim)
die("BUG: attempt to trim too many characters"); BUG("attempt to trim too many characters");
iter->base.refname = iter->iter0->refname + iter->trim; iter->base.refname = iter->iter0->refname + iter->trim;
} else { } else {
iter->base.refname = iter->iter0->refname; iter->base.refname = iter->iter0->refname;

View File

@ -221,13 +221,13 @@ static struct packed_ref_store *packed_downcast(struct ref_store *ref_store,
struct packed_ref_store *refs; struct packed_ref_store *refs;
if (ref_store->be != &refs_be_packed) if (ref_store->be != &refs_be_packed)
die("BUG: ref_store is type \"%s\" not \"packed\" in %s", BUG("ref_store is type \"%s\" not \"packed\" in %s",
ref_store->be->name, caller); ref_store->be->name, caller);
refs = (struct packed_ref_store *)ref_store; refs = (struct packed_ref_store *)ref_store;
if ((refs->store_flags & required_flags) != required_flags) if ((refs->store_flags & required_flags) != required_flags)
die("BUG: unallowed operation (%s), requires %x, has %x\n", BUG("unallowed operation (%s), requires %x, has %x\n",
caller, required_flags, refs->store_flags); caller, required_flags, refs->store_flags);
return refs; return refs;
@ -1036,7 +1036,7 @@ void packed_refs_unlock(struct ref_store *ref_store)
"packed_refs_unlock"); "packed_refs_unlock");
if (!is_lock_file_locked(&refs->lock)) if (!is_lock_file_locked(&refs->lock))
die("BUG: packed_refs_unlock() called when not locked"); BUG("packed_refs_unlock() called when not locked");
rollback_lock_file(&refs->lock); rollback_lock_file(&refs->lock);
} }
@ -1089,7 +1089,7 @@ static int write_with_updates(struct packed_ref_store *refs,
char *packed_refs_path; char *packed_refs_path;
if (!is_lock_file_locked(&refs->lock)) if (!is_lock_file_locked(&refs->lock))
die("BUG: write_with_updates() called while unlocked"); BUG("write_with_updates() called while unlocked");
/* /*
* If packed-refs is a symlink, we want to overwrite the * If packed-refs is a symlink, we want to overwrite the
@ -1563,21 +1563,21 @@ static int packed_create_symref(struct ref_store *ref_store,
const char *refname, const char *target, const char *refname, const char *target,
const char *logmsg) const char *logmsg)
{ {
die("BUG: packed reference store does not support symrefs"); BUG("packed reference store does not support symrefs");
} }
static int packed_rename_ref(struct ref_store *ref_store, static int packed_rename_ref(struct ref_store *ref_store,
const char *oldrefname, const char *newrefname, const char *oldrefname, const char *newrefname,
const char *logmsg) const char *logmsg)
{ {
die("BUG: packed reference store does not support renaming references"); BUG("packed reference store does not support renaming references");
} }
static int packed_copy_ref(struct ref_store *ref_store, static int packed_copy_ref(struct ref_store *ref_store,
const char *oldrefname, const char *newrefname, const char *oldrefname, const char *newrefname,
const char *logmsg) const char *logmsg)
{ {
die("BUG: packed reference store does not support copying references"); BUG("packed reference store does not support copying references");
} }
static struct ref_iterator *packed_reflog_iterator_begin(struct ref_store *ref_store) static struct ref_iterator *packed_reflog_iterator_begin(struct ref_store *ref_store)
@ -1610,7 +1610,7 @@ static int packed_create_reflog(struct ref_store *ref_store,
const char *refname, int force_create, const char *refname, int force_create,
struct strbuf *err) struct strbuf *err)
{ {
die("BUG: packed reference store does not support reflogs"); BUG("packed reference store does not support reflogs");
} }
static int packed_delete_reflog(struct ref_store *ref_store, static int packed_delete_reflog(struct ref_store *ref_store,

View File

@ -23,7 +23,7 @@ struct ref_dir *get_ref_dir(struct ref_entry *entry)
dir = &entry->u.subdir; dir = &entry->u.subdir;
if (entry->flag & REF_INCOMPLETE) { if (entry->flag & REF_INCOMPLETE) {
if (!dir->cache->fill_ref_dir) if (!dir->cache->fill_ref_dir)
die("BUG: incomplete ref_store without fill_ref_dir function"); BUG("incomplete ref_store without fill_ref_dir function");
dir->cache->fill_ref_dir(dir->cache->ref_store, dir, entry->name); dir->cache->fill_ref_dir(dir->cache->ref_store, dir, entry->name);
entry->flag &= ~REF_INCOMPLETE; entry->flag &= ~REF_INCOMPLETE;

View File

@ -1819,7 +1819,7 @@ static const char *branch_get_push_1(struct branch *branch, struct strbuf *err)
} }
} }
die("BUG: unhandled push situation"); BUG("unhandled push situation");
} }
const char *branch_get_push(struct branch *branch, struct strbuf *err) const char *branch_get_push(struct branch *branch, struct strbuf *err)

View File

@ -2108,7 +2108,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
revs->ignore_missing = 1; revs->ignore_missing = 1;
} else if (!strcmp(arg, "--exclude-promisor-objects")) { } else if (!strcmp(arg, "--exclude-promisor-objects")) {
if (fetch_if_missing) if (fetch_if_missing)
die("BUG: exclude_promisor_objects can only be used when fetch_if_missing is 0"); BUG("exclude_promisor_objects can only be used when fetch_if_missing is 0");
revs->exclude_promisor_objects = 1; revs->exclude_promisor_objects = 1;
} else { } else {
int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix); int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix);
@ -2174,7 +2174,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
* supported right now, so stick to single worktree. * supported right now, so stick to single worktree.
*/ */
if (!revs->single_worktree) if (!revs->single_worktree)
die("BUG: --single-worktree cannot be used together with submodule"); BUG("--single-worktree cannot be used together with submodule");
refs = get_submodule_ref_store(submodule); refs = get_submodule_ref_store(submodule);
} else } else
refs = get_main_ref_store(the_repository); refs = get_main_ref_store(the_repository);

View File

@ -245,7 +245,7 @@ int sane_execvp(const char *file, char * const argv[])
static const char **prepare_shell_cmd(struct argv_array *out, const char **argv) static const char **prepare_shell_cmd(struct argv_array *out, const char **argv)
{ {
if (!argv[0]) if (!argv[0])
die("BUG: shell command is empty"); BUG("shell command is empty");
if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) { if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) {
#ifndef GIT_WINDOWS_NATIVE #ifndef GIT_WINDOWS_NATIVE
@ -383,7 +383,7 @@ static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
static void prepare_cmd(struct argv_array *out, const struct child_process *cmd) static void prepare_cmd(struct argv_array *out, const struct child_process *cmd)
{ {
if (!cmd->argv[0]) if (!cmd->argv[0])
die("BUG: command is empty"); BUG("command is empty");
/* /*
* Add SHELL_PATH so in the event exec fails with ENOEXEC we can * Add SHELL_PATH so in the event exec fails with ENOEXEC we can
@ -471,15 +471,12 @@ struct atfork_state {
sigset_t old; sigset_t old;
}; };
#ifndef NO_PTHREADS #define CHECK_BUG(err, msg) \
static void bug_die(int err, const char *msg) do { \
{ int e = (err); \
if (err) { if (e) \
errno = err; BUG("%s: %s", msg, strerror(e)); \
die_errno("BUG: %s", msg); } while(0)
}
}
#endif
static void atfork_prepare(struct atfork_state *as) static void atfork_prepare(struct atfork_state *as)
{ {
@ -491,9 +488,9 @@ static void atfork_prepare(struct atfork_state *as)
if (sigprocmask(SIG_SETMASK, &all, &as->old)) if (sigprocmask(SIG_SETMASK, &all, &as->old))
die_errno("sigprocmask"); die_errno("sigprocmask");
#else #else
bug_die(pthread_sigmask(SIG_SETMASK, &all, &as->old), CHECK_BUG(pthread_sigmask(SIG_SETMASK, &all, &as->old),
"blocking all signals"); "blocking all signals");
bug_die(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &as->cs), CHECK_BUG(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &as->cs),
"disabling cancellation"); "disabling cancellation");
#endif #endif
} }
@ -504,9 +501,9 @@ static void atfork_parent(struct atfork_state *as)
if (sigprocmask(SIG_SETMASK, &as->old, NULL)) if (sigprocmask(SIG_SETMASK, &as->old, NULL))
die_errno("sigprocmask"); die_errno("sigprocmask");
#else #else
bug_die(pthread_setcancelstate(as->cs, NULL), CHECK_BUG(pthread_setcancelstate(as->cs, NULL),
"re-enabling cancellation"); "re-enabling cancellation");
bug_die(pthread_sigmask(SIG_SETMASK, &as->old, NULL), CHECK_BUG(pthread_sigmask(SIG_SETMASK, &as->old, NULL),
"restoring signal mask"); "restoring signal mask");
#endif #endif
} }
@ -967,7 +964,7 @@ int run_command(struct child_process *cmd)
int code; int code;
if (cmd->out < 0 || cmd->err < 0) if (cmd->out < 0 || cmd->err < 0)
die("BUG: run_command with a pipe can cause deadlock"); BUG("run_command with a pipe can cause deadlock");
code = start_command(cmd); code = start_command(cmd);
if (code) if (code)
@ -1557,7 +1554,7 @@ static void pp_init(struct parallel_processes *pp,
pp->data = data; pp->data = data;
if (!get_next_task) if (!get_next_task)
die("BUG: you need to specify a get_next_task function"); BUG("you need to specify a get_next_task function");
pp->get_next_task = get_next_task; pp->get_next_task = get_next_task;
pp->start_failure = start_failure ? start_failure : default_start_failure; pp->start_failure = start_failure ? start_failure : default_start_failure;
@ -1619,7 +1616,7 @@ static int pp_start_one(struct parallel_processes *pp)
if (pp->children[i].state == GIT_CP_FREE) if (pp->children[i].state == GIT_CP_FREE)
break; break;
if (i == pp->max_processes) if (i == pp->max_processes)
die("BUG: bookkeeping is hard"); BUG("bookkeeping is hard");
code = pp->get_next_task(&pp->children[i].process, code = pp->get_next_task(&pp->children[i].process,
&pp->children[i].err, &pp->children[i].err,

View File

@ -539,7 +539,7 @@ void read_gitfile_error_die(int error_code, const char *path, const char *dir)
case READ_GITFILE_ERR_NOT_A_REPO: case READ_GITFILE_ERR_NOT_A_REPO:
die(_("not a git repository: %s"), dir); die(_("not a git repository: %s"), dir);
default: default:
die("BUG: unknown error code"); BUG("unknown error code");
} }
} }
@ -1086,7 +1086,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."), "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."),
dir.buf); dir.buf);
default: default:
die("BUG: unhandled setup_git_directory_1() result"); BUG("unhandled setup_git_directory_1() result");
} }
if (prefix) if (prefix)

View File

@ -81,7 +81,7 @@ int sha1_pos(const unsigned char *sha1, void *table, size_t nr,
mi = (nr - 1) * (miv - lov) / (hiv - lov); mi = (nr - 1) * (miv - lov) / (hiv - lov);
if (lo <= mi && mi < hi) if (lo <= mi && mi < hi)
break; break;
die("BUG: assertion failed in binary search"); BUG("assertion failed in binary search");
} }
} }
} }

View File

@ -384,7 +384,7 @@ static int get_short_oid(const char *name, int len, struct object_id *oid,
return -1; return -1;
if (HAS_MULTI_BITS(flags & GET_OID_DISAMBIGUATORS)) if (HAS_MULTI_BITS(flags & GET_OID_DISAMBIGUATORS))
die("BUG: multiple get_short_oid disambiguator flags"); BUG("multiple get_short_oid disambiguator flags");
if (flags & GET_OID_COMMIT) if (flags & GET_OID_COMMIT)
ds.fn = disambiguate_commit_only; ds.fn = disambiguate_commit_only;
@ -1729,6 +1729,6 @@ void maybe_die_on_misspelt_object_name(const char *name, const char *prefix)
int get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc) int get_oid_with_context(const char *str, unsigned flags, struct object_id *oid, struct object_context *oc)
{ {
if (flags & GET_OID_FOLLOW_SYMLINKS && flags & GET_OID_ONLY_TO_DIE) if (flags & GET_OID_FOLLOW_SYMLINKS && flags & GET_OID_ONLY_TO_DIE)
die("BUG: incompatible flags for get_sha1_with_context"); BUG("incompatible flags for get_sha1_with_context");
return get_oid_with_context_1(str, flags, NULL, oid, oc); return get_oid_with_context_1(str, flags, NULL, oid, oc);
} }

View File

@ -20,7 +20,7 @@ static char *alternate_shallow_file;
void set_alternate_shallow_file(const char *path, int override) void set_alternate_shallow_file(const char *path, int override)
{ {
if (is_shallow != -1) if (is_shallow != -1)
die("BUG: is_repository_shallow must not be called before set_alternate_shallow_file"); BUG("is_repository_shallow must not be called before set_alternate_shallow_file");
if (alternate_shallow_file && !override) if (alternate_shallow_file && !override)
return; return;
free(alternate_shallow_file); free(alternate_shallow_file);
@ -218,7 +218,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,
static void check_shallow_file_for_update(void) static void check_shallow_file_for_update(void)
{ {
if (is_shallow == -1) if (is_shallow == -1)
die("BUG: shallow must be initialized by now"); BUG("shallow must be initialized by now");
if (!stat_validity_check(&shallow_stat, git_path_shallow())) if (!stat_validity_check(&shallow_stat, git_path_shallow()))
die("shallow file has changed since we read it"); die("shallow file has changed since we read it");
@ -446,7 +446,7 @@ static uint32_t *paint_alloc(struct paint_info *info)
void *p; void *p;
if (!info->pool_count || size > info->end - info->free) { if (!info->pool_count || size > info->end - info->free) {
if (size > POOL_SIZE) if (size > POOL_SIZE)
die("BUG: pool size too small for %d in paint_alloc()", BUG("pool size too small for %d in paint_alloc()",
size); size);
info->pool_count++; info->pool_count++;
REALLOC_ARRAY(info->pools, info->pool_count); REALLOC_ARRAY(info->pools, info->pool_count);

View File

@ -13,7 +13,7 @@ static struct sigchain_signal signals[SIGCHAIN_MAX_SIGNALS];
static void check_signum(int sig) static void check_signum(int sig)
{ {
if (sig < 1 || sig >= SIGCHAIN_MAX_SIGNALS) if (sig < 1 || sig >= SIGCHAIN_MAX_SIGNALS)
die("BUG: signal out of range: %d", sig); BUG("signal out of range: %d", sig);
} }
int sigchain_push(int sig, sigchain_fun f) int sigchain_push(int sig, sigchain_fun f)

View File

@ -334,12 +334,12 @@ void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap)
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, cp); len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, cp);
va_end(cp); va_end(cp);
if (len < 0) if (len < 0)
die("BUG: your vsnprintf is broken (returned %d)", len); BUG("your vsnprintf is broken (returned %d)", len);
if (len > strbuf_avail(sb)) { if (len > strbuf_avail(sb)) {
strbuf_grow(sb, len); strbuf_grow(sb, len);
len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
if (len > strbuf_avail(sb)) if (len > strbuf_avail(sb))
die("BUG: your vsnprintf is broken (insatiable)"); BUG("your vsnprintf is broken (insatiable)");
} }
strbuf_setlen(sb, sb->len + len); strbuf_setlen(sb, sb->len + len);
} }

View File

@ -1400,7 +1400,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
buf.buf[0] == '2') { buf.buf[0] == '2') {
/* T = line type, XY = status, SSSS = submodule state */ /* T = line type, XY = status, SSSS = submodule state */
if (buf.len < strlen("T XY SSSS")) if (buf.len < strlen("T XY SSSS"))
die("BUG: invalid status --porcelain=2 line %s", BUG("invalid status --porcelain=2 line %s",
buf.buf); buf.buf);
if (buf.buf[5] == 'S' && buf.buf[8] == 'U') if (buf.buf[5] == 'S' && buf.buf[8] == 'U')
@ -1609,7 +1609,7 @@ int submodule_move_head(const char *path,
sub = submodule_from_path(the_repository, &null_oid, path); sub = submodule_from_path(the_repository, &null_oid, path);
if (!sub) if (!sub)
die("BUG: could not get submodule information for '%s'", path); BUG("could not get submodule information for '%s'", path);
if (old_head && !(flags & SUBMODULE_MOVE_HEAD_FORCE)) { if (old_head && !(flags & SUBMODULE_MOVE_HEAD_FORCE)) {
/* Check if the submodule has a dirty index. */ /* Check if the submodule has a dirty index. */
@ -1967,7 +1967,7 @@ void absorb_git_dir_into_superproject(const char *prefix,
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
if (flags & ~ABSORB_GITDIR_RECURSE_SUBMODULES) if (flags & ~ABSORB_GITDIR_RECURSE_SUBMODULES)
die("BUG: we don't know how to pass the flags down?"); BUG("we don't know how to pass the flags down?");
strbuf_addstr(&sb, get_super_prefix_or_empty()); strbuf_addstr(&sb, get_super_prefix_or_empty());
strbuf_addstr(&sb, path); strbuf_addstr(&sb, path);
@ -2045,7 +2045,7 @@ const char *get_superproject_working_tree(void)
if (super_sub_len > cwd_len || if (super_sub_len > cwd_len ||
strcmp(&cwd[cwd_len - super_sub_len], super_sub)) strcmp(&cwd[cwd_len - super_sub_len], super_sub))
die (_("BUG: returned path string doesn't match cwd?")); BUG("returned path string doesn't match cwd?");
super_wt = xstrdup(cwd); super_wt = xstrdup(cwd);
super_wt[cwd_len - super_sub_len] = '\0'; super_wt[cwd_len - super_sub_len] = '\0';

View File

@ -30,10 +30,10 @@ int cmd__example_decorate(int argc, const char **argv)
two = lookup_unknown_object(two_oid.hash); two = lookup_unknown_object(two_oid.hash);
ret = add_decoration(&n, one, &decoration_a); ret = add_decoration(&n, one, &decoration_a);
if (ret) if (ret)
die("BUG: when adding a brand-new object, NULL should be returned"); BUG("when adding a brand-new object, NULL should be returned");
ret = add_decoration(&n, two, NULL); ret = add_decoration(&n, two, NULL);
if (ret) if (ret)
die("BUG: when adding a brand-new object, NULL should be returned"); BUG("when adding a brand-new object, NULL should be returned");
/* /*
* When re-adding an already existing object, the old decoration is * When re-adding an already existing object, the old decoration is
@ -41,10 +41,10 @@ int cmd__example_decorate(int argc, const char **argv)
*/ */
ret = add_decoration(&n, one, NULL); ret = add_decoration(&n, one, NULL);
if (ret != &decoration_a) if (ret != &decoration_a)
die("BUG: when readding an already existing object, existing decoration should be returned"); BUG("when readding an already existing object, existing decoration should be returned");
ret = add_decoration(&n, two, &decoration_b); ret = add_decoration(&n, two, &decoration_b);
if (ret) if (ret)
die("BUG: when readding an already existing object, existing decoration should be returned"); BUG("when readding an already existing object, existing decoration should be returned");
/* /*
* Lookup returns the added declarations, or NULL if the object was * Lookup returns the added declarations, or NULL if the object was
@ -52,14 +52,14 @@ int cmd__example_decorate(int argc, const char **argv)
*/ */
ret = lookup_decoration(&n, one); ret = lookup_decoration(&n, one);
if (ret) if (ret)
die("BUG: lookup should return added declaration"); BUG("lookup should return added declaration");
ret = lookup_decoration(&n, two); ret = lookup_decoration(&n, two);
if (ret != &decoration_b) if (ret != &decoration_b)
die("BUG: lookup should return added declaration"); BUG("lookup should return added declaration");
three = lookup_unknown_object(three_oid.hash); three = lookup_unknown_object(three_oid.hash);
ret = lookup_decoration(&n, three); ret = lookup_decoration(&n, three);
if (ret) if (ret)
die("BUG: lookup for unknown object should return NULL"); BUG("lookup for unknown object should return NULL");
/* /*
* The user can also loop through all entries. * The user can also loop through all entries.
@ -69,7 +69,7 @@ int cmd__example_decorate(int argc, const char **argv)
objects_noticed++; objects_noticed++;
} }
if (objects_noticed != 2) if (objects_noticed != 2)
die("BUG: should have 2 objects"); BUG("should have 2 objects");
return 0; return 0;
} }

View File

@ -48,6 +48,7 @@ int cmd_main(int argc, const char **argv)
{ {
int i; int i;
BUG_exit_code = 99;
if (argc < 2) if (argc < 2)
die("I need a test name!"); die("I need a test name!");

View File

@ -127,7 +127,7 @@ struct tmp_objdir *tmp_objdir_create(void)
struct tmp_objdir *t; struct tmp_objdir *t;
if (the_tmp_objdir) if (the_tmp_objdir)
die("BUG: only one tmp_objdir can be used at a time"); BUG("only one tmp_objdir can be used at a time");
t = xmalloc(sizeof(*t)); t = xmalloc(sizeof(*t));
strbuf_init(&t->path, 0); strbuf_init(&t->path, 0);

View File

@ -298,7 +298,7 @@ static void apply_arg_if_exists(struct trailer_item *in_tok,
free_arg_item(arg_tok); free_arg_item(arg_tok);
break; break;
default: default:
die("BUG: trailer.c: unhandled value %d", BUG("trailer.c: unhandled value %d",
arg_tok->conf.if_exists); arg_tok->conf.if_exists);
} }
} }
@ -323,7 +323,7 @@ static void apply_arg_if_missing(struct list_head *head,
list_add(&to_add->list, head); list_add(&to_add->list, head);
break; break;
default: default:
die("BUG: trailer.c: unhandled value %d", BUG("trailer.c: unhandled value %d",
arg_tok->conf.if_missing); arg_tok->conf.if_missing);
} }
} }
@ -557,7 +557,7 @@ static int git_trailer_config(const char *conf_key, const char *value, void *cb)
warning(_("unknown value '%s' for key '%s'"), value, conf_key); warning(_("unknown value '%s' for key '%s'"), value, conf_key);
break; break;
default: default:
die("BUG: trailer.c: unhandled type %d", type); BUG("trailer.c: unhandled type %d", type);
} }
return 0; return 0;
} }

View File

@ -737,7 +737,7 @@ void transport_take_over(struct transport *transport,
struct git_transport_data *data; struct git_transport_data *data;
if (!transport->smart_options) if (!transport->smart_options)
die("BUG: taking over transport requires non-NULL " BUG("taking over transport requires non-NULL "
"smart_options field."); "smart_options field.");
data = xcalloc(1, sizeof(*data)); data = xcalloc(1, sizeof(*data));
@ -862,7 +862,7 @@ int is_transport_allowed(const char *type, int from_user)
return from_user; return from_user;
} }
die("BUG: invalid protocol_allow_config type"); BUG("invalid protocol_allow_config type");
} }
void transport_check_allowed(const char *type) void transport_check_allowed(const char *type)

View File

@ -398,7 +398,7 @@ static int check_updates(struct unpack_trees_options *o)
if (ce->ce_flags & CE_UPDATE) { if (ce->ce_flags & CE_UPDATE) {
if (ce->ce_flags & CE_WT_REMOVE) if (ce->ce_flags & CE_WT_REMOVE)
die("BUG: both update and delete flags are set on %s", BUG("both update and delete flags are set on %s",
ce->name); ce->name);
display_progress(progress, ++cnt); display_progress(progress, ++cnt);
ce->ce_flags &= ~CE_UPDATE; ce->ce_flags &= ~CE_UPDATE;

View File

@ -210,6 +210,9 @@ void warning(const char *warn, ...)
va_end(params); va_end(params);
} }
/* Only set this, ever, from t/helper/, when verifying that bugs are caught. */
int BUG_exit_code;
static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_list params) static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_list params)
{ {
char prefix[256]; char prefix[256];
@ -221,6 +224,8 @@ static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_lis
snprintf(prefix, sizeof(prefix), "BUG: "); snprintf(prefix, sizeof(prefix), "BUG: ");
vreportf(prefix, fmt, params); vreportf(prefix, fmt, params);
if (BUG_exit_code)
exit(BUG_exit_code);
abort(); abort();
} }

View File

@ -320,7 +320,8 @@ const char *fast_export_read_path(const char *path, uint32_t *mode_out)
err = fast_export_ls(path, mode_out, &buf); err = fast_export_ls(path, mode_out, &buf);
if (err) { if (err) {
if (errno != ENOENT) if (errno != ENOENT)
die_errno("BUG: unexpected fast_export_ls error"); BUG("unexpected fast_export_ls error: %s",
strerror(errno));
/* Treat missing paths as directories. */ /* Treat missing paths as directories. */
*mode_out = S_IFDIR; *mode_out = S_IFDIR;
return NULL; return NULL;
@ -338,7 +339,8 @@ void fast_export_copy(uint32_t revision, const char *src, const char *dst)
err = fast_export_ls_rev(revision, src, &mode, &data); err = fast_export_ls_rev(revision, src, &mode, &data);
if (err) { if (err) {
if (errno != ENOENT) if (errno != ENOENT)
die_errno("BUG: unexpected fast_export_ls_rev error"); BUG("unexpected fast_export_ls_rev error: %s",
strerror(errno));
fast_export_delete(dst); fast_export_delete(dst);
return; return;
} }

View File

@ -338,7 +338,7 @@ void update_worktree_location(struct worktree *wt, const char *path_)
struct strbuf path = STRBUF_INIT; struct strbuf path = STRBUF_INIT;
if (is_main_worktree(wt)) if (is_main_worktree(wt))
die("BUG: can't relocate main worktree"); BUG("can't relocate main worktree");
strbuf_realpath(&path, path_, 1); strbuf_realpath(&path, path_, 1);
if (fspathcmp(wt->path, path.buf)) { if (fspathcmp(wt->path, path.buf)) {

View File

@ -643,9 +643,9 @@ int xsnprintf(char *dst, size_t max, const char *fmt, ...)
va_end(ap); va_end(ap);
if (len < 0) if (len < 0)
die("BUG: your snprintf is broken"); BUG("your snprintf is broken");
if (len >= max) if (len >= max)
die("BUG: attempt to snprintf into too-small buffer"); BUG("attempt to snprintf into too-small buffer");
return len; return len;
} }

View File

@ -264,7 +264,7 @@ static const char *wt_status_unmerged_status_string(int stagemask)
case 7: case 7:
return _("both modified:"); return _("both modified:");
default: default:
die("BUG: unhandled unmerged status %x", stagemask); BUG("unhandled unmerged status %x", stagemask);
} }
} }
@ -377,7 +377,7 @@ static void wt_longstatus_print_change_data(struct wt_status *s,
status = d->worktree_status; status = d->worktree_status;
break; break;
default: default:
die("BUG: unhandled change_type %d in wt_longstatus_print_change_data", BUG("unhandled change_type %d in wt_longstatus_print_change_data",
change_type); change_type);
} }
@ -395,7 +395,7 @@ static void wt_longstatus_print_change_data(struct wt_status *s,
status_printf(s, color(WT_STATUS_HEADER, s), "\t"); status_printf(s, color(WT_STATUS_HEADER, s), "\t");
what = wt_status_diff_status_string(status); what = wt_status_diff_status_string(status);
if (!what) if (!what)
die("BUG: unhandled diff status %c", status); BUG("unhandled diff status %c", status);
len = label_width - utf8_strwidth(what); len = label_width - utf8_strwidth(what);
assert(len >= 0); assert(len >= 0);
if (one_name != two_name) if (one_name != two_name)
@ -470,7 +470,7 @@ static void wt_status_collect_changed_cb(struct diff_queue_struct *q,
case DIFF_STATUS_COPIED: case DIFF_STATUS_COPIED:
case DIFF_STATUS_RENAMED: case DIFF_STATUS_RENAMED:
if (d->rename_status) if (d->rename_status)
die("BUG: multiple renames on the same target? how?"); BUG("multiple renames on the same target? how?");
d->rename_source = xstrdup(p->one->path); d->rename_source = xstrdup(p->one->path);
d->rename_score = p->score * 100 / MAX_SCORE; d->rename_score = p->score * 100 / MAX_SCORE;
d->rename_status = p->status; d->rename_status = p->status;
@ -484,7 +484,7 @@ static void wt_status_collect_changed_cb(struct diff_queue_struct *q,
break; break;
default: default:
die("BUG: unhandled diff-files status '%c'", p->status); BUG("unhandled diff-files status '%c'", p->status);
break; break;
} }
@ -547,7 +547,7 @@ static void wt_status_collect_updated_cb(struct diff_queue_struct *q,
case DIFF_STATUS_COPIED: case DIFF_STATUS_COPIED:
case DIFF_STATUS_RENAMED: case DIFF_STATUS_RENAMED:
if (d->rename_status) if (d->rename_status)
die("BUG: multiple renames on the same target? how?"); BUG("multiple renames on the same target? how?");
d->rename_source = xstrdup(p->one->path); d->rename_source = xstrdup(p->one->path);
d->rename_score = p->score * 100 / MAX_SCORE; d->rename_score = p->score * 100 / MAX_SCORE;
d->rename_status = p->status; d->rename_status = p->status;
@ -569,7 +569,7 @@ static void wt_status_collect_updated_cb(struct diff_queue_struct *q,
break; break;
default: default:
die("BUG: unhandled diff-index status '%c'", p->status); BUG("unhandled diff-index status '%c'", p->status);
break; break;
} }
} }
@ -2154,7 +2154,7 @@ static void wt_porcelain_v2_print_unmerged_entry(
case 6: key = "AA"; break; /* both added */ case 6: key = "AA"; break; /* both added */
case 7: key = "UU"; break; /* both modified */ case 7: key = "UU"; break; /* both modified */
default: default:
die("BUG: unhandled unmerged status %x", d->stagemask); BUG("unhandled unmerged status %x", d->stagemask);
} }
/* /*
@ -2181,7 +2181,7 @@ static void wt_porcelain_v2_print_unmerged_entry(
sum |= (1 << (stage - 1)); sum |= (1 << (stage - 1));
} }
if (sum != d->stagemask) if (sum != d->stagemask)
die("BUG: observed stagemask 0x%x != expected stagemask 0x%x", sum, d->stagemask); BUG("observed stagemask 0x%x != expected stagemask 0x%x", sum, d->stagemask);
if (s->null_termination) if (s->null_termination)
path_index = it->string; path_index = it->string;
@ -2285,7 +2285,7 @@ void wt_status_print(struct wt_status *s)
wt_porcelain_v2_print(s); wt_porcelain_v2_print(s);
break; break;
case STATUS_FORMAT_UNSPECIFIED: case STATUS_FORMAT_UNSPECIFIED:
die("BUG: finalize_deferred_config() should have been called"); BUG("finalize_deferred_config() should have been called");
break; break;
case STATUS_FORMAT_NONE: case STATUS_FORMAT_NONE:
case STATUS_FORMAT_LONG: case STATUS_FORMAT_LONG:

4
zlib.c
View File

@ -52,9 +52,9 @@ static void zlib_post_call(git_zstream *s)
bytes_consumed = s->z.next_in - s->next_in; bytes_consumed = s->z.next_in - s->next_in;
bytes_produced = s->z.next_out - s->next_out; bytes_produced = s->z.next_out - s->next_out;
if (s->z.total_out != s->total_out + bytes_produced) if (s->z.total_out != s->total_out + bytes_produced)
die("BUG: total_out mismatch"); BUG("total_out mismatch");
if (s->z.total_in != s->total_in + bytes_consumed) if (s->z.total_in != s->total_in + bytes_consumed)
die("BUG: total_in mismatch"); BUG("total_in mismatch");
s->total_out = s->z.total_out; s->total_out = s->z.total_out;
s->total_in = s->z.total_in; s->total_in = s->z.total_in;