git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v14 12/16] git-clean: add select by numbers interactive action

From
Jiang Xin <worldhello.net@gmail.com>
Date
Jun 24, 2013, 15:21 UTC
Message-ID
<b0da2c8e4aa3767335c4d3a95402f43644c2a691.1372087065.git.worldhello.net@gmail.com>
In-Reply-To
<cover.1372087065.git.worldhello.net@gmail.com>

Draw a multiple choice menu using `list_and_choose` to select items to be deleted by numbers.

User can input:
 *  1,5-7 : select 1,5,6,7 items to be deleted
 *  *     : select all items to be deleted
 *  -*    : unselect all, nothing will be deleted
 *        : (empty) finish selecting, and return back to main menu
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/clean.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
diff --git a/builtin/clean.c b/builtin/clean.c
index 36369..643a5e 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -680,6 +680,43 @@ static int filter_by_patterns_cmd(void)
 	return 0;
 }
 
+static int select_by_numbers_cmd(void)
+{
+	struct menu_opts menu_opts;
+	struct menu_stuff menu_stuff;
+	struct string_list_item *items;
+	int *chosen;
+	int i, j;
+
+	menu_opts.header = NULL;
+	menu_opts.prompt = N_("Select items to delete");
+	menu_opts.flags = 0;
+
+	menu_stuff.type = MENU_STUFF_TYPE_STRING_LIST;
+	menu_stuff.stuff = &del_list;
+	menu_stuff.nr = del_list.nr;
+
+	chosen = list_and_choose(&menu_opts, &menu_stuff);
+	items = del_list.items;
+	for (i = 0, j = 0; i < del_list.nr; i++) {
+		if (i < chosen[j]) {
+			*(items[i].string) = '\0';
+		} else if (i == chosen[j]) {
+			/* delete selected item */
+			j++;
+			continue;
+		} else {
+			/* end of chosen (chosen[j] == EOF), won't delete */
+			*(items[i].string) = '\0';
+		}
+	}
+
+	string_list_remove_empty_items(&del_list, 0);
+
+	free(chosen);
+	return 0;
+}
+
 static int quit_cmd(void)
 {
 	string_list_clear(&del_list, 0);
@@ -693,6 +730,7 @@ static int help_cmd(void)
 	printf_ln(_(
 		    "clean               - start cleaning\n"
 		    "filter by pattern   - exclude items from deletion\n"
+		    "select by numbers   - select items to be deleted by numbers\n"
 		    "quit                - stop cleaning\n"
 		    "help                - this screen\n"
 		    "?                   - help for prompt selection"
@@ -709,6 +747,7 @@ static void interactive_main_loop(void)
 		struct menu_item menus[] = {
 			{'c', "clean",			0, clean_cmd},
 			{'f', "filter by pattern",	0, filter_by_patterns_cmd},
+			{'s', "select by numbers",	0, select_by_numbers_cmd},
 			{'q', "quit",			0, quit_cmd},
 			{'h', "help",			0, help_cmd},
 		};
-- 
1.8.3.1.756.g41beab0
Previous: Jiang XinNext: Jiang Xin
Message 27 of 33 in “t0060: skip a few relative_path tests on Windows”
  1. t0060: skip a few relative_path tests on WindowsJohannes Sixt, Jun 13, 2013
  2. Jiang XinJun 13, 2013
  3. 00/16 Interactive git-cleanJiang Xin, Jun 24, 2013
  4. 01/16 test: add test cases for relative_pathJiang Xin, Jun 24, 2013
  5. Junio C HamanoJun 24, 2013
  6. Jiang XinJun 25, 2013
  7. Junio C HamanoJun 25, 2013
  8. Jiang XinJun 25, 2013
  9. 02/16 path.c: refactor relative_path(), not only strip prefixJiang Xin, Jun 24, 2013
  10. 03/16 quote.c: remove path_relative, use relative_path insteadJiang Xin, Jun 24, 2013
  11. Junio C HamanoJun 24, 2013
  12. Jiang XinJun 25, 2013
  13. Junio C HamanoJun 25, 2013
  14. 04/16 Refactor quote_path_relative, remove unused paramsJiang Xin, Jun 24, 2013
  15. Junio C HamanoJun 24, 2013
  16. Jiang XinJun 25, 2013
  17. 05/16 Refactor write_name_quoted_relative, remove unused paramsJiang Xin, Jun 24, 2013
  18. Junio C HamanoJun 24, 2013
  19. Jiang XinJun 25, 2013
  20. 06/16 git-clean: refactor git-clean into two phasesJiang Xin, Jun 24, 2013
  21. Junio C HamanoJun 24, 2013
  22. 07/16 git-clean: add support for -i/--interactiveJiang Xin, Jun 24, 2013
  23. 08/16 git-clean: show items of del_list in columnsJiang Xin, Jun 24, 2013
  24. 09/16 git-clean: add colors to interactive git-cleanJiang Xin, Jun 24, 2013
  25. 10/16 git-clean: use a git-add-interactive compatible UIJiang Xin, Jun 24, 2013
  26. 11/16 git-clean: add filter by pattern interactive actionJiang Xin, Jun 24, 2013
  27. 12/16 git-clean: add select by numbers interactive actionJiang Xin, Jun 24, 2013
  28. 13/16 git-clean: add ask each interactive actionJiang Xin, Jun 24, 2013
  29. 14/16 git-clean: add documentation for interactive git-cleanJiang Xin, Jun 24, 2013
  30. 15/16 test: add t7301 for git-clean--interactiveJiang Xin, Jun 24, 2013
  31. 16/16 test: run testcases with POSIX absolute paths on WindowsJiang Xin, Jun 24, 2013
  32. Johannes SixtJun 24, 2013
  33. Jiang XinJun 25, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.