Signed-off-by: Jiang Xin <worldhello....@gmail.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to