1. 01 Jul, 2011 1 commit
  2. 23 May, 2011 2 commits
  3. 15 Mar, 2011 1 commit
  4. 03 Mar, 2011 1 commit
  5. 22 Feb, 2011 1 commit
    • Rewrite git_hashtable internals · fc658755
      The old hash table with chained buckets has been replaced by a new one
      using Cuckoo hashing, which offers guaranteed constant lookup times.
      This should improve speeds on most use cases, since hash tables in
      libgit2 are usually used as caches where the objects are stored once and
      queried several times.
      
      The Cuckoo hash implementation is based off the one in the Basekit
      library [1] for the IO language, but rewritten to support an arbritrary
      number of hashes. We currently use 3 to maximize the usage of the nodes pool.
      
      [1]: https://github.com/stevedekorte/basekit/blob/master/source/CHash.c
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  6. 03 Jan, 2011 1 commit
  7. 12 Aug, 2010 2 commits
    • Add support for manually freeing repo objects · 9c9f4fc1
      A new method 'git_repository_object_free' allows to manually force the
      freeing of a repository object, even though they are still automatically
      managed by the repository and don't need to be freed by the user.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Redesigned the walking/object lookup interface · 3315782c
      The old 'git_revpool' object has been removed and
      split into two distinct objects with separate
      functionality, in order to have separate methods for
      object management and object walking.
      
      *	A new object 'git_repository' does the high-level
      	management of a repository's objects (commits, trees,
      	tags, etc) on top of a 'git_odb'.
      
      	Eventually, it will also manage other repository
      	attributes (e.g. tag resolution, references, etc).
      
      	See: src/git/repository.h
      
      *	A new external method
      		'git_repository_lookup(repo, oid, type)'
      	has been added to the 'git_repository' API.
      
      	All object lookups (git_XXX_lookup()) are now
      	wrappers to this method, and duplicated code
      	has been removed. The method does automatic type
      	checking and returns a generic 'git_revpool_object'
      	that can be cast to any specific object.
      
      	See: src/git/repository.h
      
      *	The external methods for object parsing of repository
      	objects (git_XXX_parse()) have been removed.
      
      	Loading objects from the repository is now managed
      	through the 'lookup' functions. These objects are
      	loaded with minimal information, and the relevant
      	parsing is done automatically when the user requests
      	any of the parsed attributes through accessor methods.
      
      	An attribute has been added to 'git_repository' in
      	order to force the parsing of all the repository objects
      	immediately after lookup.
      
      	See: src/git/commit.h
      	See: src/git/tag.h
      	See: src/git/tree.h
      
      *	The previous walking functionality of the revpool
      	is now found in 'git_revwalk', which does the actual
      	revision walking on a repository; the attributes
      	when walking through commits in a database have been
      	decoupled from the actual commit objects.
      	This increases performance when accessing commits
      	during the walk and allows to have several
      	'git_revwalk' instances working at the same time on
      	top of the same repository, without having to load
      	commits in memory several times.
      
      	See: src/git/revwalk.h
      
      *	The old 'git_revpool_table' has been renamed to
      	'git_hashtable' and now works as a generic hashtable
      	with support for any kind of object and custom hash
      	functions.
      
      	See: src/hashtable.h
      
      *	All the relevant unit tests have been updated, renamed
      	and grouped accordingly.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  8. 15 Jul, 2010 1 commit
  9. 02 Jun, 2010 14 commits