1. 15 Jun, 2019 1 commit
  2. 20 Feb, 2019 1 commit
  3. 22 Jan, 2019 1 commit
  4. 20 Jan, 2019 1 commit
  5. 01 Dec, 2018 1 commit
  6. 10 Jun, 2018 1 commit
  7. 23 Mar, 2018 2 commits
    • odb: fix writing to fake write streams · a52b4c51
      In commit 7ec7aa4a (odb: assert on logic errors when writing objects,
      2018-02-01), the check for whether we are trying to overflowing the fake
      stream buffer was changed from returning an error to raising an assert.
      The conversion forgot though that the logic around `assert`s are
      basically inverted. Previously, if the statement
      
          stream->written + len > steram->size
      
      evaluated to true, we would return a `-1`. Now we are asserting that
      this statement is true, and in case it is not we will raise an error. So
      the conversion to the `assert` in fact changed the behaviour to the
      complete opposite intention.
      
      Fix the assert by inverting its condition again and add a regression
      test.
      Patrick Steinhardt committed
    • tests: add tests for the mempack ODB backend · 904307af
      Our mempack ODB backend has no test coverage at all right now. Add a
      simple test suite to at least have some coverage of the most basic
      operations on the ODB.
      Patrick Steinhardt committed
  8. 09 Feb, 2018 1 commit
  9. 02 Feb, 2018 5 commits
  10. 26 Jan, 2018 1 commit
    • odb: reject reading and writing null OIDs · 275f103d
      The null OID (hash with all zeroes) indicates a missing object in
      upstream git and is thus not a valid object ID. Add defensive
      measurements to avoid writing such a hash to the object database in the
      very unlikely case where some data results in the null OID. Furthermore,
      add shortcuts when reading the null OID from the ODB to avoid ever
      returning an object when a faulty repository may contain the null OID.
      Patrick Steinhardt committed
  11. 20 Dec, 2017 3 commits
  12. 13 Jun, 2017 4 commits
  13. 12 Jun, 2017 4 commits
    • tests: odb: add tests with multiple backends · f148258a
      Previous to pulling out and extending the fake backend, it was quite
      cumbersome to write tests for very specific scenarios regarding
      backends. But as we have made it more generic, it has become much easier
      to do so. As such, this commit adds multiple tests for scenarios with
      multiple backends for the ODB.
      
      The changes also include a test for a very targeted scenario. When one
      backend found a matching object via `read_prefix`, but the last backend
      returns `GIT_ENOTFOUND` and when object hash verification is turned off,
      we fail to reset the error code to `GIT_OK`. This causes us to segfault
      later on, when doing a double-free on the returned object.
      Patrick Steinhardt committed
    • tests: odb: allow passing fake objects to the fake backend · 6e010bb1
      Right now, the fake backend is quite restrained in the way how it
      works: we pass it an OID which it is to return later as well as an error
      code we want it to return. While this is sufficient for existing tests,
      we can make the fake backend a little bit more generic in order to allow
      us testing for additional scenarios.
      
      To do so, we change the backend to not accept an error code and OID
      which it is to return for queries, but instead a simple array of OIDs
      with their respective blob contents. On each query, the fake backend
      simply iterates through this array and returns the first matching
      object.
      Patrick Steinhardt committed
    • tests: do not reuse OID from backend · 369cb45f
      In order to make the fake backend more useful, we want to enable it
      holding multiple object references. To do so, we need to decouple it
      from the single fake OID it currently holds, which we simply move up
      into the calling tests.
      Patrick Steinhardt committed
    • tests: odb: move fake backend into its own file · 2add34d0
      The fake backend used by the test suite `odb::backend::nonrefreshing` is
      useful to have some low-level tests for the ODB layer. As such, we move
      the implementation into its own `backend_helpers` module.
      Patrick Steinhardt committed
  14. 08 Jun, 2017 1 commit
    • settings: rename `GIT_OPT_ENABLE_SYNCHRONOUS_OBJECT_CREATION` · 6c23704d
      Initially, the setting has been solely used to enable the use of
      `fsync()` when creating objects. Since then, the use has been extended
      to also cover references and index files. As the option is not yet part
      of any release, we can still correct this by renaming the option to
      something more sensible, indicating not only correlation to objects.
      
      This commit renames the option to `GIT_OPT_ENABLE_FSYNC_GITDIR`. We also
      move the variable from the object to repository source code.
      Patrick Steinhardt committed
  15. 28 Apr, 2017 2 commits
    • 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: odb: make hash of fake backend configurable · e29e8029
      In the odb::backend::nonrefreshing test suite, we set up a fake backend
      so that we are able to determine if backend functions are called
      correctly. During the setup, we also parse an OID which is later on used
      to read out the pseudo-object. While this procedure works right now, it
      will create problems later when we implement hash verification for
      looked up objects. The current OID ("deadbeef") will not match the hash
      of contents we give back to the ODB layer and thus cannot be verified.
      
      Make the hash configurable so that we can simply switch the returned for
      single tests.
      Patrick Steinhardt committed
  16. 05 Apr, 2017 1 commit
  17. 03 Mar, 2017 1 commit
  18. 02 Mar, 2017 1 commit
  19. 28 Feb, 2017 2 commits
  20. 29 Dec, 2016 1 commit
  21. 06 Oct, 2016 1 commit
  22. 05 Aug, 2016 1 commit
    • odb: only provide the empty tree · becadafc
      Only provide the empty tree internally, which matches git's behavior.
      If we provide the empty blob then any users trying to write it with
      libgit2 would omit it from actually landing in the odb, which appear
      to git proper as a broken repository (missing that object).
      Edward Thomson committed
  23. 04 Aug, 2016 2 commits
  24. 09 Mar, 2016 1 commit