1. 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
  2. 06 Nov, 2019 1 commit
  3. 05 Jul, 2019 1 commit
  4. 15 Feb, 2019 1 commit
    • examples: create common lg2 executable · ead10785
      Inside of our networking example code, we have a git2 executable
      that acts as an entry point to all the different network
      examples. As such, it is kind of the same like the normal git(1)
      executable in that it simply arbitrates to the respective
      subcommands.
      
      Let's extend this approach and merge all examples into a single
      standalone lg2 executable. Instead of building an executable
      for all the existing examples we have, we now bundle them all
      inside of the lg2 one and let them be callable via subcommands.
      
      In the process, we can get rid of duplicated library
      initialization, deinitialization and repository discovery code.
      Instead of having each subcommand handle these on its own, we
      simply do it inside of the single main function now.
      Patrick Steinhardt committed
  5. 10 Jun, 2018 1 commit
  6. 10 Oct, 2016 1 commit
  7. 08 Nov, 2014 1 commit
  8. 22 Apr, 2014 2 commits
    • Use git_diff_get_stats in example/diff + refactor · 8d09efa2
      This takes the `--stat` and related example options in the example
      diff.c program and converts them to use the `git_diff_get_stats`
      API which nicely formats stats for you.
      
      I went to add bar-graph scaling to the stats formatter and noticed
      that the `git_diff_stats` structure was holding on to all of the
      `git_patch` objects.  Unfortunately, each of these objects keeps
      the full text of the diff in memory, so this is very expensive.  I
      ended up modifying `git_diff_stats` to keep just the data that it
      needs to keep and allowed it to release the patches.  Then, I added
      width scaling to the output on top of that.
      
      In making the diff example program match 'git diff' output, I ended
      up removing an newline from the sumamry output which I then had to
      compensate for in the email formatting to match the expectations.
      
      Lastly, I went through and refactored the tests to use a couple of
      helper functions and reduce the overall amount of code there.
      Russell Belfer committed
    • Some doc and examples/diff.c changes · 12e422a0
      I was playing with "git diff-index" and wanted to be able to
      emulate that behavior a little more closely with the diff example.
      
      Also, I wanted to play with running `git_diff_tree_to_workdir`
      directly even though core Git doesn't exactly have the equivalent,
      so I added a command line option for that and tweaked some other
      things in the example code.
      
      This changes a minor output thing in that the "raw" print helper
      function will no longer add ellipses (...) if the OID is not
      actually abbreviated.
      Russell Belfer committed
  9. 05 Mar, 2014 3 commits
  10. 27 Feb, 2014 1 commit
  11. 09 Feb, 2014 1 commit
  12. 08 Feb, 2014 1 commit
  13. 02 Nov, 2013 1 commit
  14. 01 Nov, 2013 1 commit
  15. 31 Oct, 2013 1 commit
  16. 30 Oct, 2013 1 commit
    • Extract common example helpers and reorg examples · 66902d47
      This reorganizes a few of the examples so that the main function
      comes first with the argument parsing extracted into a helper
      that can come at the end of the file (so the example focuses more
      on the use of libgit2 instead of command line support).  This also
      creates a shared examples/common.[ch] so that useful helper funcs
      can be shared across examples instead of repeated.
      Russell Belfer committed
  17. 21 Oct, 2013 1 commit
    • Create git_diff_line and extend git_diff_hunk · 3b5f7954
      Instead of having functions with so very many parameters to pass
      hunk and line data, this takes the existing git_diff_hunk struct
      and extends it with more hunk data, plus adds a git_diff_line.
      Those structs are used to pass back hunk and line data instead of
      the old APIs that took tons of parameters.
      
      Some work that was previously only being done for git_diff_patch
      creation (scanning the diff content for exact line counts) is now
      done for all callbacks, but the performance difference should not
      be noticable.
      Russell Belfer committed
  18. 15 Oct, 2013 1 commit
    • Diff API cleanup · 10672e3e
      This lays groundwork for separating formatting options from diff
      creation options.  This groups the formatting flags separately
      from the diff list creation flags and reorders the options.  This
      also tweaks some APIs to further separate code that uses patches
      from code that just looks at git_diffs.
      Russell Belfer committed
  19. 11 Oct, 2013 1 commit
  20. 18 May, 2013 1 commit
  21. 16 May, 2013 1 commit
  22. 15 Apr, 2013 2 commits
  23. 09 Apr, 2013 1 commit
  24. 02 Mar, 2013 1 commit
  25. 23 Jan, 2013 1 commit
  26. 17 Dec, 2012 1 commit
    • Fix diff constructor name order confusion · 56c72b75
      The diff constructor functions had some confusing names, where the
      "old" side of the diff was coming after the "new" side.  This
      reverses the order in the function name to make it less confusing.
      
      Specifically...
      
      * git_diff_index_to_tree becomes git_diff_tree_to_index
      * git_diff_workdir_to_index becomes git_diff_index_to_workdir
      * git_diff_workdir_to_tree becomes git_diff_tree_to_workdir
      Russell Belfer committed
  27. 30 Nov, 2012 1 commit
  28. 27 Nov, 2012 2 commits
  29. 15 Nov, 2012 1 commit
    • Add explicit git_index ptr to diff and checkout · bbe6dbec
      A number of diff APIs and the `git_checkout_index` API take a
      `git_repository` object an operate on the index.  This updates
      them to take a `git_index` pointer explicitly and only fall back
      on the `git_repository` index if the index input is NULL.  This
      makes it easier to operate on a temporary index.
      Russell Belfer committed
  30. 01 Nov, 2012 1 commit
  31. 08 Jun, 2012 1 commit
    • Minor fixes, cleanups, and clarifications · 145e696b
      There are three actual changes in this commit:
      
      1. When the trailing newline of a file is removed in a diff, the
         change will now be reported with `GIT_DIFF_LINE_DEL_EOFNL` passed
         to the callback.  Previously, the `ADD_EOFNL` constant was given
         which was just an error in my understanding of when the various
         circumstances arose.  `GIT_DIFF_LINE_ADD_EOFNL` is deprecated and
         should never be generated.  A new newline is simply an `ADD`.
      2. Rewrote the `diff_delta__merge_like_cgit` function that contains
         the core logic of the `git_diff_merge` implementation.  The new
         version doesn't actually have significantly different behavior,
         but the logic should be much more obvious, I think.
      3. Fixed a bug in `git_diff_merge` where it freed a string pool
         while some of the string data was still in use.  This led to
         `git_diff_print_patch` accessing memory that had been freed.
      
      The rest of this commit contains improved documentation in `diff.h`
      to make the behavior and the equivalencies with core git clearer,
      and a bunch of new tests to cover the various cases, oh and a minor
      simplification of `examples/diff.c`.
      Russell Belfer committed
  32. 17 May, 2012 3 commits
  33. 13 Mar, 2012 1 commit