1. 01 Dec, 2018 1 commit
  2. 10 Jun, 2018 1 commit
  3. 01 May, 2017 1 commit
  4. 28 Apr, 2017 4 commits
    • odb: add option to turn off hash verification · 35079f50
      Verifying hashsums of objects we are reading from the ODB may be costly
      as we have to perform an additional hashsum calculation on the object.
      Especially when reading large objects, the penalty can be as high as
      35%, as can be seen when executing the equivalent of `git cat-file` with
      and without verification enabled. To mitigate for this, we add a global
      option for libgit2 which enables the developer to turn off the
      verification, e.g. when he can be reasonably sure that the objects on
      disk won't be corrupted.
      Patrick Steinhardt committed
    • odb: verify object hashes · 28a0741f
      The upstream git.git project verifies objects when looking them up from
      disk. This avoids scenarios where objects have somehow become corrupt on
      disk, e.g. due to hardware failures or bit flips. While our mantra is
      usually to follow upstream behavior, we do not do so in this case, as we
      never check hashes of objects we have just read from disk.
      
      To fix this, we create a new error class `GIT_EMISMATCH` which denotes
      that we have looked up an object with a hashsum mismatch. `odb_read_1`
      will then, after having read the object from its backend, hash the
      object and compare the resulting hash to the expected hash. If hashes do
      not match, it will return an error.
      
      This obviously introduces another computation of checksums and could
      potentially impact performance. Note though that we usually perform I/O
      operations directly before doing this computation, and as such the
      actual overhead should be drowned out by I/O. Running our test suite
      seems to confirm this guess. On a Linux system with best-of-five
      timings, we had 21.592s with the check enabled and 21.590s with the
      ckeck disabled. Note though that our test suite mostly contains very
      small blobs only. It is expected that repositories with bigger blobs may
      notice an increased hit by this check.
      
      In addition to a new test, we also had to change the
      odb::backend::nonrefreshing test suite, which now triggers a hashsum
      mismatch when looking up the commit "deadbeef...". This is expected, as
      the fake backend allocated inside of the test will return an empty
      object for the OID "deadbeef...", which will obviously not hash back to
      "deadbeef..." again. We can simply adjust the hash to equal the hash of
      the empty object here to fix this test.
      Patrick Steinhardt committed
    • tests: object: test looking up corrupted objects · d59dabe5
      We currently have no tests which check whether we fail reading corrupted
      objects. Add one which modifies contents of an object stored on disk and
      then tries to read the object.
      Patrick Steinhardt committed
    • tests: object: create sandbox · 86c03552
      The object::lookup tests do use the "testrepo.git" repository in a
      read-only way, so we do not set up the repository as a sandbox but
      simply open it. But in a future commit, we will want to test looking up
      objects which are corrupted in some way, which requires us to modify the
      on-disk data. Doing this in a repository without creating the sandbox
      will modify contents of our libgit2 repository, though.
      
      Create the repository in a sandbox to avoid this.
      Patrick Steinhardt committed
  5. 14 Nov, 2013 1 commit
  6. 29 Nov, 2012 1 commit
  7. 28 Nov, 2012 1 commit
  8. 23 Nov, 2012 1 commit
    • Reset all static variables to NULL in clar's __cleanup · 9094d30b
      Without this change, any failed assertion in the second (or a later) test
      inside a test suite has a chance of double deleting memory, resulting in
      a heap corruption. See #1096 for details.
      
      This leaves alone the test cases where we "just" use cl_git_sandbox_init()
      and cl_git_sandbox_cleanup(). These methods already take good care to not
      double delete a repository.
      
      Fixes #1096
      Sascha Cunz committed
  9. 17 May, 2012 2 commits
  10. 11 May, 2012 1 commit
  11. 08 May, 2012 2 commits