зеркало из https://github.com/microsoft/git.git
status: add optional stash count information
Introduce '--show-stash' and its configuration option 'status.showStash' to allow git-status to show information about currently stashed entries. Signed-off-by: Liam Beguin <liambeguin@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e01db917d8
Коммит
c1b5d0194b
|
@ -2992,6 +2992,11 @@ status.displayCommentPrefix::
|
|||
behavior of linkgit:git-status[1] in Git 1.8.4 and previous.
|
||||
Defaults to false.
|
||||
|
||||
status.showStash::
|
||||
If set to true, linkgit:git-status[1] will display the number of
|
||||
entries currently stashed away.
|
||||
Defaults to false.
|
||||
|
||||
status.showUntrackedFiles::
|
||||
By default, linkgit:git-status[1] and linkgit:git-commit[1] show
|
||||
files which are not currently tracked by Git. Directories which
|
||||
|
|
|
@ -32,6 +32,9 @@ OPTIONS
|
|||
--branch::
|
||||
Show the branch and tracking info even in short-format.
|
||||
|
||||
--show-stash::
|
||||
Show the number of entries currently stashed away.
|
||||
|
||||
--porcelain[=<version>]::
|
||||
Give the output in an easy-to-parse format for scripts.
|
||||
This is similar to the short output, but will remain stable
|
||||
|
|
|
@ -1295,6 +1295,10 @@ static int git_status_config(const char *k, const char *v, void *cb)
|
|||
status_deferred_config.show_branch = git_config_bool(k, v);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(k, "status.showstash")) {
|
||||
s->show_stash = git_config_bool(k, v);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
|
||||
s->use_color = git_config_colorbool(k, v);
|
||||
return 0;
|
||||
|
@ -1343,6 +1347,8 @@ int cmd_status(int argc, const char **argv, const char *prefix)
|
|||
N_("show status concisely"), STATUS_FORMAT_SHORT),
|
||||
OPT_BOOL('b', "branch", &s.show_branch,
|
||||
N_("show branch information")),
|
||||
OPT_BOOL(0, "show-stash", &s.show_stash,
|
||||
N_("show stash information")),
|
||||
{ OPTION_CALLBACK, 0, "porcelain", &status_format,
|
||||
N_("version"), N_("machine-readable output"),
|
||||
PARSE_OPT_OPTARG, opt_parse_porcelain },
|
||||
|
|
|
@ -1608,4 +1608,36 @@ test_expect_success 'git commit -m will commit a staged but ignored submodule' '
|
|||
git config -f .gitmodules --remove-section submodule.subname
|
||||
'
|
||||
|
||||
test_expect_success 'show stash info with "--show-stash"' '
|
||||
git reset --hard &&
|
||||
git stash clear &&
|
||||
echo 1 >file &&
|
||||
git add file &&
|
||||
git stash &&
|
||||
git status >expected_default &&
|
||||
git status --show-stash >expected_with_stash &&
|
||||
test_i18ngrep "^Your stash currently has 1 entry$" expected_with_stash
|
||||
'
|
||||
|
||||
test_expect_success 'no stash info with "--show-stash --no-show-stash"' '
|
||||
git status --show-stash --no-show-stash >expected_without_stash &&
|
||||
test_cmp expected_default expected_without_stash
|
||||
'
|
||||
|
||||
test_expect_success '"status.showStash=false" weaker than "--show-stash"' '
|
||||
git -c status.showStash=false status --show-stash >actual &&
|
||||
test_cmp expected_with_stash actual
|
||||
'
|
||||
|
||||
test_expect_success '"status.showStash=true" weaker than "--no-show-stash"' '
|
||||
git -c status.showStash=true status --no-show-stash >actual &&
|
||||
test_cmp expected_without_stash actual
|
||||
'
|
||||
|
||||
test_expect_success 'no additionnal info if no stash entries' '
|
||||
git stash clear &&
|
||||
git -c status.showStash=true status >actual &&
|
||||
test_cmp expected_without_stash actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
24
wt-status.c
24
wt-status.c
|
@ -137,6 +137,7 @@ void wt_status_prepare(struct wt_status *s)
|
|||
s->untracked.strdup_strings = 1;
|
||||
s->ignored.strdup_strings = 1;
|
||||
s->show_branch = -1; /* unspecified */
|
||||
s->show_stash = 0;
|
||||
s->display_comment_prefix = 0;
|
||||
}
|
||||
|
||||
|
@ -801,6 +802,27 @@ static void wt_longstatus_print_changed(struct wt_status *s)
|
|||
wt_longstatus_print_trailer(s);
|
||||
}
|
||||
|
||||
static int stash_count_refs(struct object_id *ooid, struct object_id *noid,
|
||||
const char *email, timestamp_t timestamp, int tz,
|
||||
const char *message, void *cb_data)
|
||||
{
|
||||
int *c = cb_data;
|
||||
(*c)++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void wt_longstatus_print_stash_summary(struct wt_status *s)
|
||||
{
|
||||
int stash_count = 0;
|
||||
|
||||
for_each_reflog_ent("refs/stash", stash_count_refs, &stash_count);
|
||||
if (stash_count > 0)
|
||||
status_printf_ln(s, GIT_COLOR_NORMAL,
|
||||
Q_("Your stash currently has %d entry",
|
||||
"Your stash currently has %d entries", stash_count),
|
||||
stash_count);
|
||||
}
|
||||
|
||||
static void wt_longstatus_print_submodule_summary(struct wt_status *s, int uncommitted)
|
||||
{
|
||||
struct child_process sm_summary = CHILD_PROCESS_INIT;
|
||||
|
@ -1642,6 +1664,8 @@ static void wt_longstatus_print(struct wt_status *s)
|
|||
} else
|
||||
printf(_("nothing to commit, working tree clean\n"));
|
||||
}
|
||||
if(s->show_stash)
|
||||
wt_longstatus_print_stash_summary(s);
|
||||
}
|
||||
|
||||
static void wt_shortstatus_unmerged(struct string_list_item *it,
|
||||
|
|
|
@ -77,6 +77,7 @@ struct wt_status {
|
|||
unsigned colopts;
|
||||
int null_termination;
|
||||
int show_branch;
|
||||
int show_stash;
|
||||
int hints;
|
||||
|
||||
enum wt_status_format status_format;
|
||||
|
|
Загрузка…
Ссылка в новой задаче