Skip to content

Commit

Permalink
status: unify parsing of --untracked= and status.showUntrackedFiles
Browse files Browse the repository at this point in the history
There are two code paths that take a string and parse it to enum
untracked_status_type.  Introduce a helper function and use it.

As these two places handle an error differently, add an additional
invalid value to the enum, and have the caller of the helper handle
the error condition, instead of dying or emitting error message from
the helper.

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Mar 13, 2024
1 parent 9451150 commit 63acdc4
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
44 changes: 27 additions & 17 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1157,22 +1157,34 @@ static void handle_ignored_arg(struct wt_status *s)
die(_("Invalid ignored mode '%s'"), ignored_arg);
}

static void handle_untracked_files_arg(struct wt_status *s)
static enum untracked_status_type parse_untracked_setting_name(const char *u)
{
if (!untracked_files_arg)
; /* default already initialized */
else if (!strcmp(untracked_files_arg, "no"))
s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
else if (!strcmp(untracked_files_arg, "normal"))
s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
else if (!strcmp(untracked_files_arg, "all"))
s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
/*
* Please update $__git_untracked_file_modes in
* git-completion.bash when you add new options
*/
if (!strcmp(u, "no"))
return SHOW_NO_UNTRACKED_FILES;
else if (!strcmp(u, "normal"))
return SHOW_NORMAL_UNTRACKED_FILES;
else if (!strcmp(u, "all"))
return SHOW_ALL_UNTRACKED_FILES;
else
die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
return SHOW_UNTRACKED_FILES_ERROR;
}

static void handle_untracked_files_arg(struct wt_status *s)
{
enum untracked_status_type u;

if (!untracked_files_arg)
return; /* default already initialized */

u = parse_untracked_setting_name(untracked_files_arg);
if (u == SHOW_UNTRACKED_FILES_ERROR)
die(_("Invalid untracked files mode '%s'"),
untracked_files_arg);
s->show_untracked_files = u;
}

static const char *read_commit_message(const char *name)
Expand Down Expand Up @@ -1455,16 +1467,14 @@ static int git_status_config(const char *k, const char *v,
return 0;
}
if (!strcmp(k, "status.showuntrackedfiles")) {
enum untracked_status_type u;

if (!v)
return config_error_nonbool(k);
else if (!strcmp(v, "no"))
s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
else if (!strcmp(v, "normal"))
s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
else if (!strcmp(v, "all"))
s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
else
u = parse_untracked_setting_name(v);
if (u == SHOW_UNTRACKED_FILES_ERROR)
return error(_("Invalid untracked files mode '%s'"), v);
s->show_untracked_files = u;
return 0;
}
if (!strcmp(k, "diff.renamelimit")) {
Expand Down
3 changes: 2 additions & 1 deletion wt-status.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ enum color_wt_status {
};

enum untracked_status_type {
SHOW_NO_UNTRACKED_FILES,
SHOW_UNTRACKED_FILES_ERROR = -1,
SHOW_NO_UNTRACKED_FILES = 0,
SHOW_NORMAL_UNTRACKED_FILES,
SHOW_ALL_UNTRACKED_FILES
};
Expand Down

0 comments on commit 63acdc4

Please sign in to comment.