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

Re: [PATCH v2] git-add--interactive pathspec and patch additions

From
Wincent Colaiuta <win@wincent.com>
Date
Nov 23, 2007, 22:20 UTC
Message-ID
<499E75F1-88A3-411C-8B38-68D43307794D@wincent.com>
In-Reply-To
<7vk5o8smaf.fsf@gitster.siamese.dyndns.org>
El 23/11/2007, a las 22:07, Junio C Hamano escribió:
Show 9 quoted lines
> Wincent Colaiuta <win@wincent.com> writes:
>
>> The series implements these changes in seven steps that apply on  
>> top of
>> "master"; these patches are rebased/squashed ones which *replace* the
>> ones sent the other day:
>
> That's very unfortunate, as some already usable bits from the
> series are already in 'next'.

Well, no problem, I'll redo this tomorrow if I can get some free time. Otherwise it will have to wait to Monday.

Show 12 quoted lines
>>    1. Add -q/--quiet switch to git-ls-files
>>
>> Needed because run_cmd_pipe() doesn't propagate the child exit status
>> and system() likes to be chatty on the standard out. Of the possible
>> workarounds adding this switch seems to be the cleanest and most
>> portable.
>
> I do not like this very much.  If it is a problem that
> run_cmd_pipe() does not properly signal you an error, wouldn't
> it be much better to fix _that_ problem?  That way we do not
> have to add kludge to all commands we need to run and get the
> exit status out of.

The problem is that run_cmd_pipe has two code paths, one for Windows and one for all the rest.

I could "fix" the non-Windows path by reading in all the command input at once and explicitly doing a close() before returning. In that case I believe that the exit status would be correctly set before the function returns. The Windows code path, however, I am reluctant to touch as I don't know its behaviour and can't test it.

The other alternative was to use qx() or backticks, but then I would have to start worrying about sanitizing paths and once again because of the dual-platform issues I was hesitant to do that. And how do you redirect to /dev/null on Windows?

In any case, I actually *like* the addition of -q to git-ls-files. I can see some places in the codebase (look in git-commit.sh, for instance) where git-ls-files is run and the output is thrown away (redirected to /dev/null) because it's not at all interesting to the caller. It seems that there is a real use case there which amounts to "just tell me whether these pathspecs are valid or not, I don't care about any of the rest".

Show 11 quoted lines
>>    6. Add "--patch" option to git-add--interactive
>>    7. Teach builtin-add to handle "--patch" option
>
> These should be straightforward, but use of Getopt::Long feels
> way overkill for an internal command like add--interactive which
> is called by only a very limited known callers (exactly one).
>
> If we assume "a single caller", we probably can do without 1 and
> 4, by making the caller in builtin-add to validate the list of
> pathspecs, reusing the code for "ls-files --error-unmatch",
> before calling the external helper "add--interactive".

Well, you're probably right. I was thinking, "just in case we ever need to add more options"; but it may be that we never do, and perhaps git-add--interactive will become builtin one day anyway.

Show 5 quoted lines
> There are functions refactored as part of the builtin-commit
> series to be usable from outside "ls-files", and you can build a
> imple function called from interactive_add(ac, av) using them:
>
> static int validate_pathspec(const char *prefix, const char **pattern)

Ok, thanks for the tip, Junio. Like I said, will look at this either tomorrow or Monday and get something posted that applies on top of "next".

Cheers, Wincent

Previous: Junio C HamanoNext: Wincent Colaiuta
Message 11 of 18 in “git-add--interactive pathspec and patch additions”
  1. git-add--interactive pathspec and patch additionsWincent Colaiuta, Nov 23, 2007
  2. 1/7 Add -q/--quiet switch to git-ls-filesWincent Colaiuta, Nov 23, 2007
  3. 2/7 Rename patch_update_file function to patch_update_pathspecWincent Colaiuta, Nov 23, 2007
  4. 3/7 Add path-limiting to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  5. 4/7 Bail if user supplies an invalid pathspecWincent Colaiuta, Nov 23, 2007
  6. 5/7 Teach builtin-add to pass path arguments to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  7. 6/7 Add "--patch" option to git-add--interactiveWincent Colaiuta, Nov 23, 2007
  8. 7/7 Teach builtin-add to handle "--patch" optionWincent Colaiuta, Nov 23, 2007
  9. Wincent ColaiutaNov 23, 2007
  10. Junio C HamanoNov 23, 2007
  11. Wincent ColaiutaNov 23, 2007
  12. 0/3 Updates to git-add--interactiveWincent Colaiuta, Nov 24, 2007
  13. 1/3 Rename patch_update_file function to patch_update_pathspecWincent Colaiuta, Nov 24, 2007
  14. 2/3 Move pathspec validation into interactive_addWincent Colaiuta, Nov 24, 2007
  15. 3/3 Add "--patch" option to git-add--interactiveWincent Colaiuta, Nov 24, 2007
  16. Junio C HamanoNov 24, 2007
  17. Wincent ColaiutaNov 24, 2007
  18. Junio C HamanoNov 24, 2007

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.