1. 09 Apr, 2011 1 commit
  2. 08 Apr, 2011 1 commit
  3. 04 Apr, 2011 1 commit
  4. 22 Mar, 2011 1 commit
  5. 20 Mar, 2011 1 commit
    • I broke your bindings · 72a3fe42
      Hey. Apologies in advance -- I broke your bindings.
      
      This is a major commit that includes a long-overdue redesign of the
      whole object-database structure. This is expected to be the last major
      external API redesign of the library until the first non-alpha release.
      
      Please get your bindings up to date with these changes. They will be
      included in the next minor release. Sorry again!
      
      Major features include:
      
      	- Real caching and refcounting on parsed objects
      	- Real caching and refcounting on objects read from the ODB
      	- Streaming writes & reads from the ODB
      	- Single-method writes for all object types
      	- The external API is now partially thread-safe
      
      The speed increases are significant in all aspects, specially when
      reading an object several times from the ODB (revwalking) and when
      writing big objects to the ODB.
      
      Here's a full changelog for the external API:
      
      blob.h
      ------
      
      	- Remove `git_blob_new`
      	- Remove `git_blob_set_rawcontent`
      	- Remove `git_blob_set_rawcontent_fromfile`
      	- Rename `git_blob_writefile` -> `git_blob_create_fromfile`
      	- Change `git_blob_create_fromfile`:
      		The `path` argument is now relative to the repository's working dir
      	- Add `git_blob_create_frombuffer`
      
      commit.h
      --------
      
      	- Remove `git_commit_new`
      	- Remove `git_commit_add_parent`
      	- Remove `git_commit_set_message`
      	- Remove `git_commit_set_committer`
      	- Remove `git_commit_set_author`
      	- Remove `git_commit_set_tree`
      
      	- Add `git_commit_create`
      	- Add `git_commit_create_v`
      	- Add `git_commit_create_o`
      	- Add `git_commit_create_ov`
      
      tag.h
      -----
      
      	- Remove `git_tag_new`
      	- Remove `git_tag_set_target`
      	- Remove `git_tag_set_name`
      	- Remove `git_tag_set_tagger`
      	- Remove `git_tag_set_message`
      
      	- Add `git_tag_create`
      	- Add `git_tag_create_o`
      
      tree.h
      ------
      
      	- Change `git_tree_entry_2object`:
      		New signature is `(git_object **object_out, git_repository *repo, git_tree_entry *entry)`
      
      	- Remove `git_tree_new`
      	- Remove `git_tree_add_entry`
      	- Remove `git_tree_remove_entry_byindex`
      	- Remove `git_tree_remove_entry_byname`
      	- Remove `git_tree_clearentries`
      	- Remove `git_tree_entry_set_id`
      	- Remove `git_tree_entry_set_name`
      	- Remove `git_tree_entry_set_attributes`
      
      object.h
      ------------
      
      	- Remove `git_object_new
      	- Remove `git_object_write`
      
      	- Change `git_object_close`:
      		This method is now *mandatory*. Not closing an object causes a
      		memory leak.
      
      odb.h
      -----
      
      	- Remove type `git_rawobj`
      	- Remove `git_rawobj_close`
      	- Rename `git_rawobj_hash` -> `git_odb_hash`
      	- Change `git_odb_hash`:
      		New signature is `(git_oid *id, const void *data, size_t len, git_otype type)`
      
      	- Add type `git_odb_object`
      	- Add `git_odb_object_close`
      
      	- Change `git_odb_read`:
      		New signature is `(git_odb_object **out, git_odb *db, const git_oid *id)`
      	- Change `git_odb_read_header`:
      		New signature is `(size_t *len_p, git_otype *type_p, git_odb *db, const git_oid *id)`
      	- Remove `git_odb_write`
      	- Add `git_odb_open_wstream`
      	- Add `git_odb_open_rstream`
      
      odb_backend.h
      -------------
      
      	- Change type `git_odb_backend`:
      		New internal signatures are as follows
      
      			int (* read)(void **, size_t *, git_otype *, struct git_odb_backend *, const git_oid *)
      			int (* read_header)(size_t *, git_otype *, struct git_odb_backend *, const git_oid *)
      			int (* writestream)(struct git_odb_stream **, struct git_odb_backend *, size_t, git_otype)
      			int (* readstream)( struct git_odb_stream **, struct git_odb_backend *, const git_oid *)
      
      	- Add type `git_odb_stream`
      	- Add enum `git_odb_streammode`
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  6. 14 Mar, 2011 2 commits
    • Fix the retarded object interdependency system · 6b2a1941
      It's no longer retarded. All object interdependencies are stored as OIDs
      instead of actual objects. This should be hundreds of times faster,
      specially on big repositories. Heck, who knows, maye it doesn't even
      segfault -- wouldn't that be awesome?
      
      What has changed on the API?
      
      	`git_commit_parent`, `git_commit_tree`, `git_tag_target` now return
      	their values through a pointer-to-pointer, and have an error code.
      
      	`git_commit_set_tree` and `git_tag_set_target` now return an error
      	code and may fail.
      
      	`git_repository_free__no_gc` has been deprecated because it's
      	stupid. Since there are no longer any interdependencies between
      	objects, we don't need internal reference counting, and GC
      	never fails or double-free's pointers.
      
      	`git_object_close` now does a very sane thing: marks an object
      	as unused. Closed objects will be eventually free'd from the
      	object cache based on LRU. Please use `git_object_close` from
      	the garbage collector `destroy` method on your bindings. It's
      	100% safe.
      
      	`git_repository_gc` is a new method that forces a garbage collector
      	pass through the repo, to free as many LRU objects as possible.
      	This is useful if we are running out of memory.
      Vicent Marti committed
    • 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
  7. 05 Mar, 2011 2 commits
  8. 03 Mar, 2011 4 commits
  9. 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
  10. 18 Feb, 2011 1 commit
  11. 07 Feb, 2011 1 commit
  12. 06 Feb, 2011 1 commit
  13. 05 Feb, 2011 2 commits
    • Fix directory/path manipulation methods · f725931b
      The `dirname` and `dirbase` methods have been replaced with the Android
      implementation, which is actually compilant to some kind of standard.
      
      A new method `topdir` has been added, which returns the topmost
      directory in a path.
      
      These changes fix issue #49:
      
      	`gitfo_prettify_dir_path` converts "./.git/" to ".git/", so
      	the code at src/repository.c:190 goes out of bounds when
      	trying to find the topmost directory.
      
      	The new `git__topdir` method handles this gracefully, and the
      	fixed `git__dirname` now returns the proper value for the
      	repository's working dir.
      
      	E.g.
      
      		/repo/.git/ ==> working dir '/repo/'
      		.git/		==> working dir '.'
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Make more methods return error codes · c836c332
      git_revwalk_next now returns an error code when the iteration is over.
      git_repository_index now returns an error code when the index file could
      not be opened.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  14. 30 Jan, 2011 1 commit
    • Refactor reference parsing code · 2f8a8ab2
      Several changes have been committed to allow the user to create
      in-memory references and write back to disk. Peeling of symbolic
      references has been made explicit. Added getter and setter methods for
      all attributes on a reference. Added corresponding documentation.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  15. 29 Jan, 2011 4 commits
    • Merge nulltoken's reference parsing code · 9282e921
      All the commits have been squashed into a single one before refactoring
      the final code, to keep everything tidy.
      
      Individual commit messages are as follows:
      
      Added repository reference looking up functionality placeholder.
      
      Added basic reference database definition and caching infrastructure.
      
      Removed useless constant.
      
      Added GIT_EINVALIDREFNAME error and description. Added missing description for GIT_EBAREINDEX.
      
      Added GIT_EREFCORRUPTED error and description.
      
      Added GIT_ETOONESTEDSYMREF error and description.
      
      Added resolving of direct and symbolic references.
      
      Prepared the packed-refs parsing.
      
      Added parsing of the packed-refs file content.
      
      When no loose reference has been found, the full content of the packed-refs file is parsed. All of the new (i.e. not previously parsed as a loose reference) references are eagerly stored in the cached references storage.
      
      The method packed_reference_file__parse() is in deer need of some refactoring. :-)
      
      Extracted to a method the parsing of the peeled target of a tag.
      
      Extracted to a method the parsing of a standard packed ref.
      
      Fixed leaky removal of the cached references.
      
      Ensured that a previously parsed packed reference isn't returned if a more up-to-date loose reference exists.
      
      Enhanced documentation of git_repository_reference_lookup().
      
      Moved some refs related constants from repository.c to refs.h.
      
      Made parsing of a packed tag reference more robust.
      
      Updated git_repository_reference_lookup() documentation.
      
      Added some references to the test repository.
      
      Added some tests covering tag references looking up.
      
      Added some tests covering symbolic and head references looking up.
      
      Added some tests covering packed references looking up.
      nulltoken committed
    • Made git_repository_open2() and git_repository_open3() benefit from recently… · eb2f3b47
      Made git_repository_open2() and git_repository_open3() benefit from recently added path prettifying function.
      nulltoken committed
    • Made git_repository_open() and git_repository_init() benefit from recently added… · 9dd34b1e
      Made git_repository_open() and git_repository_init() benefit from recently added path prettifying function.
      nulltoken committed
  16. 20 Jan, 2011 1 commit
  17. 13 Jan, 2011 1 commit
  18. 11 Jan, 2011 1 commit
  19. 03 Jan, 2011 2 commits
  20. 21 Dec, 2010 1 commit
  21. 20 Dec, 2010 1 commit
  22. 19 Dec, 2010 2 commits
  23. 17 Dec, 2010 4 commits
  24. 16 Dec, 2010 1 commit
  25. 15 Dec, 2010 1 commit
  26. 13 Dec, 2010 1 commit