1. 19 May, 2019 15 commits
  2. 12 May, 2019 4 commits
  3. 10 May, 2019 1 commit
  4. 06 May, 2019 1 commit
  5. 05 May, 2019 1 commit
  6. 03 May, 2019 1 commit
  7. 02 May, 2019 4 commits
    • Merge pull request #5063 from pks-t/pks/cmake-regcomp-fix · 604e2811
      cmake: correctly detect if system provides `regcomp`
      Patrick Steinhardt committed
    • Merge pull request #5023 from ianhattendorf/fix/lock_missing_global_config · 957940bf
      Correctly write to missing locked global config
      Patrick Steinhardt committed
    • cmake: fix include ordering issues with bundled deps · ee3d71fb
      When linking against bundled libraries, we include their header
      directories by using "-isystem". The reason for that is that we
      want to handle our vendored library headers specially, most
      importantly to ignore warnings generated by including them. By
      using "-isystem", though, we screw up the order of searched
      include directories by moving those bundled dependencies towards
      the end of the lookup order. Like this, chances are high that any
      other specified include directory contains a file that collides
      with the actual desired include file.
      
      Fix this by not treating the bundled dependencies' include
      directories as system includes. This will move them to the front
      of the lookup order and thus cause them to override
      system-provided headers. While this may cause the compiler to
      generate additional warnings when processing bundled headers,
      this is a tradeoff we should make regardless to fix builds on
      systems hitting this issue.
      Patrick Steinhardt committed
    • cmake: correctly detect if system provides `regcomp` · 13cb9f7a
      We assume that if we are on Win32, Amiga OS, Solaris or SunOS,
      that the regcomp(3P) function cannot be provided by the system.
      Thus we will in these cases always include our own, bundled regex
      sources to make a regcomp implementation available. This test is
      obviously very fragile, and we have seen it fail on MSYS2/MinGW
      systems, which do in fact provide the regcomp symbol. The effect
      is that during compilation, we will use the "regex.h" header
      provided by MinGW, but use symbols provided by ourselves. This
      in fact may cause subtle memory layout issues, as the structure
      made available via MinGW doesn't match what our bundled code
      expects.
      
      There's one more problem with our regex detection: on the listed
      platforms, we will incorrectly include the bundled regex code
      even in case where the system provides regcomp_l(3), but it will
      never be used for anything.
      
      Fix the issue by improving our regcomp detection code. Instead of
      relying on a fragile listing of platforms, we can just use
      `CHECK_FUNCTION_EXISTS` instead. This will not in fact avoid the
      header-ordering problem. But we can assume that as soon as a
      system-provided "regex.h" header is provided, that
      `CHECK_FUNCTION_EXISTS` will now correctly find the desired
      symbol and thus not include our bundled regex code.
      Patrick Steinhardt committed
  8. 30 Apr, 2019 1 commit
  9. 29 Apr, 2019 1 commit
  10. 26 Apr, 2019 1 commit
  11. 21 Apr, 2019 1 commit
    • rebase: orig_head and onto accessors · e215f475
      The rebase struct stores fields with information about the current
      rebase process, which were not accessible via a public interface.
      
      Accessors for getting the `orig_head` and `onto` branch
      names and object ids have been added.
      Erik Aigner committed
  12. 17 Apr, 2019 2 commits
    • Merge pull request #5050 from libgit2/ethomson/windows_init_traversal · b3923cf7
      git_repository_init: stop traversing at windows root
      Edward Thomson committed
    • git_repository_init: stop traversing at windows root · 45f24e78
      Stop traversing the filesystem at the Windows directory root.  We were
      calculating the filesystem root for the given directory to create, and
      walking up the filesystem hierarchy.  We intended to stop when the
      traversal path length is equal to the root path length (ie, stopping at
      the root, since no path may be shorter than the root path).
      
      However, on Windows, the root path may be specified in two different
      ways, as either `Z:` or `Z:\`, where `Z:` is the current drive letter.
      `git_path_dirname_r` returns the path _without_ a trailing slash, even
      for the Windows root.  As a result, during traversal, we need to test
      that the traversal path is _less than or equal to_ the root path length
      to determine if we've hit the root to ensure that we stop when our
      traversal path is `Z:` and our calculated root path was `Z:\`.
      Edward Thomson committed
  13. 16 Apr, 2019 7 commits
    • Merge pull request #5053 from tniessen/cf-check-array-alloc-result · 9c402600
      config_file: check result of git_array_alloc
      Edward Thomson committed
    • config_file: check result of git_array_alloc · cc8a9892
      git_array_alloc can return NULL if no memory is available, causing
      a segmentation fault in memset. This adds GIT_ERROR_CHECK_ALLOC
      similar to how other parts of the code base deal with the return
      value of git_array_alloc.
      Tobias Nießen committed
    • util: introduce GIT_CONTAINER_OF macro · b5f40441
      In some parts of our code, we make rather heavy use of casting
      structures to their respective specialized implementation. One
      example is the configuration code with the general
      `git_config_backend` and the specialized `diskfile_header`
      structures. At some occasions, it can get confusing though with
      regards to the correct inheritance structure, which led to the
      recent bug fixed in 2424e64c (config: harden our use of the
      backend objects a bit, 2018-02-28).
      
      Object-oriented programming in C is hard, but we can at least try
      to have some checks when it comes to casting around stuff. Thus,
      this commit introduces a `GIT_CONTAINER_OF` macro, which accepts
      as parameters the pointer that is to be casted, the pointer it
      should be cast to as well as the member inside of the target
      structure that is the containing structure. This macro then tries
      hard to detect mis-casts:
      
      - It checks whether the source and target pointers are of the
        same type. This requires support by the compiler, as it makes
        use of the builtin `__builtin_types_compatible_p`.
      
      - It checks whether the embedded member of the target structure
        is the first member. In order to make this a compile-time
        constant, the compiler-provided `__builtin_offsetof` is being
        used for this.
      
      - It ties these two checks together by the compiler-builtin
        `__builtin_choose_expr`. Based on whether the previous two
        checks evaluate to `true`, the compiler will either compile in
        the correct cast, or it will output `(void)0`. The second case
        results in a compiler error, resulting in a compile-time check
        for wrong casts.
      
      The only downside to this is that it relies heavily on
      compiler-specific extensions. As both GCC and Clang support these
      features, only define this macro like explained above in case
      `__GNUC__` is set (Clang also defines `__GNUC__`). If the
      compiler is not Clang or GCC, just go with a simple cast without
      any additional checks.
      Patrick Steinhardt committed