1. 21 Feb, 2011 1 commit
    • Rewrite all file IO for more performance · 817c2820
      The new `git_filebuf` structure provides atomic high-performance writes
      to disk by using a write cache, and optionally a double-buffered scheme
      through a worker thread (not enabled yet).
      
      Writes can be done 3-layered, like in git.git (user code -> write cache
      -> disk), or 2-layered, by writing directly on the cache. This makes
      index writing considerably faster.
      
      The `git_filebuf` structure contains all the old functionality of
      `git_filelock` for atomic file writes and reads. The `git_filelock`
      structure has been removed.
      
      Additionally, the `git_filebuf` API allows to automatically hash (SHA1)
      all the data as it is written to disk (hashing is done smartly on big
      chunks to improve performance).
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  2. 18 Feb, 2011 3 commits
    • Fix repository initialization · 874c3b6f
      Fixed several issues with path joining and bare repos.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Fix segfault when iterating a revlist backwards · cb77ad0d
      The `prev` and `next` pointers were not being updated after popping one
      of the list elements.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Disable threaded index writing by default · e822508a
      The interlocking on the write threads was not being done properly (index
      entries were sometimes written out of order). With proper interlocking,
      the threaded write is only marginally faster on big index files, and
      slower on the smaller ones because of the overhead when creating
      threads.
      
      The threaded index writing has been temporarily disabled; after more
      accurate benchmarks, if might be possible to enable it again only when
      writing very large index files (> 1000 entries).
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  3. 17 Feb, 2011 3 commits
    • Fix refcounting initialization · 3ecc8b5e
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Fix type truncation in index entries · 084c1935
      64-bit types stored in memory have to be truncated into 32 bits when
      writing to disk. Was causing warnings in MSVC.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
    • Improve the performance when writing Index files · 348c7335
      In response to issue #60 (git_index_write really slow), the write_index
      function has been rewritten to improve its performance -- it should now
      be in par with the performance of git.git.
      
      On top of that, if Posix Threads are available when compiling libgit2, a
      new threaded writing system will be used (3 separate threads take care
      of solving byte-endianness, hashing the contents of the index and
      writing to disk, respectively). For very long Index files, this method
      is up to 3x times faster than git.git.
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  4. 14 Feb, 2011 1 commit
  5. 09 Feb, 2011 3 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
    • Use the new git__joinpath to build paths in methods · 995f9c34
      The `git__joinpath` function has been changed to use a statically
      allocated buffer; we assume the buffer to be 4096 bytes, because fuck
      you.
      
      The new method also supports an arbritrary number of paths to join,
      which may come in handy in the future.
      
      Some methods which were manually joining paths with `strcpy` now use the
      new function, namely those in `index.c` and `refs.c`.
      
      Based on Emeric Fermas' original patch, which was using the old
      `git__joinpath` because I'm stupid. Thanks!
      
      Signed-off-by: Vicent Marti <tanoku@gmail.com>
      Vicent Marti committed
  6. 08 Feb, 2011 2 commits
  7. 07 Feb, 2011 13 commits
  8. 06 Feb, 2011 2 commits
  9. 05 Feb, 2011 12 commits