src


Log

Author Commit Date CI Message
David Michael Barr ab8a0402 2012-09-12T14:26:31 odb_pack: try lookup before refreshing packs This reduces the rate of syscalls for the common case of sequences of object reads from the same pack. Best of 5 timings for libgit2_clar before this patch: real 0m5.375s user 0m0.392s sys 0m3.564s After applying this patch: real 0m5.285s user 0m0.356s sys 0m3.544s 0.6% improvement in system time. 9.2% improvement in user time. 1.7% improvement in elapsed time. Confirmed a 0.6% reduction in number of system calls with strace. Expect greater improvement for graph-traversal with large packs.
Vicent Martí 21d847d3 2012-09-11T14:56:13 Merge pull request #920 from scunz/mergebase_const git_mergebase: Constness-Fix for consistency
Vicent Marti 412293dc 2012-09-11T23:38:16 Merge branch 'diff-crlf-filters' into development
Vicent Marti c859184b 2012-09-11T23:05:24 Properly handle p_reads
Russell Belfer 1f35e89d 2012-09-11T12:03:33 Fix diff binary file detection In the process of adding tests for the max file size threshold (which treats files over a certain size as binary) there seem to be a number of problems in the new code with detecting binaries. This should fix those up, as well as add a test for the file size threshold stuff. Also, this un-deprecates `GIT_DIFF_LINE_ADD_EOFNL`, since I finally found a legitimate situation where it would be returned.
Michael Schubert 6ee68611 2012-09-10T21:29:07 cache: fix race condition Example: a cached node is owned only by the cache (refcount == 1). Thread A holds the lock and determines that the entry which should get cached equals the node (git_oid_cmp(&node->oid, &entry->oid) == 0). It frees the given entry to instead return the cached node to the user (entry = node). Now, before Thread A happens to increment the refcount of the node *outside* the cache lock, Thread B tries to store another entry and hits the slot of the node before, decrements its refcount and frees it *before* Thread A gets a chance to increment for the user. git_cached_obj_incref(entry); git_mutex_lock(&cache->lock); { git_cached_obj *node = cache->nodes[hash & cache->size_mask]; if (node == NULL) { cache->nodes[hash & cache->size_mask] = entry; } else if (git_oid_cmp(&node->oid, &entry->oid) == 0) { git_cached_obj_decref(entry, cache->free_obj); entry = node; } else { git_cached_obj_decref(node, cache->free_obj); // Thread B is here cache->nodes[hash & cache->size_mask] = entry; } } git_mutex_unlock(&cache->lock); // Thread A is here /* increase the refcount again, because we are * returning it to the user */ git_cached_obj_incref(entry);
Russell Belfer 2130dee4 2012-09-10T23:19:00 Merge pull request #914 from authmillenon/index-fixes Fix logical error in git_index_set_caps
Russell Belfer eff14d38 2012-09-10T23:15:54 Merge pull request #906 from nulltoken/topic/git_reference_peel git reference peel
Russell Belfer c6ac28fd 2012-09-10T12:24:05 Reorg internal odb read header and object lookup Often `git_odb_read_header` will "fail" and have to read the entire object into memory instead of just the header. When this happens, the object is loaded and then disposed of immediately, which makes it difficult to efficiently use the header information to decide if the object should be loaded (since attempting to do so will often result in loading the object twice). This commit takes the existing code and reorganizes it to have two new functions: - `git_odb__read_header_or_object` which acts just like the old read header function except that it returns the object, too, if it was forced to load the whole thing. It then becomes the callers responsibility to free the `git_odb_object`. - `git_object__from_odb_object` which was extracted from the old `git_object_lookup` and creates a subclass of `git_object` from an existing `git_odb_object` (separating the ODB lookup from the `git_object` creation). This allows you to use the first header reading function efficiently without instantiating the `git_odb_object` twice. There is no net change to the behavior of any of the existing functions, but this allows internal code to tap into the ODB lookup and object creation to be more efficient.
Russell Belfer e597b189 2012-09-10T11:49:12 Move diff max_size to public API This commit adds a max_size value in the public `git_diff_options` structure so that the user can automatically flag blobs over a certain size as binary regardless of other properties. Also, and perhaps more importantly, this moves binary detection to be as early as possible in the diff traversal inner loop and makes sure that we stop loading objects as soon as we decide that they are binary.
Russell Belfer b36effa2 2012-09-10T09:59:14 Replace git_diff_iterator_num_files with progress The `git_diff_iterator_num_files` API was problematic, since we don't actually know the exact number of files to be iterated over until we load those files into memory. This replaces it with a new `git_diff_iterator_progress` API that goes from 0 to 1, and moves and renamed the old API for the internal places that can tolerate a max value instead of an exact value.
Sascha Cunz 857323d4 2012-09-09T15:53:57 git_mergebase: Constness-Fix for consistency
Russell Belfer 17b06f4d 2012-09-07T15:49:08 Add missing accessor for fetchRecurseSubmodules When `git_submodule` became an opaque structure, I forgot to add accessor functions for the fetchRecurseSubmodules config setting. This fixes that.
Russell Belfer 3a3deea8 2012-09-06T15:45:50 Clean up blob diff path Previously when diffing blobs, the diff code just ran with a NULL repository object. Of course, that's not necessary and the test for a NULL repo was confusing. This makes the blob diff run with the repo that contains the blobs and clarifies the test that it is possible to be diffing data where the path is unknown.
Russell Belfer 60b9d3fc 2012-09-05T15:00:40 Implement filters for status/diff blobs This adds support to diff and status for running filters (a la crlf) on blobs in the workdir before computing SHAs and before generating text diffs. This ended up being a bit more code change than I had thought since I had to reorganize some of the diff logic to minimize peak memory use when filtering blobs in a diff. This also adds a cap on the maximum size of data that will be loaded to diff. I set it at 512Mb which should match core git. Right now it is a #define in src/diff.h but it could be moved into the public API if desired.
Russell Belfer f8e2cc9a 2012-08-31T15:53:47 Alternate test for autocrlf with status I couldn't get the last failing test to actually fail. This is a different test suggested by @nulltoken which should fail.
nulltoken 35d2e449 2012-08-20T11:26:02 checkout: cleanup misplaced declaration
nulltoken ced8d142 2012-08-22T11:30:55 errors: deploy GIT_EBAREREPO usage
nulltoken 31665948 2012-08-24T21:30:45 refs: introduce git_reference_peel() Fix #530
Michael Schubert 0e9f2fce 2012-09-06T11:35:09 odb: mark unused variable
Vicent Martí 7a3fc9fb 2012-09-06T01:17:23 Merge pull request #900 from pwkelley/development Expose a malloc function to 3rd party ODB backends
Vicent Martí 4e2b8b4c 2012-09-06T01:15:14 Merge pull request #912 from schu/netops-ssl-error netops: be more careful with SSL errors
Vicent Marti 01ae1909 2012-09-06T10:13:38 diff: Cleanup documentation and printf compat
Russell Belfer 510f1bac 2012-08-30T16:39:05 Fix comments and a minor bug This adds better header comments and also fixes a bug in one of simple APIs that tells the number of lines in the current hunk.
Russell Belfer f335ecd6 2012-08-30T14:24:16 Diff iterators This refactors the diff output code so that an iterator object can be used to traverse and generate the diffs, instead of just the `foreach()` style with callbacks. The code has been rearranged so that the two styles can still share most functions. This also replaces `GIT_REVWALKOVER` with `GIT_ITEROVER` and uses that as a common error code for marking the end of iteration when using a iterator style of object.
Vicent Martí 4d383403 2012-09-04T14:19:24 Merge pull request #856 from libgit2/utf8-win Windows: Perform UTF-8 path conversion on the Stack
Carlos Martín Nieto f9988d4e 2012-09-04T21:42:00 odb: pass the user's data pointer correctly in foreach
authmillenon 0e2dd29b 2012-09-04T12:07:51 Fix logical error in git_index_set_caps
nulltoken b97c169e 2012-09-04T10:01:18 Fix MSVC compilation warnings
Michael Schubert 65ac67fb 2012-08-28T21:58:10 netops: be more careful with SSL errors SSL_get_error() allows to receive a result code for various SSL operations. Depending on the return value (see man (3) SSL_get_error) there might be additional information in the OpenSSL error queue. Return the queued message if available, otherwise set an error message corresponding to the return code.
Michael Schubert 4deda91b 2012-09-04T00:13:59 netops: continue writing on SSL_ERROR_WANT_WRITE
nulltoken 89cd5708 2012-08-29T14:20:53 repository: make initialization cope with missing core.worktree
Vicent Marti 0f4c6175 2012-08-28T22:19:08 Add bounds checking to UTF-8 conversion
Vicent Marti 6813169a 2012-08-06T12:45:59 windows: Keep UTF-8 on the stack yo
Vicent Martí 3b73a034 2012-04-25T16:26:12 UTF-8 changes yo
Vicent Martí 319ad0ba 2012-08-28T13:55:55 Merge pull request #905 from carlosmn/signature-now signature: make the OS give us the offset for git_signature_now
Michael Schubert 0844ed06 2012-08-28T20:15:21 Fix parentheses warning
Carlos Martín Nieto d03d309b 2012-08-28T18:02:12 signature: make the OS give us the offset for git_signature_now There is a better and less fragile way to calculate time offsets. Let the OS take care of dealing with DST and simply take the the offset between the local time and UTC that it gives us.
Carlos Martín Nieto 0d5dce26 2012-08-28T14:15:32 ssl: make cert check ignore work for invalid certs, not just CNs Passing SSL_VERIFY_PEER makes OpenSSL shut down the connection if the certificate is invalid, without giving us a chance to ignore that error. Pass SSL_VERIFY_NONE and call SSL_get_verify_result if the user wanted us to check. When no CNs match, we used to jump to on_error which gave a bogus error as that's for OpenSSL errors. Jump to cert_fail so we tell the user that the error came from checking the certificate.
Vicent Marti 62eafd06 2012-08-27T14:54:52 Merge branch 'branch-delete-ref' into development Conflicts: include/git2/refs.h
Vicent Martí bd2887a5 2012-08-27T14:52:26 Merge pull request #904 from arrbee/better-object-peel Make git_object_peel a bit smarter
Vicent Martí b9d283d1 2012-08-27T13:39:17 Merge pull request #897 from nulltoken/topic/git_reference_check_format refs: expose git_reference_normalize_name()
Vicent Martí 05752700 2012-08-27T13:35:58 Merge pull request #899 from schu/revwalk-push revwalk: refuse push of non-commit objects
Russell Belfer d8057a5b 2012-08-27T11:53:59 Make git_object_peel a bit smarter This expands the types of peeling that `git_object_peel` knows how to do to include TAG -> BLOB peeling, and makes the errors slightly more consistent depending on the situation. It also adds a new special behavior where peeling to ANY will peel until the object type changes (e.g. chases TAGs to a non-TAG). Using this expanded peeling, this replaces peeling code that was embedded in `git_tag_peel` and `git_reset`.
Russell Belfer 0b9174c6 2012-08-27T11:45:48 Merge pull request #903 from nulltoken/topic/peeling-duplication branch: reduce code duplication
Philip Kelley c49d328c 2012-08-27T09:59:13 Expose a malloc function to 3rd party ODB backends
nulltoken d1445b75 2012-08-27T15:24:27 branch: reduce code duplication
Michael Schubert 4e323ef0 2012-08-27T10:51:01 revwalk: refuse push of non-commit objects Check the type of the pushed object immediately instead of starting the walk and failing in between.
nulltoken 2e0c8816 2012-08-26T22:08:22 refs: expose git_reference_normalize_name()
Vicent Marti 1c947daa 2012-08-23T15:47:29 branch: Change `git_branch_delete` to take a ref
Vicent Marti 17f7bde2 2012-08-23T15:47:08 posix: Always set a default mapping mode
Carlos Martín Nieto 2b175ca9 2012-08-26T00:35:52 indexer: kill git_indexer_stats.data_received It's not really needed with the current code as we have EOS and the sideband's flush to tell us we're done. Keep the distinction between processed and received objects.
Carlos Martín Nieto cc1d85d1 2012-08-25T23:32:19 http: increase buffer side to deal with side-band-64k This poor transport was forgotten in the recent sideband support.
Carlos Martín Nieto 7a57ae54 2012-08-25T23:31:29 indexer: don't segfault when freeing an unused indexer Make sure that idx->pack isn't NULL before trying to free resources under it.
Vicent Martí 8238401c 2012-08-25T11:37:23 Merge pull request #896 from ben/revparse-ambiguous Revparse: GIT_EAMBIGUOUS
Ben Straub c9de8611 2012-08-23T12:29:09 Revparse: GIT_EAMBIGUOUS Revparse now returns EAMBIGUOUS if the the spec doesn't match any refs/tags, and is <4 characters.
Vicent Martí b7e8827b 2012-08-24T16:29:01 Merge pull request #895 from carlosmn/sideband Add sideband support
Vicent Martí 09fad506 2012-08-24T15:45:13 Merge pull request #852 from arrbee/submodule-extensions Submodule extensions
Russell Belfer 7fbca880 2012-08-24T14:32:45 Support new config locations As of git v1.7.12, $HOME/.config/git/ is supported as a new location for "config", "attributes", and "ignore" files.
Russell Belfer 07c06f7a 2012-08-24T14:24:33 Fix memory leak in cp_r
Russell Belfer 11684104 2012-08-24T13:41:45 Fix crash with adding internal ignores Depending on what you had done before adding new items to the internal ignores list, it was possible for the cache of ignore data to be uninitialized.
Russell Belfer 97a17e4e 2012-08-24T12:19:22 Fix valgrind warnings and spurious error messages Just clean up valgrind warnings about uninitialized memory and also clear out errno in some cases where it results in a false error message being generated at a later point.
Carlos Martín Nieto e03e71da 2012-05-14T17:54:25 network: add sideband support This lets us notify the user of what the remote end is doing while we wait for it to start sending us the packfile.
Russell Belfer 5f4a61ae 2012-08-09T19:43:25 Working implementation of git_submodule_status This is a big redesign of the git_submodule_status API and the implementation of the redesigned API. It also fixes a number of bugs that I found in other parts of the submodule API while writing the tests for the status part. This also fixes a couple of bugs in the iterators that had not been noticed before - one with iterating when there is a gitlink (i.e. separate-work-dir) and one where I was treating anything even vaguely submodule-like as a submodule, more aggressively than core git does.
Russell Belfer 0c8858de 2012-08-03T14:28:07 Fix valgrind issues and leaks This fixes up a number of problems flagged by valgrind and also cleans up the internal `git_submodule` allocation handling overall with a simpler model.
Russell Belfer aa13bf05 2012-08-02T13:00:58 Major submodule rewrite This replaces the old submodule API with a new extended API that supports most of the things that can be done with `git submodule`.
Russell Belfer 2eb4edf5 2012-08-24T10:48:48 Fix errors on Win32 with new repo init
Carlos Martín Nieto bffa852f 2012-07-13T12:01:11 indexer: recognize and mark when all of the packfile has been downloaded We can't always rely on the network telling us when the download is finished. Recognize it from the indexer itself.
Russell Belfer e9ca852e 2012-08-23T09:20:17 Fix warnings and merge issues on Win64
Russell Belfer 85bd1746 2012-08-22T16:03:35 Some cleanup suggested during review This cleans up a number of items suggested during code review with @vmg, including: * renaming "outside repo" config API to `git_config_open_default` * killing the `git_config_open_global` API * removing the `git_` prefix from the static functions in fileops * removing some unnecessary functionality from the "cp" command
Russell Belfer 0e26202c 2012-08-01T14:30:08 fix missing validation and type cast warning
Russell Belfer ca1b6e54 2012-07-31T17:02:54 Add template dir and set gid to repo init This extends git_repository_init_ext further with support for initializing the repository from an external template directory and with support for the "create shared" type flags that make a set GID repository directory. This also adds tests for much of the new functionality to the existing `repo/init.c` test suite. Also, this adds a bunch of new utility functions including a very general purpose `git_futils_mkdir` (with the ability to make paths and to chmod the paths post-creation) and a file tree copying function `git_futils_cp_r`. Also, this includes some new path functions that were useful to keep the code simple.
Russell Belfer 662880ca 2012-07-26T16:07:01 Add git_repository_init_ext for power initters The extended version of repository init adds support for many of the things that you can do with `git init` and sets up structures that will make it easier to extend further in the future.
Russell Belfer 5fdc41e7 2012-08-22T13:57:57 Minor bug fixes in diff code In looking at PR #878, I found a few small bugs in the diff code, mostly related to work that can be avoided when processing tree- to-tree diffs that was always being carried out. This commit has some small fixes in it.
Vicent Martí cfda29e3 2012-08-22T13:15:14 Merge pull request #891 from arrbee/internal-ignore-api API for managing in-memory ignore rules
Russell Belfer 2fb4e9b3 2012-08-22T11:42:00 Wrap up ignore API and add tests This fills out the ignore API and adds tests.
Russell Belfer f004c4a8 2012-08-21T17:26:39 Add public API for internal ignores This creates a public API for adding to the internal ignores list, which already existing but was not accessible. This adds the new default value for core.excludesfile also.
nulltoken 9d7ac675 2012-08-21T11:45:16 tree entry: rename git_tree_entry_attributes() into git_tree_entry_filemode()
nulltoken a7dbac0b 2012-08-17T21:10:32 filemode: deploy enum usage
Vicent Martí 5c27da1f 2012-08-20T12:10:23 Merge pull request #884 from carlosmn/global-windows Make the memory-window conrol structures global
Carlos Martín Nieto 8cef828d 2012-08-18T22:11:49 Make the memory-window conrol structures global Up to now, the idea was that the user would do all the operations for one repository in the same thread. Thus we could have the memory-mapped window information thread-local and avoid any locking. This is not practical in a few environments, such as Apple's GCD which allocates threads arbitrarily or the .NET CLR, where the OS-level thread can change at any moment. Make the control structure global and protect it with a mutex so we don't depend on the thread currently executing the code.
nulltoken 66439b0b 2012-08-17T11:21:49 treebuilder: enhance attributes handling on insertion
Vicent Martí f98c32f3 2012-08-19T01:26:06 Merge pull request #778 from ben/clone Clone
nulltoken 1a0537e4 2012-08-15T00:08:38 Fix compilation warning
Carlos Martín Nieto 85f28ba8 2012-08-14T11:43:20 Merge pull request #873 from carlosmn/tree-walk git_tree_walk callback return value semantic does not match documentation
Russell Belfer 3a6bc301 2012-08-14T11:30:18 Merge pull request #875 from arrbee/fix-message-prettify-length-check Fix message prettify length check
Russell Belfer 85a0e28b 2012-08-14T10:50:58 Make git_message_prettify return bytes written If you want to be absolutely safe with git_message_prettify, you can now pass a NULL pointer for the buffer and get back the number of bytes that would be copied into the buffer. This means that an error is a non-negative return code and a success will be greater than zero from this function.
Carlos Martín Nieto a6bf1687 2012-08-13T14:07:47 tree: allow the user to skip an entry or cancel the walk Returning a negative cancels the walk, and returning a positive one causes us to skip an entry, which was previously done by a negative value. This allows us to stay consistent with the rest of the functions that take a callback and keeps the skipping functionality.
Carlos Martín Nieto 53ae1235 2012-08-13T14:00:53 tree: bring back the documented behaviour for a walk However, there should be a way to cancel the walk and another to skip the entry.
Russell Belfer 616c1433 2012-08-12T11:53:58 Clean up code Okay, this is probably cleaner and it is also less net change from the original version
Russell Belfer fdc637c4 2012-08-12T09:08:45 Check prettify message output buffer after cleanup This makes the message prettify buffer length check accurate.
Russell Belfer a1ecddf0 2012-08-12T07:59:30 Fix config parser boundary logic The config file parser was not working right if there was no whitespace between the value name and the equals sign. This fixes that.
Michael Schubert 738837bd 2012-08-11T12:29:24 sha1: add missing header guards
Vicent Marti c07d9c95 2012-08-09T15:33:04 oid: Explicitly include `oid.h` for the inlined CMP
Joshua Peek 186c054d 2012-08-09T14:47:29 Revert implementation changes
Joshua Peek 28e00681 2012-08-09T14:39:56 Ignore ref oid terminator
Russell Belfer 2fe293b6 2012-08-09T11:36:21 trim whitespace when parsing loose refs
Joshua Peek 6ab68290 2012-08-09T12:39:09 Parse ref oids without trailing newline
Russell Belfer e4607392 2012-08-06T11:06:05 Fix iterator check and return value There is a little cleanup necessary from PR #843. Since the new callbacks return `GIT_EUSER` we have to be a little careful about return values when they are used internally to the library. Also, callbacks should be checked for non-zero return values, not just less than zero.
Vicent Marti d8d28e2e 2012-08-06T12:44:23 remotes: Proper return for `git_remote_ls`