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. 27 Nov, 2020 1 commit
  3. 10 Jun, 2019 1 commit
    • net: rename gitno_connection_data to git_net_url · c6ab183e
      "Connection data" is an imprecise and largely incorrect name; these
      structures are actually parsed URLs.  Provide a parser that takes a URL
      string and produces a URL structure (if it is valid).
      
      Separate the HTTP redirect handling logic from URL parsing, keeping a
      `gitno_connection_data_handle_redirect` whose only job is redirect
      handling logic and does not parse URLs itself.
      Edward Thomson committed
  4. 31 Jan, 2019 1 commit
    • streams: fix callers potentially only writing partial data · 5265b31c
      Similar to the write(3) function, implementations of `git_stream_write`
      do not guarantee that all bytes are written. Instead, they return the
      number of bytes that actually have been written, which may be smaller
      than the total number of bytes. Furthermore, due to an interface design
      issue, we cannot ever write more than `SSIZE_MAX` bytes at once, as
      otherwise we cannot represent the number of bytes written to the caller.
      
      Unfortunately, no caller of `git_stream_write` ever checks the return
      value, except to verify that no error occurred. Due to this, they are
      susceptible to the case where only partial data has been written.
      
      Fix this by introducing a new function `git_stream__write_full`. In
      contrast to `git_stream_write`, it will always return either success or
      failure, without returning the number of bytes written. Thus, it is able
      to write all `SIZE_MAX` bytes and loop around `git_stream_write` until
      all data has been written. Adjust all callers except the BIO callbacks
      in our mbedtls and OpenSSL streams, which already do the right thing and
      require the amount of bytes written.
      Patrick Steinhardt committed
  5. 25 Jan, 2019 1 commit
  6. 22 Jan, 2019 1 commit
  7. 10 Jun, 2018 1 commit
  8. 23 Oct, 2017 1 commit
  9. 03 Jul, 2017 1 commit
    • Make sure to always include "common.h" first · 0c7f49dd
      Next to including several files, our "common.h" header also declares
      various macros which are then used throughout the project. As such, we
      have to make sure to always include this file first in all
      implementation files. Otherwise, we might encounter problems or even
      silent behavioural differences due to macros or defines not being
      defined as they should be. So in fact, our header and implementation
      files should make sure to always include "common.h" first.
      
      This commit does so by establishing a common include pattern. Header
      files inside of "src" will now always include "common.h" as its first
      other file, separated by a newline from all the other includes to make
      it stand out as special. There are two cases for the implementation
      files. If they do have a matching header file, they will always include
      this one first, leading to "common.h" being transitively included as
      first file. If they do not have a matching header file, they instead
      include "common.h" as first file themselves.
      
      This fixes the outlined problems and will become our standard practice
      for header and source files inside of the "src/" from now on.
      Patrick Steinhardt committed
  10. 29 Dec, 2016 1 commit
  11. 30 Oct, 2015 2 commits
  12. 03 Aug, 2015 1 commit
  13. 21 Mar, 2015 1 commit
  14. 18 Mar, 2015 1 commit
  15. 13 Feb, 2015 1 commit
  16. 10 Dec, 2014 1 commit
  17. 14 Aug, 2014 1 commit
    • Custom transport: minor cleanups · c180c065
       * Move the transport registration mechanisms into a new header under
         'sys/' because this is advanced stuff.
       * Remove the 'priority' argument from the registration as it adds
         unnecessary complexity.  (Since transports cannot decline to operate,
         only the highest priority transport is ever executed.)  Users who
         require per-priority transports can implement that in their custom
         transport themselves.
       * Simplify registration further by taking a scheme (eg "http") instead
         of a prefix (eg "http://").
      Edward Thomson committed
  18. 11 Dec, 2013 1 commit
    • Further EUSER and error propagation fixes · dab89f9b
      This continues auditing all the places where GIT_EUSER is being
      returned and making sure to clear any existing error using the
      new giterr_user_cancel helper.  As a result, places that relied
      on intercepting GIT_EUSER but having the old error preserved also
      needed to be cleaned up to correctly stash and then retrieve the
      actual error.
      
      Additionally, as I encountered places where error codes were not
      being propagated correctly, I tried to fix them up.  A number of
      those fixes are included in the this commit as well.
      Russell Belfer committed
  19. 04 Nov, 2013 1 commit
  20. 30 Oct, 2013 1 commit
  21. 04 Feb, 2013 1 commit
  22. 31 Jan, 2013 3 commits
  23. 08 Jan, 2013 1 commit
  24. 29 Nov, 2012 1 commit
  25. 28 Nov, 2012 1 commit
  26. 01 Nov, 2012 1 commit
  27. 24 Aug, 2012 1 commit
  28. 04 Aug, 2012 1 commit
    • Update iterators for consistency across library · 5dca2010
      This updates all the `foreach()` type functions across the library
      that take callbacks from the user to have a consistent behavior.
      The rules are:
      
      * A callback terminates the loop by returning any non-zero value
      * Once the callback returns non-zero, it will not be called again
        (i.e. the loop stops all iteration regardless of state)
      * If the callback returns non-zero, the parent fn returns GIT_EUSER
      * Although the parent returns GIT_EUSER, no error will be set in
        the library and `giterr_last()` will return NULL if called.
      
      This commit makes those changes across the library and adds tests
      for most of the iteration APIs to make sure that they follow the
      above rules.
      Russell Belfer committed
  29. 30 Jul, 2012 4 commits
  30. 05 Jun, 2012 1 commit
  31. 02 Jun, 2012 1 commit
  32. 19 May, 2012 1 commit
  33. 17 May, 2012 2 commits