Signed-off-by: Jiang Xin <[email protected]>
---
builtin/clean.c | 63 +++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 46 insertions(+), 17 deletions(-)
diff --git a/builtin/clean.c b/builtin/clean.c
index 407744e5..ac48e 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -13,9 +13,11 @@
#include "refs.h"
#include "string-list.h"
#include "quote.h"
+#include "column.h"
static int force = -1; /* unset */
static int interactive;
+static unsigned int colopts;
static const char *const builtin_clean_usage[] = {
N_("git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--]
<paths>..."),
@@ -30,8 +32,12 @@ 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);
}
@@ -143,6 +149,34 @@ static int remove_dirs(struct strbuf *path, const char
*prefix, int force_flag,
return ret;
}
+void pretty_print_dels(struct string_list *dels, const char *prefix)
+{
+ 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, dels) {
+ qname = quote_path_relative(item->string, -1, &buf, prefix);
+ 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);
+}
+
void interactive_clean_edit(struct string_list *dels, const char *prefix)
{
struct dir_struct dir;
@@ -151,7 +185,6 @@ void interactive_clean_edit(struct string_list *dels, const
char *prefix)
struct strbuf **ignore_list;
struct string_list_item *item;
struct exclude_list *el;
- const char *qname;
int changed = -1, i;
while (1) {
@@ -170,12 +203,8 @@ void interactive_clean_edit(struct string_list *dels,
const char *prefix)
putchar('\n');
putchar('\n');
- /* Display dels in "Would remove ..." format */
- for_each_string_list_item(item, dels) {
- qname = quote_path_relative(item->string, -1,
&buf, prefix);
- printf(_(msg_would_remove), qname);
- }
- putchar('\n');
+ /* Display dels in columns */
+ pretty_print_dels(dels, prefix);
}
printf(_("Input ignore patterns> "));
@@ -230,20 +259,21 @@ void interactive_clean_edit(struct string_list *dels,
const char *prefix)
void interactive_clean(struct string_list *dels, const char *prefix)
{
struct strbuf confirm = STRBUF_INIT;
- struct strbuf buf = STRBUF_INIT;
- struct string_list_item *item;
- const char *qname;
int count = 0;
/* dels list may become empty after return back from edit mode */
while (dels->nr) {
- /* Display dels in "Would remove ..." format */
- for_each_string_list_item(item, dels) {
- qname = quote_path_relative(item->string, -1, &buf,
prefix);
- printf(_(msg_would_remove), qname);
- }
+ printf_ln(_(
+ "WARNING: The following items will be removed
permanently. Press \"y\"\n"
+ "WARNING: to start cleaning, and press \"n\" to
abort the cleaning.\n"
+ "WARNING: You can also enter the \"edit\" mode, and
select items\n"
+ "WARNING: to be excluded from the cleaning."
+ ));
putchar('\n');
+ /* Display dels in columns */
+ pretty_print_dels(dels, prefix);
+
/* Confirmation dialog */
printf(count > 0 ? _("Remove (Yes/no/edit) ? ") : _("Remove
(yes/no/Edit) ? "));
strbuf_getline(&confirm, stdin, '\n');
@@ -271,7 +301,6 @@ void interactive_clean(struct string_list *dels, const char
*prefix)
count++;
}
- strbuf_release(&buf);
strbuf_release(&confirm);
}
--
1.8.3.rc0.364.gbb5463f
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html