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

Re: [PATCH v7 01/10] Add support for -i/--interactive to git-clean

From
Jiang Xin <worldhello.net@gmail.com>
Date
May 9, 2013, 16:35 UTC
Message-ID
<CANYiYbEvYXiRE0OeR5vqBAaOFFpJTPBetQbawZD5EcMCj8veFw@mail.gmail.com>
In-Reply-To
<7vr4hhflym.fsf@alter.siamese.dyndns.org>
2013/5/9 Junio C Hamano <gitster@pobox.com>:
Show 9 quoted lines
>> @@ -15,9 +15,12 @@
>>  #include "quote.h"
>>
>>  static int force = -1; /* unset */
>> +static int interactive;
>> +static struct string_list del_list = STRING_LIST_INIT_DUP;
>> +static const char **the_prefix;
>
> Ehh, why?
Next reroll will save relative paths in del_list, and eliminate "**the_prefix".
Show 13 quoted lines
>> +
>> +             printf(_("Input ignore patterns>> "));
>> +             if (strbuf_getline(&confirm, stdin, '\n') != EOF) {
>> +                     strbuf_trim(&confirm);
>> +             } else {
>> +                     putchar('\n');
>> +                     break;
>
> Why break here?  If we got nothing, wouldn't confirm.len be zero?
> If we did get something but the input got flushed without line-end,
> sending '\n' to the terminal may be justified, but in that case you
> would may have something useful, and asking confirm.len if it is
> empty would be the consistent way to check between two cases, no?
Yes, this break is unnecessary, it left from pervious revision.
Show 10 quoted lines
>
> A few points:
>
>  * Pass prefix as a parameter to this function, just like how
>    remove_dirs() gets called, and get rid of the_prefix.
>
>  * The result of quote_* is designed to avoid ambiguities, by
>    applying C-style quotes like HT => \t and adding "" pair around
>    it as necessary.  I doubt feeding it to is_excluded() makes any
>    sense.  You probably meant path_relative(), but I am not sure.

Appreciated, that is what I need. I write a local version of path_relative, a combination of path_relative (in quote.c) and relative_path (in path.c), like this:

        static const char *path_relative(const char *in, const char *prefix)
Show 11 quoted lines
>> +     for_each_string_list_item(item, &del_list) {
>> +             struct stat st;
>> +
>> +             if (lstat(item->string, &st))
>> +                     continue;
>
> Ignoring errors silently?
>
> With the "interactive" stuff, can you get into a situation where you
> originally propose to remove D and D/F but the user tells you to
> remove D (editing D/F away), or vice versa?

I can not find out such a case, that remove parent directory D, while left file in it, such as D/F.

Show 16 quoted lines
> I think this patch should be in at least two parts:
>
>  - Introduce the two-phase "collect in del_list, remove in a
>    separate loop at the end" restructuring.
>
>  - (optional, if you are feeling ambitious) Change the path that is
>    stored in del_list relative to the prefix, so that all functions
>    that operate on the string in the del_list do not have to do
>    *_relative() thing.  Some functions may instead have to prepend
>    prefix but if they are minority compared to the users of
>    *_relative(), it may be an overall win from the readability's
>    point of view.
>
>  - Add the "interactively allow you to reduce the del_list" bit
>    between the two phases.
>
Will send new reroll soon.
-- 
Jiang Xin
Previous: Junio C HamanoNext: Jiang Xin
Message 20 of 41 in “interactive git clean”
  1. 00/10 interactive git cleanJiang Xin, May 8, 2013
  2. 01/10 Add support for -i/--interactive to git-cleanJiang Xin, May 8, 2013
  3. 02/10 Show items of interactive git-clean in columnsJiang Xin, May 8, 2013
  4. 03/10 Add colors to interactive git-cleanJiang Xin, May 8, 2013
  5. 04/10 git-clean: use a git-add-interactive compatible UIJiang Xin, May 8, 2013
  6. 05/10 git-clean: interactive cleaning by select numbersJiang Xin, May 8, 2013
  7. 06/10 git-clean: rm -i style interactive cleaningJiang Xin, May 8, 2013
  8. 07/10 git-clean: update document for interactive git-cleanJiang Xin, May 8, 2013
  9. 08/10 git-clean refactor: save some options in clean_flagsJiang Xin, May 8, 2013
  10. 09/10 git-clean refactor: wrap in scan_clean_candidatesJiang Xin, May 8, 2013
  11. 10/10 git-clean: change clean flags in interactive modeJiang Xin, May 8, 2013
  12. Junio C HamanoMay 8, 2013
  13. Matthieu MoyMay 12, 2013
  14. Jiang XinMay 13, 2013
  15. Junio C HamanoMay 13, 2013
  16. Matthieu MoyMay 13, 2013
  17. Junio C HamanoMay 8, 2013
  18. Matthieu MoyMay 12, 2013
  19. Junio C HamanoMay 8, 2013
  20. Jiang XinMay 9, 2013
  21. 00/12 Interactive git cleanJiang Xin, May 9, 2013
  22. 01/12 git-clean refactor: hold cleaning items in del_listJiang Xin, May 9, 2013
  23. 02/12 git-clean: add support for -i/--interactiveJiang Xin, May 9, 2013
  24. 03/12 git-clean: show items of del_list in columnsJiang Xin, May 9, 2013
  25. 04/12 git-clean: add colors to interactive git-cleanJiang Xin, May 9, 2013
  26. 05/12 git-clean: use a git-add-interactive compatible UIJiang Xin, May 9, 2013
  27. 06/12 git-clean: add filter by pattern interactive actionJiang Xin, May 9, 2013
  28. 07/12 git-clean: add select by numbers interactive actionJiang Xin, May 9, 2013
  29. 08/12 git-clean: add ask each interactive actionJiang Xin, May 9, 2013
  30. 09/12 git-clean refactor: save some options in clean_flagsJiang Xin, May 9, 2013
  31. 10/12 git-clean refactor: add wrapper scan_clean_candidatesJiang Xin, May 9, 2013
  32. 11/12 git-clean: add toggle flags interactive actionJiang Xin, May 9, 2013
  33. 12/12 git-clean: update document for interactive git-cleanJiang Xin, May 9, 2013
  34. Matthieu MoyMay 12, 2013
  35. Jiang XinMay 13, 2013
  36. Eric SunshineMay 8, 2013
  37. Eric SunshineMay 8, 2013
  38. Junio C HamanoMay 8, 2013
  39. Matthieu MoyMay 12, 2013
  40. Jiang XinMay 13, 2013
  41. Matthieu MoyMay 13, 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.