1. 03 Nov, 2022 1 commit
    • commit-graph: only verify csum on git_commit_graph_open(). · 2c4eb83e
      It is expensive to compute the sha1 of the entire commit-graph file each
      time we open it. Git only does this if it is re-writing the file.
      
      This patch will only verify the checksum when calling the external API
      git_commit_graph_open(), which explicitly says it opens and verifies
      the commit graph in the documentation.
      
      For internal library calls, we call git_commit_graph_get_file(), which
      mmaps the commit-graph file in read-only mode. Therefore it is safe to
      skip the validation check there.
      
      Tests were added to check that the validation works in the happy path,
      and prevents us from opening the file when validation fails.
      
      (Note from Derrick Stolee: This patch was applied internally at GitHub
      after we recognized the performance impact it had during an upgrade of
      libgit2. The original author left the company before we remembered to
      send it upstream.)
      
      Signed-off-by: Derrick Stolee <derrickstolee@github.com>
      Colin Stolley committed
  2. 14 Jul, 2022 1 commit
  3. 20 Jun, 2022 1 commit
  4. 15 Jun, 2022 1 commit
  5. 23 Feb, 2022 1 commit
  6. 28 Jan, 2022 1 commit
  7. 17 Oct, 2021 1 commit
    • str: introduce `git_str` for internal, `git_buf` is external · f0e693b1
      libgit2 has two distinct requirements that were previously solved by
      `git_buf`.  We require:
      
      1. A general purpose string class that provides a number of utility APIs
         for manipulating data (eg, concatenating, truncating, etc).
      2. A structure that we can use to return strings to callers that they
         can take ownership of.
      
      By using a single class (`git_buf`) for both of these purposes, we have
      confused the API to the point that refactorings are difficult and
      reasoning about correctness is also difficult.
      
      Move the utility class `git_buf` to be called `git_str`: this represents
      its general purpose, as an internal string buffer class.  The name also
      is an homage to Junio Hamano ("gitstr").
      
      The public API remains `git_buf`, and has a much smaller footprint.  It
      is generally only used as an "out" param with strict requirements that
      follow the documentation.  (Exceptions exist for some legacy APIs to
      avoid breaking callers unnecessarily.)
      
      Utility functions exist to convert a user-specified `git_buf` to a
      `git_str` so that we can call internal functions, then converting it
      back again.
      Edward Thomson committed
  8. 27 Jul, 2021 1 commit
  9. 16 Jul, 2021 1 commit
  10. 07 Jul, 2021 1 commit
  11. 10 Mar, 2021 1 commit
    • commit-graph: Create `git_commit_graph` as an abstraction for the file · 25b75cd9
      This change does a medium-size refactor of the git_commit_graph_file and
      the interaction with the ODB. Now instead of the ODB owning a direct
      reference to the git_commit_graph_file, there will be an intermediate
      git_commit_graph. The main advantage of that is that now end users can
      explicitly set a git_commit_graph that is eagerly checked for errors,
      while still being able to lazily use the commit-graph in a regular ODB,
      if the file is present.
      lhchavez committed
  12. 10 Jan, 2021 3 commits