Skip to content

Commit

Permalink
git-clean: show items of del_list in columns
Browse files Browse the repository at this point in the history
When there are lots of items to be cleaned, it is hard to see them all
in one screen. Show them in columns will solve this problem.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Comments-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jiang Xin authored and Junio C Hamano committed Jun 26, 2013
1 parent 1769600 commit 1b8fd46
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 9 deletions.
4 changes: 4 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -955,6 +955,10 @@ column.branch::
Specify whether to output branch listing in `git branch` in columns.
See `column.ui` for details.

column.clean::
Specify the layout when list items in `git clean -i`, which always
shows files and directories in columns. See `column.ui` for details.

column.status::
Specify whether to output untracked files in `git status` in columns.
See `column.ui` for details.
Expand Down
49 changes: 40 additions & 9 deletions builtin/clean.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@
#include "refs.h"
#include "string-list.h"
#include "quote.h"
#include "column.h"

static int force = -1; /* unset */
static int interactive;
static struct string_list del_list = STRING_LIST_INIT_DUP;
static unsigned int colopts;

static const char *const builtin_clean_usage[] = {
N_("git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."),
Expand All @@ -31,8 +33,13 @@ static const char *msg_warn_remove_failed = N_("failed to remove %s");

static int git_clean_config(const char *var, const char *value, void *cb)
{
if (!strcmp(var, "clean.requireforce"))
if (!prefixcmp(var, "column."))
return git_column_config(var, value, "clean", &colopts);

if (!strcmp(var, "clean.requireforce")) {
force = !git_config_bool(var, value);
return 0;
}
return git_default_config(var, value, cb);
}

Expand Down Expand Up @@ -144,21 +151,46 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag,
return ret;
}

static void interactive_main_loop(void)
static void pretty_print_dels(void)
{
struct strbuf confirm = STRBUF_INIT;
struct strbuf buf = STRBUF_INIT;
struct string_list list = STRING_LIST_INIT_DUP;
struct string_list_item *item;
struct strbuf buf = STRBUF_INIT;
const char *qname;
struct column_options copts;

for_each_string_list_item(item, &del_list) {
qname = quote_path_relative(item->string, NULL, &buf);
string_list_append(&list, qname);
}

/*
* always enable column display, we only consult column.*
* about layout strategy and stuff
*/
colopts = (colopts & ~COL_ENABLE_MASK) | COL_ENABLED;
memset(&copts, 0, sizeof(copts));
copts.indent = " ";
copts.padding = 2;
print_columns(&list, colopts, &copts);
putchar('\n');
strbuf_release(&buf);
string_list_clear(&list, 0);
}

static void interactive_main_loop(void)
{
struct strbuf confirm = STRBUF_INIT;

while (del_list.nr) {
putchar('\n');
for_each_string_list_item(item, &del_list) {
qname = quote_path_relative(item->string, NULL, &buf);
printf(_(msg_would_remove), qname);
}
printf_ln(Q_("Would remove the following item:",
"Would remove the following items:",
del_list.nr));
putchar('\n');

pretty_print_dels();

printf(_("Remove [y/n]? "));
if (strbuf_getline(&confirm, stdin, '\n') != EOF) {
strbuf_trim(&confirm);
Expand All @@ -184,7 +216,6 @@ static void interactive_main_loop(void)
}
}

strbuf_release(&buf);
strbuf_release(&confirm);
}

Expand Down

0 comments on commit 1b8fd46

Please sign in to comment.