1. 07 Jul, 2011 1 commit
    • vector: Timsort all of the things · de18f276
      Drop the GLibc implementation of Merge Sort and replace it with Timsort.
      
      The algorithm has been tuned to work on arrays of pointers (void **),
      so there's no longer a need to abstract the byte-width of each element
      in the array.
      
      All the comparison callbacks now take pointers-to-elements, not
      pointers-to-pointers, so there's now one less level of dereferencing.
      
      E.g.
      
      	 int index_cmp(const void *a, const void *b)
      	 {
      	-	const git_index_entry *entry_a = *(const git_index_entry **)(a);
      	+	const git_index_entry *entry_a = (const git_index_entry *)(a);
      
      The result is up to a 40% speed-up when sorting vectors. Memory usage
      remains lineal.
      
      A new `bsearch` implementation has been added, whose callback also
      supplies pointer-to-elements, to uniform the Vector API again.
      Vicent Marti committed
  2. 05 Jul, 2011 1 commit
    • fileops: Cleanup · f79026b4
      Cleaned up the structure of the whole OS-abstraction layer.
      
      fileops.c now contains a set of utility methods for file management used
      by the library. These are abstractions on top of the original POSIX
      calls.
      
      There's a new file called `posix.c` that contains
      emulations/reimplementations of all the POSIX calls the library uses.
      These are prefixed with `p_`. There's a specific posix file for each
      platform (win32 and unix).
      
      All the path-related methods have been moved from `utils.c` to `path.c`
      and have their own prefix.
      Vicent Marti committed
  3. 01 Jul, 2011 1 commit
  4. 19 Jun, 2011 1 commit
  5. 03 Jun, 2011 1 commit
  6. 01 Jun, 2011 3 commits
  7. 23 May, 2011 2 commits
  8. 18 May, 2011 1 commit
  9. 15 May, 2011 3 commits
  10. 06 May, 2011 1 commit
  11. 24 Apr, 2011 1 commit
  12. 04 Apr, 2011 1 commit
    • Add a fake wstream to the ODB · d69d0185
      Streaming writes will no longer fail when writing to a backend that
      doesn't support streaming writes but supports direct ones.
      Now we create a fake stream on memory and then write it as a single
      block using the backend `write` callback.
      Vicent Marti committed
  13. 23 Mar, 2011 1 commit
    • Improve the ODB writing backend · f6f72d7e
      Temporary files when doing streaming writes are now stored inside the
      Objects folder, to prevent issues when moving files between
      disks/partitions.
      
      Add support for block writes to the ODB again (for those backends that
      cannot implement streaming).
      Vicent Marti committed
  14. 22 Mar, 2011 1 commit
  15. 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
  16. 03 Mar, 2011 1 commit
    • Fix searching in git_vector · 86d7e1ca
      We now store only one sorting callback that does entry comparison. This
      is used when sorting the entries using a quicksort, and when looking for
      a specific entry with the new search methods.
      
      The following search methods now exist:
      
      	git_vector_search(vector, entry)
      	git_vector_search2(vector, custom_search_callback, key)
      
      	git_vector_bsearch(vector, entry)
      	git_vector_bsearch2(vector, custom_search_callback, key)
      
      The sorting state of the vector is now stored internally.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  17. 09 Feb, 2011 2 commits
    • Internal changes on the backend system · d4b5a4e2
      The priority value for different backends has been removed from the
      public `git_odb_backend` struct. We handle that internally. The priority
      value is specified on the `git_odb_add_alternate`.
      
      This is convenient because it allows us to poll a backend twice with
      different priorities without having to instantiate it twice.
      
      We also differentiate between main backends and alternates; alternates have
      lower priority and cannot be written to.
      
      These changes come with some unit tests to make sure that the backend
      sorting is consistent.
      
      The libgit2 version has been bumped to 0.4.0.
      
      This commit changes the external API:
      
      CHANGED:
      	struct git_odb_backend
      		No longer has a `priority` attribute; priority for the backend
      		in managed internally by the library.
      
      	git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority)
      		Now takes an additional priority parameter, the priority that
      		will be given to the backend.
      
      ADDED:
      	git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority)
      		Add a backend as an alternate. Alternate backends have always
      		lower priority than main backends, and writing is disabled on
      		them.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Honor alternate entries in the ODB · 5a800efc
      The alternates file is now parsed, and the alternate ODB folders are
      added as separate backends. This allows the library to efficiently query
      the alternate folders.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  18. 13 Jan, 2011 1 commit
  19. 13 Dec, 2010 1 commit
  20. 06 Dec, 2010 1 commit
  21. 05 Dec, 2010 4 commits
  22. 23 Nov, 2010 2 commits
  23. 16 Nov, 2010 1 commit
  24. 05 Nov, 2010 1 commit
    • Improve error handling · 1795f879
      All initialization functions now return error codes instead of pointers.
      Error codes are now properly propagated on most functions. Several new
      and more specific error codes have been added in common.h
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  25. 28 Oct, 2010 1 commit
    • Add git_odb_read_header method to the ODB · adc0327a
      As requested, git_odb_read_header looks up an object on the ODB, but loads
      only the header information (type & size) without loading any of the
      actual file contents in memory.
      
      It is significantly faster than doing a git_odb_read if you only need an
      object's information and not its contents.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  26. 19 Sep, 2010 2 commits
    • Add setter methods & write support for git_commit · 0c3596f1
      All the required git_commit_set_XXX methods have been implemented; all
      the attributes of a commit object can now be modified in-memory.
      
      The new method git_object_write() automatically writes back the
      in-memory changes of any object to the repository. So far it only
      supports git_commit objects.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Give object structures more descriptive names · f49a2e49
      The 'git_obj' structure is now called 'git_rawobj', since
      it represents a raw object read from the ODB.
      
      The 'git_repository_object' structure is now called 'git_object',
      since it's the base object class for all objects.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  27. 06 Aug, 2010 1 commit
    • Add packfile reading · 7e4f56a5
      Packed objects inside packfiles are now properly unpacked when calling
      the git_odb__read_packed() method; delta'ed objects are also properly
      generated when needed.
      
      A new unit test 0204-readpack tries to read a couple hundred packed
      objects from a standard packed repository.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  28. 30 Apr, 2010 2 commits