1. 23 Feb, 2022 2 commits
  2. 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
  3. 28 Oct, 2016 1 commit
    • pqueue: resolve possible NULL pointer dereference · 95fa3880
      The `git_pqueue` struct allows being fixed in its total number of
      entries. In this case, we simply throw away items that are
      inserted into the priority queue by examining wether the new item
      to be inserted has a higher priority than the previous smallest
      one.
      
      This feature somewhat contradicts our pqueue implementation in
      that it is allowed to not have a comparison function. In fact, we
      also fail to check if the comparison function is actually set in
      the case where we add a new item into a fully filled fixed-size
      pqueue.
      
      As we cannot determine which item is the smallest item in absence
      of a comparison function, we fix the `NULL` pointer dereference
      by simply dropping all new items which are about to be inserted
      into a full fixed-size pqueue.
      Patrick Steinhardt committed
  4. 06 Oct, 2016 1 commit
  5. 12 Mar, 2014 1 commit
  6. 05 Feb, 2014 1 commit
    • Avoid extra copying in pqueue operations · 1bbacc9f
      This tweaks the pqueue_up and pqueue_down routines so that they
      will not do full element swaps but instead carry over the state
      of the previous loop iteration and only assign elements for which
      we know the final position.  This will avoid a little bit of data
      assignment which should improve performance in theory.
      
      Also got rid of some vector helpers that I'm no longer using.
      Russell Belfer committed
  7. 04 Feb, 2014 2 commits
    • Convert pqueue to just be a git_vector · 882c7742
      This updates the git_pqueue to simply be a set of specialized
      init/insert/pop functions on a git_vector.
      
      To preserve the pqueue feature of having a fixed size heap, I
      converted the "sorted" field in git_vectors to a more general
      "flags" field so that pqueue could mix in it's own flag.  This
      had a bunch of ramifications because a number of places were
      directly looking at the vector "sorted" field - I added a couple
      new git_vector helpers (is_sorted, set_sorted) so the specific
      representation of this information could be abstracted.
      Russell Belfer committed
    • Replace pqueue with code from hashsig heap · 4075e060
      I accidentally wrote a separate priority queue implementation when
      I was working on file rename detection as part of the file hash
      signature calculation code.  To simplify licensing terms, I just
      adapted that to a general purpose priority queue and replace the
      old priority queue implementation that was borrowed from elsewhere.
      
      This also removes parts of the COPYING document that no longer
      apply to libgit2.
      Russell Belfer committed
  8. 08 Jan, 2013 1 commit
  9. 04 Jan, 2013 1 commit
  10. 03 Jan, 2013 1 commit
  11. 17 Apr, 2012 1 commit
  12. 13 Feb, 2012 1 commit
  13. 29 Oct, 2011 1 commit
  14. 19 Sep, 2011 1 commit
    • Tabify everything · 87d9869f
      There were quite a few places were spaces were being used instead of
      tabs. Try to catch them all. This should hopefully not break anything.
      Except for `git blame`. Oh well.
      Vicent Marti committed
  15. 18 Sep, 2011 1 commit
    • Cleanup legal data · bb742ede
      1. The license header is technically not valid if it doesn't have a
      copyright signature.
      
      2. The COPYING file has been updated with the different licenses used in
      the project.
      
      3. The full GPLv2 header in each file annoys me.
      Vicent Marti committed
  16. 01 Jul, 2011 1 commit
  17. 15 Mar, 2011 1 commit
  18. 14 Mar, 2011 1 commit
    • Rewrite the Revision Walker · 71db842f
      The new revision walker uses an internal Commit object storage system,
      custom memory allocator and much improved topological and time sorting
      algorithms. It's about 20x times faster than the previous implementation
      when browsing big repositories.
      
      The following external API calls have changed:
      
      	`git_revwalk_next` returns an OID instead of a full commit object.
      	The initial call to `git_revwalk_next` is no longer blocking when
      	iterating through a repo with a time-sorting mode.
      
      	Iterating with Topological or inverted modes still makes the initial
      	call blocking to preprocess the commit list, but this block should be
      	mostly unnoticeable on most repositories (topological preprocessing
      	times at 0.3s on the git.git repo).
      
      	`git_revwalk_push` and `git_revwalk_hide` now take an OID instead
      	of a full commit object.
      Vicent Marti committed