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

Re: [PATCH 1/8] Introduce new static function real_path_internal()

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 27, 2012, 21:27 UTC
Message-ID
<7vk3vfp36g.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1348688090-13648-2-git-send-email-mhagger@alum.mit.edu>
Michael Haggerty <mhagger@alum.mit.edu> writes:
Show 22 quoted lines
> @@ -54,20 +73,36 @@ const char *real_path(const char *path)
>  		}
>  
>  		if (*buf) {
> -			if (!*cwd && !getcwd(cwd, sizeof(cwd)))
> -				die_errno ("Could not get current working directory");
> +			if (!*cwd && !getcwd(cwd, sizeof(cwd))) {
> +				if (die_on_error)
> +					die_errno("Could not get current working directory");
> +				else
> +					goto error_out;
> +			}
>  
> -			if (chdir(buf))
> -				die_errno ("Could not switch to '%s'", buf);
> +			if (chdir(buf)) {
> +				if (die_on_error)
> +					die_errno("Could not switch to '%s'", buf);
> +				else
> +					goto error_out;
> +			}
> +		}

The patch makes sense, but while you are touching this code, I have to wonder if there is an easy way to tell, before entering the loop, if we have to chdir() around in the loop. That would allow us to hoist the getcwd() that is done only so that we can come back to where we started outside the loop, making it clear why the call is there, instead of cryptic "if (!*cwd &&" to ensure we do getcwd() once and before doing any chdir().

Previous: Michael HaggertyNext: Michael Haggerty
Message 22 of 38 in “test: some testcases failed if cwd is on a symlink”
  1. test: some testcases failed if cwd is on a symlinkJiang Xin, Jul 24, 2012
  2. Stefano LattariniJul 24, 2012
  3. Pete WyckoffJul 24, 2012
  4. Junio C HamanoJul 24, 2012
  5. Jiang XinJul 24, 2012
  6. Michael HaggertyAug 18, 2012
  7. Junio C HamanoAug 18, 2012
  8. Michael HaggertyAug 19, 2012
  9. Junio C HamanoAug 19, 2012
  10. Michael HaggertyAug 21, 2012
  11. test: set the realpath of CWD as TRASH_DIRECTORYJiang Xin, Aug 27, 2012
  12. Junio C HamanoAug 27, 2012
  13. Michael HaggertyAug 29, 2012
  14. Junio C HamanoAug 29, 2012
  15. Michael HaggertyAug 29, 2012
  16. Junio C HamanoAug 29, 2012
  17. Michael HaggertyAug 30, 2012
  18. Junio C HamanoAug 30, 2012
  19. Michael HaggertyAug 31, 2012
  20. 0/8 Fix GIT_CEILING_DIRECTORIES that contain symlinksMichael Haggerty, Sep 26, 2012
  21. 1/8 Introduce new static function real_path_internal()Michael Haggerty, Sep 26, 2012
  22. Junio C HamanoSep 27, 2012
  23. Michael HaggertySep 29, 2012
  24. Junio C HamanoSep 29, 2012
  25. 2/8 Introduce new function real_path_if_valid()Michael Haggerty, Sep 26, 2012
  26. 3/8 longest_ancestor_length(): use string_list_split()Michael Haggerty, Sep 26, 2012
  27. Junio C HamanoSep 27, 2012
  28. Michael HaggertySep 29, 2012
  29. Junio C HamanoSep 29, 2012
  30. 4/8 longest_ancestor_length(): explicitly filter list before loopMichael Haggerty, Sep 26, 2012
  31. Junio C HamanoSep 27, 2012
  32. 5/8 longest_ancestor_length(): always add a slash to the end of prefixesMichael Haggerty, Sep 26, 2012
  33. 6/8 longest_ancestor_length(): use string_list_longest_prefix()Michael Haggerty, Sep 26, 2012
  34. 7/8 longest_ancestor_length(): resolve symlinks before comparing pathsMichael Haggerty, Sep 26, 2012
  35. Junio C HamanoSep 27, 2012
  36. Michael HaggertySep 29, 2012
  37. 8/8 t1504: stop resolving symlinks in GIT_CEILING_DIRECTORIESMichael Haggerty, Sep 26, 2012
  38. Junio C HamanoSep 27, 2012

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.