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

Re: [PATCH 2/4] Add functions get_relative_cwd() and is_inside_dir()

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 1, 2007, 05:35 UTC
Message-ID
<7vwswfbywq.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vy7gvdgtn.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <gitster@pobox.com> writes:
Show 24 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
>> The function get_relative_cwd() works just as getcwd(), only that it
>> takes an absolute path as additional parameter, returning the prefix
>> of the current working directory relative to the given path.  If the
>> cwd is no subdirectory of the given path, it returns NULL.
>> ...
>> +/*
>> + * get_relative_cwd() gets the prefix of the current working directory
>> + * relative to 'dir'.  If we are not inside 'dir', it returns NULL.
>> + * As a convenience, it also returns NULL if 'dir' is already NULL.
>> + */
>> +char *get_relative_cwd(char *buffer, int size, const char *dir)
>> +{
>> +	char *cwd = buffer;
>> +
>> +	if (!dir || !getcwd(buffer, size))
>> +		return NULL;
>
> When is it not a fatal error if get_relative_cwd() is called
> with a NULL dir parameter, or getcwd() fails?
>
> If there is no valid such cases, I would rather have this
> die(), former with "BUG" and the latter with strerror(errno).

Heh, it turns out that there is this lazy or clever (depending on the viewpoint) caller that passes the return value of get_git_work_tree() to this function and expect this to return NULL when no work tree is found.

The callers of the is_* functions are much cleaner and in that sense the series is a definite improvement, but this one particular obscurity makes me wonder if it is replacing one unholy mess with a smaller but still unholy mess.

Will apply on "master" and will be part of -rc4, but we probably would want to have a longer pre-final freeze than usual to really make sure this one is good.

Previous: Junio C HamanoNext: Johannes Schindelin
Message 16 of 30 in “work-tree clean ups”
  1. 0/9 work-tree clean upsJohannes Schindelin, Jul 29, 2007
  2. 1/9 Add is_absolute_path() and make_absolute_path()Johannes Schindelin, Jul 29, 2007
  3. 2/9 Add functions get_relative_cwd() and is_inside_dir()Johannes Schindelin, Jul 29, 2007
  4. 3/9 white space fixes in setup.cJohannes Schindelin, Jul 29, 2007
  5. 4/9 Clean up work-tree handlingJohannes Schindelin, Jul 29, 2007
  6. 5/9 Add set_git_dir() functionJohannes Schindelin, Jul 29, 2007
  7. 6/9 work-trees are allowed inside a git-dirJohannes Schindelin, Jul 29, 2007
  8. 7/9 init: use get_git_work_tree() instead of rolling our ownJohannes Schindelin, Jul 29, 2007
  9. 8/9 Fix t1501 for updated work-tree logicJohannes Schindelin, Jul 29, 2007
  10. 9/9 Fix t1500 for sane work-tree behaviorJohannes Schindelin, Jul 29, 2007
  11. Die if core.bare = true and core.worktree is setJohannes Schindelin, Jul 29, 2007
  12. Johannes SchindelinAug 1, 2007
  13. 1/4 Add is_absolute_path() and make_absolute_path()Johannes Schindelin, Aug 1, 2007
  14. 2/4 Add functions get_relative_cwd() and is_inside_dir()Johannes Schindelin, Aug 1, 2007
  15. Junio C HamanoAug 1, 2007
  16. Junio C HamanoAug 1, 2007
  17. Johannes SchindelinAug 1, 2007
  18. Make get_relative_cwd() not accept NULL for a directoryJohannes Schindelin, Aug 1, 2007
  19. Junio C HamanoAug 1, 2007
  20. get_relative_cwd(): clarify why it handles dir == NULLJohannes Schindelin, Aug 1, 2007
  21. 3/4 Add set_git_dir() functionJohannes Schindelin, Aug 1, 2007
  22. 4/4 Clean up work-tree handlingJohannes Schindelin, Aug 1, 2007
  23. Junio C HamanoAug 1, 2007
  24. Johannes SchindelinAug 1, 2007
  25. Junio C HamanoAug 2, 2007
  26. Junio C HamanoAug 1, 2007
  27. Johannes SchindelinAug 1, 2007
  28. Junio C HamanoAug 1, 2007
  29. Johannes SchindelinAug 1, 2007
  30. Johannes SchindelinAug 1, 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.