Log

Author Commit Date CI Message
Carlos Martín Nieto 217c029b 2014-04-09T14:08:22 commit: safer commit creation with reference update The current version of the commit creation and amend function are unsafe to use when passing the update_ref parameter, as they do not check that the reference at the moment of update points to what the user expects. Make sure that we're moving history forward when we ask the library to update the reference for us by checking that the first parent of the new commit is the current value of the reference. We also make sure that the ref we're updating hasn't moved between the read and the write. Similarly, when amending a commit, make sure that the current tip of the branch is the commit we're amending.
Vicent Marti 041336e6 2014-04-28T07:36:27 Merge pull request #2306 from odcinek/development_cmake Make the build CMake 2.6 compatible
Marcin Sawicki 7f0de93a 2014-04-28T15:24:36 Make the build CMake 2.6 compatible
Vicent Marti ec771058 2014-04-27T03:57:53 Merge pull request #2301 from libgit2/cmn/pack-objects-memory Keep the deflate buffer from ballooning up
Carlos Martín Nieto 38d338b2 2014-04-26T18:15:39 pack-objects: always write out the status in write_one() Make sure we set the output parameter to a value.
Carlos Martín Nieto c7f86efb 2014-04-26T18:04:43 zstream: grow based on used memory rather than allocated When deflating data, we might need to grow the buffer. Currently we add a guess on top of the currently-allocated buffer size. When we re-use the buffer, it already has some memory allocated; adding to that means that we always grow the buffer regardless of how much we need to use. Instead, increase on top of the currently-used size. This still leaves us with the allocated size of the largest object we compress, but it's a minor pain compared to unbounded growth. This fixes #2285.
Carlos Martín Nieto 4f9d5414 2014-04-26T14:29:18 refdb: fix typo and wording
Vicent Marti e79a2998 2014-04-25T07:08:41 Merge pull request #2299 from mekishizufu/fix_leaks Plug some leaks
Jiri Pospisil 7b8d564d 2014-04-25T15:49:58 Reset tests: Use sandboxed index
Jiri Pospisil 424222f4 2014-04-25T15:49:26 Filter: Make sure to release local on error
Vicent Marti 8443ed6c 2014-04-25T02:10:19 Merge pull request #2284 from jacquesg/push-progress-callback Fire progress and update tips callbacks also for pushes.
Vicent Marti 332e4f20 2014-04-25T02:07:42 Merge pull request #2297 from libgit2/rb/status-with-precomposed-changes Improve test coverage of status with different core.precomposeunicode settings
Vicent Marti 2ad51b81 2014-04-25T02:04:12 Merge pull request #2241 from libgit2/rb/stash-skip-submodules Improve stash and checkout for ignored + untracked items
Russell Belfer af9eeac9 2014-04-24T16:20:08 Merge pull request #2294 from ethomson/merge_checkout_strategy Merge checkout strategy
Russell Belfer 6b833e3a 2014-04-24T15:40:50 Improve docs for status rename detection limits and make tests empty on platforms without iconv support.
Russell Belfer f608f3bb 2014-04-24T15:25:01 Test toggling core.precomposeunicode yields rename There is an interesting difference with core Git here, though. Because libgit2 will do rename detection with the working directory, in the last case where the HEAD and the working directory both have the decomposed data and the index has the composed data, we generate a single status record with two renames whereas Git will generate one rename (head to index) and one untracked file.
Russell Belfer 2334e3d8 2014-04-24T14:46:59 Test decomposed unicode renames work as expected
Russell Belfer a409acef 2014-04-24T11:59:50 Handle explicitly ignored dir slightly differently When considering status of untracked directories, if we find an explicitly ignored item, even if it is a directory, treat the parent as an IGNORED item. It was accidentally being treated as an EMPTY item because we were not looking into the ignored subdir.
Vicent Marti 87c9b741 2014-04-24T05:24:46 Merge pull request #2295 from libgit2/cmn/fetchhead-quote fetchhead: deal with quotes in branch names
Carlos Martín Nieto bdc82e1c 2014-04-24T14:08:29 fetchhead: deal with quotes in branch names The current FETCH_HEAD parsing code assumes that a quote must end the branch name. Git however allows for quotes as part of a branch name, which causes us to consider the FETCH_HEAD file as invalid. Instead of searching for a single quote char, search for a quote char followed by SP, which is not a valid part of a ref name.
Edward Thomson a4e2c36a 2014-04-23T19:40:21 merge: checkout default shouldn't clobber given
Edward Thomson 26564d80 2014-04-23T19:26:58 merge: default checkout strategy for should be SAFE
Russell Belfer 219c89d1 2014-04-23T16:28:45 Treat ignored, empty, and untracked dirs different In the iterator, distinguish between ignores and empty directories so that diff and status can ignore empty directories, but checkout and stash can treat them as untracked items.
Vicent Marti 212b6205 2014-04-23T09:27:15 Merge pull request #2291 from ethomson/patch_binary patch: emit deflated binary patches (optionally)
Vicent Marti 5ca410b9 2014-04-23T07:13:49 Merge pull request #2283 from phkelley/win32_fs Win32: UTF-8 <-> WCHAR conversion overhaul
Philip Kelley 7110000d 2014-04-22T10:21:19 React to feedback for UTF-8 <-> WCHAR and reparse work
Vicent Marti 5b58d6f7 2014-04-23T03:21:05 Merge pull request #2289 from libgit2/rb/note-git-diff-index-behavior Some doc and examples/diff.c changes
Russell Belfer 37da3685 2014-04-22T21:51:54 Make checkout match diff for untracked/ignored dir When diff finds an untracked directory, it emulates Git behavior by looking inside the directory to see if there are any untracked items inside it. If there are only ignored items inside the dir, then diff considers it ignored, even if there is no direct ignore rule for it. Checkout was not copying this behavior - when it found an untracked directory, it just treated it as untracked. Unfortunately, when combined with GIT_CHECKOUT_REMOVE_UNTRACKED, this made is seem that checkout (and stash, which uses checkout) was removing ignored items when you had only asked it to remove untracked ones. This commit moves the logic for advancing past an untracked dir while scanning for non-ignored items into an iterator helper fn, and uses that for both diff and checkout.
Edward Thomson e349ed50 2014-04-22T14:58:33 patch: emit binary patches (optionally)
Russell Belfer 3c1aa4c1 2014-04-22T15:23:39 Failing test for stashing a buried ignored file
Russell Belfer 24d17de2 2014-04-02T12:07:27 Make stash and checkout ignore contained repos To emulate git, stash should not remove untracked git repositories inside the parent repo, and checkout's REMOVE_UNTRACKED should also skip over these items. `git stash` actually prints a warning message for these items. That should be possible with a checkout notify callback if you wanted to, although it would require a bit of extra logic as things are at the moment.
Russell Belfer e60883c8 2014-04-22T12:59:31 Replace math fns with simpler integer math
Russell Belfer 8d09efa2 2014-04-22T12:33:27 Use git_diff_get_stats in example/diff + refactor This takes the `--stat` and related example options in the example diff.c program and converts them to use the `git_diff_get_stats` API which nicely formats stats for you. I went to add bar-graph scaling to the stats formatter and noticed that the `git_diff_stats` structure was holding on to all of the `git_patch` objects. Unfortunately, each of these objects keeps the full text of the diff in memory, so this is very expensive. I ended up modifying `git_diff_stats` to keep just the data that it needs to keep and allowed it to release the patches. Then, I added width scaling to the output on top of that. In making the diff example program match 'git diff' output, I ended up removing an newline from the sumamry output which I then had to compensate for in the email formatting to match the expectations. Lastly, I went through and refactored the tests to use a couple of helper functions and reduce the overall amount of code there.
Russell Belfer 12e422a0 2014-04-21T16:08:05 Some doc and examples/diff.c changes I was playing with "git diff-index" and wanted to be able to emulate that behavior a little more closely with the diff example. Also, I wanted to play with running `git_diff_tree_to_workdir` directly even though core Git doesn't exactly have the equivalent, so I added a command line option for that and tweaked some other things in the example code. This changes a minor output thing in that the "raw" print helper function will no longer add ellipses (...) if the OID is not actually abbreviated.
Vicent Marti a32d684f 2014-04-22T15:07:18 Merge pull request #2282 from libgit2/cmn/remote-easier-bind A few niceties for binding authors
Carlos Martín Nieto bc0a6198 2014-04-19T15:52:58 transports: allow the creds callback to say it doesn't exist Allow the credentials callback to return GIT_PASSTHROUGH to make the transports code behave as though none was set. This should make it easier for bindings to behave closer to the C code when there is no credentials callback set at their level.
Carlos Martín Nieto 2efd7df6 2014-04-19T15:34:12 remote: provide read access to the callback structure This should make it easier for bindings to dynamically override their own callbacks.
Vicent Marti dac95e4a 2014-04-22T11:04:35 Merge pull request #2287 from libgit2/rb/moar-coverity-fixes Fix some issues from the last Coverity scan
Vicent Marti 2e609e29 2014-04-22T11:03:42 Merge pull request #2286 from libgit2/rb/fix-reset-staged-delete Fix reset for staged deletes
Edward Thomson 65477db1 2014-04-21T23:32:31 Handle win32 reparse points properly
Russell Belfer 17ef678c 2014-04-21T11:55:57 Fix some coverity-found issues
Russell Belfer bd101a7e 2014-04-21T11:54:54 Fix reset for staged deletes
Jacques Germishuys f70cfd34 2014-04-21T17:49:38 Verify update_tips callbacks in push test cases
Russell Belfer 28750a7d 2014-04-21T09:50:43 Merge pull request #2275 from jacquesg/apple-warning Check for compiler flag support instead of checking for a platform
Jacques Germishuys 321d377a 2014-04-21T17:02:05 Fire update_tips callback also for pushes.
Carlos Martín Nieto 78399310 2014-04-21T16:38:52 attrcache: fix use-after-free Reported by coverity.
Jacques Germishuys 8b686b31 2014-04-21T15:25:19 Correct argument order of git__calloc()
Jacques Germishuys be6996b7 2014-04-21T15:25:02 It is safe to free() a NULL pointer
Carlos Martín Nieto a15d3537 2014-04-21T15:48:05 sysdir: free the path if we cannot find the file Returning an error cleared the buf, but this operation does not free the memory associated with it. Use git_buf_free() instead.
Jacques Germishuys 48e60ae7 2014-04-21T11:23:29 Don't redefine the same callback types, their signatures may change
Jacques Germishuys 98020d3a 2014-04-21T10:55:37 Rename progress callback to sideband_progress
Jacques Germishuys 4f62163e 2014-04-20T22:06:05 Check the return codes of remote callbacks. The user may have requested that the operation be cancelled.
Jacques Germishuys 9effa2fb 2014-04-20T19:19:13 Fire progress callbacks also for pushes. It's not very useful to only know that a pre-receive hook has declined a push, you probably want to know why.
Philip Kelley c2c81615 2014-04-19T18:05:31 Win32: UTF-8 <-> WCHAR conversion overhaul
Jacques Germishuys 5c8d5eac 2014-04-19T23:07:50 Introduce AddCFlagIfSupported CMake macro
Vicent Marti bfc50f83 2014-04-19T18:59:09 Merge pull request #2273 from jacquesg/ssh-interactive Add support for SSH keyboard-interactive authentication
Vicent Marti 7b0f8ba9 2014-04-19T13:05:32 Merge pull request #2279 from libgit2/rb/moar-eegnöre-fîxés Fix several ignore and attribute file behavior bugs
Russell Belfer ac16bd0a 2014-04-18T15:45:59 Minor fixes Only apply LEADING_DIR pattern munging to patterns in ignore and attribute files, not to pathspecs used to select files to operate on. Also, allow internal macro definitions to be evaluated before loading all external ones (important so that external ones can make use of internal `binary` definition).
Russell Belfer 916fcbd6 2014-04-18T14:42:40 Fix ignore difference from git with trailing /* Ignore patterns that ended with a trailing '/*' were still needing to match against another actual '/' character in the full path. This is not the same behavior as core Git. Instead, we strip a trailing '/*' off of any patterns that were matching and just take it to imply the FNM_LEADING_DIR behavior.
Russell Belfer e3a2a04c 2014-04-18T14:29:58 Preload attribute files that may contain macros There was a latent bug where files that use macro definitions could be parsed before the macro definitions were loaded. Because of attribute file caching, preloading files that are going to be used doesn't add a significant amount of overhead, so let's always preload any files that could contain macros before we assemble the actual vector of files to scan for attributes.
Jacques Germishuys a622ff17 2014-04-18T20:05:28 Only zero sensitive information on destruction (and memory actually allocated by us)
Russell Belfer 50e46d60 2014-04-18T10:58:01 Cleanup tests with helper functions
Russell Belfer 6a0956e5 2014-04-18T10:32:35 Pop ignore only if whole relative path matches When traversing the directory structure, the iterator pushes and pops ignore files using a vector. Some directories don't have ignore files, so it uses a path comparison to decide when it is right to actually pop the last ignore file. This was only comparing directory suffixes, though, so a subdirectory with the same name as a parent could result in the parent's .gitignore being popped off the list ignores too early. This changes the logic to compare the entire relative path of the ignore file.
Jacques Germishuys 364ef528 2014-04-18T19:13:18 Only disable deprecation warnings on Apple for OpenSSL
Jacques Germishuys c6cd3f8b 2014-04-18T18:32:06 Use CHECK_C_COMPILER_FLAG to determine if the compiler supports a flag This simplifies platform/compiler dependent checks where we optionally enable features or disable warnings.
Jacques Germishuys 48ce93e0 2014-04-18T18:58:57 Fix inconsistent use of lower-case and upper-case names for macros
Russell Belfer 386777fd 2014-04-18T09:26:38 Merge pull request #2213 from ethomson/safecrlf Introduce core.safecrlf handling
Jacques Germishuys 043112dc 2014-04-18T17:57:39 Replace void * with proper callback types
Jacques Germishuys 8ec0a552 2014-04-18T00:49:07 Make git_cred_ssh_custom_new() naming more consistent
Jacques Germishuys 478408c0 2014-04-17T23:03:44 Introduce git_cred_ssh_interactive_new() This allows for keyboard-interactive based SSH authentication
Vicent Marti 3c69bebc 2014-04-18T17:47:36 Merge pull request #2274 from libgit2/cmn/ssh-expect-username cred: tighten username rules
Carlos Martín Nieto bd270b70 2014-04-18T17:08:10 cred: tighten username rules The ssh-specific credentials allow the username to be missing. The idea being that the ssh transport will then use the username provided in the url, if it's available. There are two main issues with this. The credential callback already knows what username was provided by the url and needs to figure out whether it wants to ask the user for it or it can reuse it, so passing NULL as the username means the credential callback is suspicious. The username provided in the url is not in fact used by the transport. The only time it even considers it is for the user/pass credential, which asserts the existence of a username in its constructor. For the ssh-specific ones, it passes in the username stored in the credential, which is NULL. The libssh2 macro we use runs strlen() against this value (which is no different from what we would be doing ourselves), so we then crash. As the documentation doesn't suggest to leave out the username, assert the need for a username in the code, which removes this buggy behavior and removes implicit state. git_cred_has_username() becomes a blacklist of credential types that do not have a username. The only one at the moment is the 'default' one, which is meant to call up some Microsoft magic.
Vicent Marti 28fd7206 2014-04-18T12:33:19 Merge pull request #2108 from libgit2/rb/threadsafe-index-iterator Make index iterator thread safe
Carlos Martín Nieto 2bed3553 2014-04-18T00:34:04 cherry-pick: terminate the commit id string We treat this as a NUL-terminated string, so make sure that we add the terminator.
Russell Belfer 83038272 2014-04-17T14:35:29 Some memory leak fixes
Russell Belfer 823c0e9c 2014-04-17T11:53:13 Fix broken logic for attr cache invalidation The checks to see if files were out of date in the attibute cache was wrong because the cache-breaker data wasn't getting stored correctly. Additionally, when the cache-breaker triggered, the old file data was being leaked.
Russell Belfer e6e8530a 2014-04-14T12:31:17 Lock attribute file while reparsing data I don't love this approach, but achieving thread-safety for attribute and ignore data while reloading files would require a larger rewrite in order to avoid this. If an attribute or ignore file is out of date, this holds a lock on the file while we are reloading the data so that another thread won't try to reload the data at the same time.
Russell Belfer ea642d61 2014-04-14T12:29:27 Fix race checking for existing index items In the threading tests, I was still seeing a race condition where the same item could end up being inserted multiple times into the index. Preserving the sorted-ness of the index outside of the `index_insert` call fixes the issue.
Russell Belfer 2e9d813b 2014-04-11T12:12:47 Fix tests with new attr cache code
Russell Belfer 7d490872 2014-04-10T22:31:01 Attribute file cache refactor This is a big refactoring of the attribute file cache to be a bit simpler which in turn makes it easier to enforce a lock around any updates to the cache so that it can be used in a threaded env. Tons of changes to the attributes and ignores code.
Russell Belfer 1fa17b5c 2014-03-14T22:01:30 Minor tree cache speedups While I was looking at the conflict cleanup code, I looked over at the tree cache code, since we clear the tree cache for each entry that gets removed and there is some redundancy there. I made some small tweaks to avoid extra calls to strchr and strlen in a few circumstances.
Russell Belfer aba6b5ed 2014-03-14T21:59:26 Fix leak in git_index_conflict_cleanup I introduced a leak into conflict cleanup by removing items from inside the git_vector_remove_matching call. This simplifies the code to just use one common way for the two conflict cleanup APIs. When an index has an active snapshot, removing an item can cause an error (inserting into the deferred deletion vector), so I made the git_index_conflict_cleanup API return an error code. I felt like this wasn't so bad since it is just like the other APIs. I fixed up a couple of comments while I was changing the header.
Russell Belfer cef170ab 2014-03-14T16:45:46 Fix leak when using push and pop with ignores The iterator pushes and pops ignores incrementally onto a list as it traverses the directory structure so that it doesn't have to constantly recheck which ignore files apply. With the new ref counting, it wasn't decrementing the refcount on the ignores that it removed from the vector.
Russell Belfer b8777615 2014-03-14T15:37:42 Fix refcount issues with mutex protected ignores Some ignore files were not being freed from the cache.
Russell Belfer 3816debc 2014-03-14T14:51:04 Fix threading tests when threads disabled
Russell Belfer 52bb0476 2014-03-14T13:53:15 Clean up index snapshot function naming Clear up some of the various "find" functions and the snapshot API naming to be things I like more.
Russell Belfer 8a2834d3 2014-03-14T13:20:51 Index locking and entry allocation changes This makes the lock management on the index a little bit broader, having a number of routines hold the lock across looking up the item to be modified and actually making the modification. Still not true thread safety, but more pure index modifications are now safe which allows the simple cases (such as starting up a diff while index modifications are underway) safe enough to get the snapshot without hitting allocation problems. As part of this, I simplified the allocation of index entries to use a flex array and just put the path at the end of the index entry. This makes every entry self-contained and makes it a little easier to feel sure that pointers to strings aren't being accidentally copied and freed while other references are still being held.
Russell Belfer 40ed4990 2014-02-11T14:45:37 Add diff threading tests and attr file cache locks This adds a basic test of doing simultaneous diffs on multiple threads and adds basic locking for the attr file cache because that was the immediate problem that arose from these tests.
Russell Belfer 3b4c401a 2014-02-10T13:20:08 Decouple index iterator sort from index This makes the index iterator honor the GIT_ITERATOR_IGNORE_CASE and GIT_ITERATOR_DONT_IGNORE_CASE flags without modifying the index data itself. To take advantage of this, I had to export a number of the internal index entry comparison functions. I also wrote some new tests to exercise the capability.
Russell Belfer dac16048 2014-02-08T16:42:26 Add mutex around index entries changes This surrounds any function that mutates the entries vector with a mutex so it can be safely snapshotted.
Russell Belfer 54edbb98 2014-02-07T16:48:27 Add index snapshot and use it for iterator
Russell Belfer 27e54bcf 2014-02-07T14:17:19 Add public diff print helpers The usefulness of these helpers came up for me while debugging some of the iterator changes that I was making, so since they have also been requested (albeit indirectly) I thought I'd include them.
Russell Belfer 3dbee456 2014-02-07T14:10:35 Some index internals refactoring Again, laying groundwork for some index iterator changes, this contains a bunch of code refactorings for index internals that should make it easier down the line to add locking around index modifications. Also this removes the redundant prefix_position function and fixes some potential memory leaks.
Russell Belfer c67fd4c9 2014-02-07T11:20:36 Some vector utility tweaks This is just laying some groundwork for internal index changes that I'm working on.
Vicent Marti c5cacc4e 2014-04-16T19:09:35 Merge pull request #2261 from jacquesg/format-patch Support for format-patch
Vicent Marti 3b2d14a7 2014-04-16T18:51:38 Merge pull request #2270 from csware/fix_git_branch_t_enum Add GIT_BRANCH_LOCAL_AND_REMOTE to git_branch_t enum
Sven Strickroth fa13ee2d 2014-04-16T16:59:43 Add GIT_BRANCH_ALL to git_branch_t enum git_branch_t is an enum so requesting GIT_BRANCH_LOCAL | GIT_BRANCH_REMOTE is not possible as it is not a member of the enum (at least VS2013 C++ complains about it). This fixes a regression introduced in commit a667ca8298193b3103c1dbdcb1f6c527e6e99eb2 (PR #1946). Signed-off-by: Sven Strickroth <email@cs-ware.de>
Vicent Marti 37ab5ecc 2014-04-16T10:51:25 Merge pull request #2269 from libgit2/rb/fix-leading-slash-ignores Fix core.excludesfile named .gitignore
Vicent Marti 0f7aa47d 2014-04-15T20:26:23 Merge pull request #2235 from jacquesg/cherry-pick Add cherry pick support
Jacques Germishuys 39206ca2 2014-04-14T17:12:56 Added a test case for formatting a binary patch e-mail