1. 22 Jun, 2023 1 commit
    • midx: do not try to look at every object in the index · c1aa0213
      Similar to previous issues around doing way too much verification at loading
      time, checking whether the object index chunk is monotonic is better left for
      git-fsck instead of every single time we want to look at something in the
      repository.
      
      As midx files grow, this starts taking more and more times. As an example, I
      went looking for this because it's taking about 1.5s to do a single object
      lookup in a repository that's ended up with a 7G multi-pack-index file.
      Carlos Martín Nieto committed
  2. 16 May, 2023 6 commits
  3. 13 May, 2023 20 commits
  4. 12 May, 2023 3 commits
  5. 11 May, 2023 2 commits
  6. 09 May, 2023 5 commits
  7. 08 May, 2023 3 commits
    • util: detect all possible qsort_r and qsort_s variants · d873966f
      As reported in https://bugs.freebsd.org/271234, recent versions of
      FreeBSD have adjusted the prototype for qsort_r() to match the POSIX
      interface. This causes libgit2's CMake configuration check to fail to
      detect qsort_r(), making it fall back to qsort_s(), which in libgit2
      also has an incompatible interface. With recent versions of clang this
      results in a "incompatible function pointer types" compile error.
      
      Summarizing, there are four variations of 'qsort-with-context':
      * old style BSD qsort_r(), used in FreeBSD 13 and earlier, where the
        comparison function has the context parameter first
      * GNU or POSIX qsort_r(), also used in FreeBSD 14 and later, where the
        comparison function has the context parameter last
      * C11 qsort_s(), where the comparison function has the context parameter
        last
      * Microsoft qsort_s(), where the comparison function has the context
        parameter first
      
      Add explicit detections for all these variants, so they get detected as
      (in the same order as above):
      
      * `GIT_QSORT_R_BSD`
      * `GIT_QSORT_R_GNU`
      * `GIT_QSORT_S_C11`
      * `GIT_QSORT_S_MSC`
      
      An additional complication is that on FreeBSD 14 and later, <stdlib.h>
      uses the C11 _Generic() macro mechanism to automatically select the
      correct qsort_r() prototype, depending on the caller's comparison
      function argument. This breaks CMake's check_prototype_definition()
      functionality, since it tries to redefine the function, and _Generic
      macro is expanded inline causing a compile error.
      
      Work around that problem by putting the function names in parentheses,
      to prevent the preprocessor from using a macro to replace the function
      name.
      
      Also, in `git__qsort_r()`, change the `#if` order so the variants that
      do not have to use glue are preferred.
      Dimitry Andric committed
    • grafts: make `from_file` be `open_or_refresh` · 43db9288
      The semantics of `from_file` are weird - it looks like a function that
      just opens a file, but it actually inspects the pointer, which is
      unexpected and could make things very crashy.
      
      Make an `open` function that just does an open, and move the magic to
      `open_or_refresh` whose name better indicates that it may do weird
      stuff.
      Edward Thomson committed