Subject: [PATCH v2 0/3] Small fixes for issues detected during internal CI runs

From: "Kyle Lippincott via GitGitGadget" <[email-masked]>
Date: Fri, 02 Aug 2024 20:58:04 +0000

I'm attempting to get the git test suite running automatically during our
weekly import. I have this mostly working, including with Address Sanitizer
and Memory Sanitizer, but ran into a few issues:

 * several tests were failing due to strbuf_getcwd not clearing errno on
   success after it internally looped due to the path being >128 bytes. This
   is resolved in depth; though either one of the commits alone would
   resolve our issues:
   * modify locations that call strtoX and check for ERANGE to set errno =
     0; prior to calling the conversion function. This is the typical way
     that these functions are invoked, and may indicate that we want
     compatibility helpers in git-compat-util.h to ensure that this happens
     correctly (and add these functions to the banned list).
   * have strbuf_getcwd set errno = 0; prior to a successful exit. This
     isn't very common for most functions in the codebase, but some other
     examples of this were found.
 * t6421-merge-partial-clone.sh had >10% flakiness. This is due to our build
   system using paths that contain a 64-hex-char hash, which had a 12.5%
   chance of containing the substring d0.

Kyle Lippincott (3):
  set errno=0 before strtoX calls
  strbuf: set errno to 0 after strbuf_getcwd
  t6421: fix test to work when repo dir contains d0

 builtin/get-tar-commit-id.c    |  1 +
 ref-filter.c                   |  1 +
 strbuf.c                       |  1 +
 t/helper/test-json-writer.c    |  2 ++
 t/helper/test-trace2.c         |  1 +
 t/t6421-merge-partial-clone.sh | 15 +++++++++------
 6 files changed, 15 insertions(+), 6 deletions(-)

base-commit: e559c4bf1a306cf5814418d318cc0fea070da3c7
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1756%2Fspectral54%2Fstrbuf_getcwd-clear-errno-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1756/spectral54/strbuf_getcwd-clear-errno-v2
Pull-Request: https://github.com/git/git/pull/1756

Range-diff vs v1:

 1:  4dbd0bec40a = 1:  4dbd0bec40a set errno=0 before strtoX calls
 2:  0ed09e9abb8 = 2:  0ed09e9abb8 strbuf: set errno to 0 after strbuf_getcwd
 3:  6c08b8ceb2b ! 3:  818dc9e6b3e t6421: fix test to work when repo dir contains d0
     @@ Commit message
      
       ## t/t6421-merge-partial-clone.sh ##
      @@ t/t6421-merge-partial-clone.sh: test_expect_merge_algorithm failure success 'Objects downloaded for single relev
     + 		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
       		test_cmp expect actual &&
       
     - 		# Check the number of fetch commands exec-ed
     +-		# Check the number of fetch commands exec-ed
      -		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
     ++		# Check the number of fetch commands exec-ed by filtering trace to
     ++		# child_start events by the top-level program (2nd field == d0)
      +		grep " d0 .* child_start .*fetch.negotiationAlgorithm" trace.output >fetches &&
       		test_line_count = 2 fetches &&
       
       		git rev-list --objects --all --missing=print |
      @@ t/t6421-merge-partial-clone.sh: test_expect_merge_algorithm failure success 'Objects downloaded when a directory
     + 		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
       		test_cmp expect actual &&
       
     - 		# Check the number of fetch commands exec-ed
     +-		# Check the number of fetch commands exec-ed
      -		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
     ++		# Check the number of fetch commands exec-ed by filtering trace to
     ++		# child_start events by the top-level program (2nd field == d0)
      +		grep " d0 .* child_start .*fetch.negotiationAlgorithm" trace.output >fetches &&
       		test_line_count = 1 fetches &&
       
       		git rev-list --objects --all --missing=print |
      @@ t/t6421-merge-partial-clone.sh: test_expect_merge_algorithm failure success 'Objects downloaded with lots of ren
     + 		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
       		test_cmp expect actual &&
       
     - 		# Check the number of fetch commands exec-ed
     +-		# Check the number of fetch commands exec-ed
      -		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
     ++		# Check the number of fetch commands exec-ed by filtering trace to
     ++		# child_start events by the top-level program (2nd field == d0)
      +		grep " d0 .* child_start .*fetch.negotiationAlgorithm" trace.output >fetches &&
       		test_line_count = 4 fetches &&

-- 
gitgitgadget