summaryrefslogtreecommitdiff
path: root/src/odb.c
Commit message (Collapse)AuthorAgeFilesLines
* Fixed build warnings on Xcode 6.1Pierre-Olivier Latour2015-06-021-1/+1
|
* Merge pull request #3118 from libgit2/cmn/stream-sizeEdward Thomson2015-05-131-4/+9
|\ | | | | odb: make the writestream's size a git_off_t
| * odb: make the writestream's size a git_off_tcmn/stream-sizeCarlos Martín Nieto2015-05-131-4/+9
| | | | | | | | | | | | | | | | | | | | Restricting files to size_t is a silly limitation. The loose backend writes to a file directly, so there is no issue in using 63 bits for the size. We still assume that the header is going to fit in 64 bytes, which does mean quite a bit smaller files due to the run-length encoding, but it's still a much larger size than you would want Git to handle.
* | odb: reverse the default backend prioritiescmn/backends-prioCarlos Martín Nieto2015-05-131-3/+6
|/ | | | | | | | | | | | | | | | | | | | | | | | We currently first look in the loose object dir and then in the packs for objects. When performing operations on recent history this has a higher likelihood of hitting, but when we deal with operations which look further back into the past, we start spending a large amount of time getting ENOTENT from `access`. Reversing the priorities means that long-running operations can get to their objects faster, as we can look at the index data we have in memory (or rather mapped) to figure out whether we have an object, which is faster than going out to the filesystem. The packed backend already implements an optimistic read algorithm by first looking at the packs we know about and only going out to disk to referesh if the object is not found which means that in the case where we do have the object (which will be in the majority for anything that traverses the graph) we can avoid going to to disk entirely to determine whether an object exists. Operations which look at recent history may take a slight impact, but these would be operations which look a lot less at object and thus take less time regardless.
* centralizing all IO buffer size valuesJ Wyman2015-05-111-1/+1
|
* Make our overflow check look more like gcc/clang'sEdward Thomson2015-02-131-7/+8
| | | | | | | | | Make our overflow checking look more like gcc and clang's, so that we can substitute it out with the compiler instrinsics on platforms that support it. This means dropping the ability to pass `NULL` as an out parameter. As a result, the macros also get updated to reflect this as well.
* odb__hashlink: check st.st_size before castingEdward Thomson2015-02-121-9/+9
|
* allocations: test for overflow of requested sizeEdward Thomson2015-02-121-0/+1
| | | | | Introduce some helper macros to test integer overflow from arithmetic and set error message appropriately.
* win32: remember to cleanup our hash_ctxEdward Thomson2014-12-091-0/+1
|
* odb: `git_odb_object` contents are never NULLvmg/emptyVicent Marti2014-11-211-2/+2
| | | | | | | This is a contract that we made in the library and that we need to uphold. The contents of a blob can never be NULL because several parts of the library (including the filter and attributes code) expect `git_blob_rawcontent` to always return a valid pointer.
* odb: hardcode the empty blob and treecmn/empty-objectsCarlos Martín Nieto2014-11-081-1/+23
| | | | | | | | | | | | | | | | | | | | | git hardocodes these as objects which exist regardless of whether they are in the odb and uses them in the shell interface as a way of expressing the lack of a blob or tree for one side of e.g. a diff. In the library we use each language's natural way of declaring a lack of value which makes a workaround like this unnecessary. Since git uses it, it does however mean each shell application would need to perform this check themselves. This makes it common work across a range of applications and an issue with compatibility with git, which fits right into what the library aims to provide. Thus we introduce the hard-coded empty blob and tree in the odb frontend. These hard-coded objects are checked for before going to the backends, but after the cache check, which means the second time they're used, they will be treated as normal cached objects instead of creating new ones.
* odb: clear backend errors on successful readCarlos Martín Nieto2014-05-231-0/+1
| | | | | We go through the different backends in order, so it's not an error if at least one of the backends has the data we want.
* Fix remaining init_options inconsistenciesRussell Belfer2014-05-021-9/+4
| | | | | There were a couple of "init_opts()" functions a few more cases of structure initialization that I somehow missed.
* Don't redefine the same callback types, their signatures may changeJacques Germishuys2014-04-211-1/+1
|
* Merge pull request #2178 from libgit2/rb/fix-short-idEdward Thomson2014-03-311-7/+17
|\ | | | | Fix git_odb_short_id and git_odb_exists_prefix bugs
| * Fix a number of git_odb_exists_prefix bugsRussell Belfer2014-03-101-7/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The git_odb_exists_prefix API was not dealing correctly when a later backend returned GIT_ENOTFOUND even if an earlier backend had found the object. Additionally, the unit tests were not properly exercising the API and had a couple mistakes in checking the results. Lastly, since the backends are not expected to behavior correctly unless all bytes of the short id are zero except for the prefix, this makes the ODB prefix APIs explicitly clear out the extra bytes so the user doesn't have to be as careful.
* | Fix wrong assertionLinquize2014-03-211-1/+1
|/ | | | Fixes issue #2196
* Added function-based initializers for every options struct.Matthew Bowen2014-03-051-0/+11
| | | | The basic structure of each function is courtesy of arrbee.
* Merge pull request #2159 from libgit2/rb/odb-exists-prefixVicent Marti2014-03-061-1/+55
|\ | | | | Add ODB API to check for existence by prefix and object id shortener
| * Check short OID len in odb, not in backendsRussell Belfer2014-03-051-1/+0
| |
| * Add exists_prefix to ODB backend and ODB APIRussell Belfer2014-03-041-0/+55
| |
* | ODB writing fails gracefully when unsupportedEdward Thomson2014-03-051-6/+12
|/ | | | If no ODB backends support writing, we should fail gracefully.
* odb: handle NULL pointers passed to git_odb_stream_freeBrodie Rao2014-01-121-0/+3
| | | | Signed-off-by: Brodie Rao <brodie@sf.io>
* Allow backend consumers to specify file modeEdward Thomson2013-11-041-1/+1
|
* Merge pull request #1891 from libgit2/cmn/fix-thin-packsVicent Martí2013-10-281-1/+1
|\ | | | | Add support for thin packs
| * indexer: fix thin packsCarlos Martín Nieto2013-10-041-1/+1
| | | | | | | | | | | | When given an ODB from which to read objects, the indexer will attempt to inject the missing bases at the end of the pack and update the header and trailer to reflect the new contents.
* | Implement `git_odb_object_dup`Vicent Marti2013-10-221-0/+7
|/
* Merge pull request #1840 from linquize/warningVicent Martí2013-09-211-2/+1
|\ | | | | Fix warning
| * Fix warningLinquize2013-09-191-2/+1
| |
* | Merge git_buf and git_bufferRussell Belfer2013-09-171-4/+4
| | | | | | | | | | | | | | | | | | | | | | This makes the git_buf struct that was used internally into an externally available structure and eliminates the git_buffer. As part of that, some of the special cases that arose with the externally used git_buffer were blended into the git_buf, such as being careful about git_buf objects that may have a NULL ptr and allowing for bufs with a valid ptr and size but zero asize as a way of referring to externally owned data.
* | Extend public filter api with filter listsRussell Belfer2013-09-171-7/+9
| | | | | | | | | | | | | | | | | | | | | | This moves the git_filter_list into the public API so that users can create, apply, and dispose of filter lists. This allows more granular application of filters to user data outside of libgit2 internals. This also converts all the internal usage of filters to the public APIs along with a few small tweaks to make it easier to use the public git_buffer stuff alongside the internal git_buf.
* | Create public filter object and use itRussell Belfer2013-09-171-3/+3
| | | | | | | | | | | | | | This creates include/sys/filter.h with a basic definition of a git_filter and then converts the internal code to use it. There are related internal objects (git_filter_list) that we will want to publish at some point, but this is a first step.
* | errors: Fix format of some error messagesnulltoken2013-09-111-1/+1
| |
* | odb: Error when streaming in too [few|many] bytesnulltoken2013-09-071-0/+27
|/
* odb: Prevent stream_finalize_write() from overwritingnulltoken2013-09-061-0/+4
| | | | | | Now that #1785 is merged, git_odb_stream_finalize_write() calculates the object id before invoking the odb backend. This commit gives a chance to the backend to check if it already knows this object.
* odb: Move the auto refresh logic to the pack backendnulltoken2013-09-041-35/+4
| | | | | | | | | | | | Previously, `git_object_read()`, `git_object_read_prefix()` and `git_object_exists()` were implementing an auto refresh logic. When the expected object couldn't be found in any backend, a call to `git_odb_refresh()` was triggered and the lookup was once again performed against all backends. This commit removes this auto-refresh logic from the odb layer and pushes it down into the pack-backend (as it's the only one currently exposing a `refresh()` endpoint).
* odb: Honor the non refreshing capability of a backendnulltoken2013-08-301-3/+3
|
* odb: avoid hashing twice in and edge caseCarlos Martín Nieto2013-08-171-2/+2
| | | | | | | If none of the backends support direct writes and we must stream the whole file, we already know what the object's id should be; so use the stream's functions directly, bypassing the frontend's hashing and overwriting of our existing id.
* odb: make it clearer that the id is calculated in the frontendCarlos Martín Nieto2013-08-171-4/+4
| | | | | | | | | | The frontend is in charge of calculating the id of the objects. Thus the backends should treat it as a read-only value. The positioning in the function signature made it seem as though it was an output parameter. Make the id const and move it from the front to behind the subject (backend or stream).
* odb: perform the stream hashing in the frontendCarlos Martín Nieto2013-08-151-0/+21
| | | | | | Hash the data as it's coming into the stream and tell the backend what its name is when finalizing the write. This makes it consistent with the way a plain git_odb_write() performs the write.
* odb: wrap the stream reading and writing functionsCarlos Martín Nieto2013-08-151-3/+23
| | | | | | This is in preparation for moving the hashing to the frontend, which requires us to handle the incoming data before passing it to the backend's stream.
* odb: free object data when id is ambiguousCarlos Martín Nieto2013-08-121-1/+3
| | | | | By the time we recognise this as an ambiguous id, the object's data has been loaded into memory. Free it when returning EABMIGUOUS.
* Fix some more memory leaks in error pathRémi Duraffort2013-07-151-0/+1
|
* util: It's called `memzero`Vicent Marti2013-06-121-1/+1
|
* Add safe memset and use itRussell Belfer2013-06-071-1/+1
| | | | | | This adds a `git__memset` routine that will not be optimized away and updates the places where I memset() right before a free() call to use it.
* Zero memory for major objects before freeingRussell Belfer2013-05-311-0/+2
| | | | | | | By zeroing out the memory when we free larger objects (i.e. those that serve as collections of other data, such as repos, odb, refdb), I'm hoping that it will be easier for libgit2 bindings to find errors in their object management code.
* Merge pull request #1526 from arrbee/cleanup-error-return-without-msgVicent Martí2013-05-061-22/+43
|\ | | | | Make sure error messages are set for most error returns
| * Catch some odd odb backend corner case errorsRussell Belfer2013-05-011-22/+43
| | | | | | | | | | | | | | There are some cases, particularly where no loaded ODB backends support a particular operation, where we would return an error code without having set an error. This catches those cases and reports that no ODB backends support the operation in question.
* | odb: Do not error out if an alternate ODB is missingVicent Marti2013-05-031-0/+3
|/
* Merge pull request #1518 from arrbee/export-oid-comparisonVicent Martí2013-04-301-1/+1
|\ | | | | Remove most inlines from the public API