src


Log

Author Commit Date CI Message
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
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.
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
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
Carlos Martín Nieto 78399310 2014-04-21T16:38:52 attrcache: fix use-after-free Reported by coverity.
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.
Philip Kelley c2c81615 2014-04-19T18:05:31 Win32: UTF-8 <-> WCHAR conversion overhaul
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 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.
Russell Belfer 386777fd 2014-04-18T09:26:38 Merge pull request #2213 from ethomson/safecrlf Introduce core.safecrlf handling
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
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 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 a56b418d 2014-04-11T22:57:15 Sanitize git_diff_format_email_options' summary parameter It will form part of the subject line and should thus be one line.
Jacques Germishuys d8cc1fb6 2014-04-11T19:15:15 Introduce git_diff_format_email and git_diff_commit_as_email
Jacques Germishuys 360314c9 2014-04-11T19:03:29 Introduce git_diff_get_stats, git_diff_stats_files_changed, git_diff_stats_insertions, git_diff_stats_deletions and git_diff_stats_to_buf
Russell Belfer a9528b8f 2014-04-14T15:59:48 Fix core.excludesfile named .gitignore Ignore rules with slashes in them are matched using FNM_PATHNAME and use the path to the .gitignore file from the root of the repository along with the path fragment (including slashes) in the ignore file itself. Unfortunately, the relative path to the .gitignore file was being applied to the global core.excludesfile if that was also named ".gitignore". This fixes that with more precise matching and includes test for ignore rules with leading slashes (which were the primary example of this being broken in the real world). This also backports an improvement to the file context logic from the threadsafe-iterators branch where we don't rely on mutating the key of the attribute file name to generate the context path.
Vicent Marti 289e31cd 2014-04-14T23:11:06 Merge pull request #2264 from jacquesg/fix-warnings Correct C90 warnings
Jacques Germishuys 6fefb7af 2014-04-13T19:53:35 Capture conflict information in MERGE_MSG for revert and merge
Jacques Germishuys 4d7b9939 2014-04-01T22:18:19 Added cherry-pick support
Jacques Germishuys 399f2b62 2014-04-07T20:15:45 Introduce git_merge__extract_conflict_paths
Vicent Marti 06d772d8 2014-04-14T14:49:01 Merge pull request #2262 from libgit2/rb/fix-ignore-pop Fix bug popping ignore files during wd iteration
Jacques Germishuys efaa342c 2014-04-11T22:07:49 Correct C90 warnings
Jacques Germishuys 7a28f268 2014-04-10T12:44:51 Fix const-correctness of git_patch_get_delta, git_patch_num_hunks, git_patch_num_lines_in_hunk
Jacques Germishuys 8e14b47f 2014-04-10T12:42:29 Introduce git__date_rfc2822_fmt. Allows for RFC2822 date headers
Russell Belfer 8f7bc646 2014-04-10T16:33:39 Fix bug popping ignore files during wd iteration There were a couple bugs in popping ignore files during iteration that could result in incorrect decisions be made and thus ignore files below the root either not being loaded correctly or not being popped at the right time. One bug was an off-by-one in comparing the path of the gitignore file with the path being exited during iteration. The second bug was not correctly truncating the path being tracked during traversal if there were no ignores on the list (i.e. when you have no .gitignore at the root, but do have some in contained directories).
Jacques Germishuys b3b36a68 2014-04-10T12:43:16 Introduce git_buf_putcn Allows for inserting the same character n amount of times
Vicent Marti bcc62293 2014-04-09T12:45:49 Merge pull request #2259 from libgit2/vmg/state-cleanup Rewrite `state-cleanup`
Vicent Marti c3dcbe84 2014-04-09T12:43:27 Rewrite `git_repository__cleanup_files`
Vicent Marti 361e9192 2014-04-09T12:09:30 Merge pull request #2257 from libgit2/rb/fix-submodules-with-tracked-content Update treatment of submodule-like directories with tracked content in the parent
Jeff King 9ce60fad 2014-04-08T18:40:05 userdiff: update ada patterns This is the moral equivalent of git/git@39a87a29ce364ed3337e535adce5973731ba2968 from Adrian Johnson <ajohnson@redneon.com>.
Jeff King 76b4e3d4 2014-04-08T18:41:39 userdiff: update C/C++ patterns This pulls upstream changes from: git/git@8a2e8da367f7175465118510b474ad365161d6b1 git/git@abf8f9860248d8c213600974742f18dadaa8fbb5 git/git@407e07f2a6f55e605fda9e90cb622887269f68b5 all by Johannes Sixt <j6t@kdbg.org>.
Russell Belfer eb7e17cc 2014-04-08T14:47:20 Update submodules with parent-tracked content This updates how libgit2 treats submodule-like directories that actually have tracked content inside of them. This is a strange corner case, but it seems that many people have abortive submodule setups and then just went ahead and added the files into the parent repository. In this case, we should just treat the submodule as if it was a normal directory. Libgit2 will still try to skip over real submodules and contained repositories that do not have tracked files inside them, but this adds some new handling for cases where the apparently submodule data is in conflict with the actual list of tracked files.
Carlos Martín Nieto ce2e8269 2014-04-08T16:52:20 graph: handle not finding a merge base gracefully git_merge_base() returns GIT_ENOTFOUND when it cannot find a merge base. graph_desdendant_of() returns a boolean value (barring any errors), so it needs to catch the NOTFOUND return value and convert it into false, as not merge base means it cannot be a descendant.
Vicent Marti 2795fb4d 2014-04-08T16:37:39 Merge pull request #2256 from jacquesg/graph-descendant Correct grouping of parentheses
Jacques Germishuys 56f8e06e 2014-04-08T15:46:45 Correct grouping of parentheses git_graph_descendant_of was returning the result of an assignment
Edward Thomson 7be1caf7 2014-04-07T21:41:36 Determine crlf safety by statistics, not literal reversibility
Edward Thomson 855c66de 2014-03-27T16:34:20 Introduce core.safecrlf handling
Russell Belfer 7167fd7e 2014-04-07T11:51:12 vmg is always right
Russell Belfer c813b345 2014-04-07T11:45:32 Fix bug with multiple iconv conversions in one dir The internal buffer in the `git_path_iconv_t` structure was not being reset before the calls to `iconv` were made to convert data, so if there were multiple decomposed Unicode paths in a single directory, paths after the first one were being appended to the first instead of treated as independent data.
Jacques Germishuys c0311295 2014-04-07T17:32:23 git_repository_state_cleanup() should remove rebase-merge/, rebase-apply/ and BISECT_LOG
Vicent Marti 6720eef9 2014-04-07T11:22:23 Merge pull request #2249 from libgit2/rb/starstar-fnmatch Add support for ** matches in ignores
Russell Belfer c7d96060 2014-04-06T11:20:22 Fix fnmatch comment to be clearer
Vicent Marti 52056db9 2014-04-06T16:22:29 Merge pull request #2250 from jacquesg/vector-leak Don't lose our elements when calling git_vector_set()
Jacques Germishuys 4998009a 2014-04-06T15:06:46 Don't lose our elements when calling git_vector_set()
Russell Belfer 2b6b85f1 2014-04-04T17:02:12 Add support for ** matches in ignores This is an experimental addition to add ** support to fnmatch pattern matching in libgit2. It needs more testing.
Vicent Marti 923c8400 2014-04-04T14:24:08 Merge pull request #2215 from libgit2/rb/submodule-cache-fixes Improve submodule cache management
Vicent Marti f34408a7 2014-04-04T14:23:07 Merge pull request #2211 from Yogu/retry-renaming-config Retry committing locked files on error
Russell Belfer eedeeb9e 2014-04-03T11:58:51 Test (and fix) the git_submodule_sync changes I wrote this stuff a while ago and forgot to write tests. Wanted to do so now to wrap up the PR and immediately found problems.
Russell Belfer 18cc7d28 2014-04-03T11:29:08 Minor code cleanup
Jan Melcher f2fb4bac 2014-04-02T23:55:21 git_submodule_resolve_url supports relative urls The base for the relative urls is determined as follows, with descending priority: - remote url of HEAD's remote tracking branch - remote "origin" - workdir This follows git.git behaviour
Jacques Germishuys 3b4ba278 2014-04-03T15:50:21 Const correctness!
Carlos Martín Nieto 67d4997a 2014-04-02T18:44:01 remote: mark branch for-merge even if we're unborn When the current branch is unborn, git will still mark the current branch's upstream for-merge if there is an upstream configuration. The only non-constrived case is cloning from an empty repository which then gains history. origin's master should be marked for-merge. In order to do this, we cannot use the high-level wrappers that expect a reference, as we may not have one. Move over to the internal ones that expect a reference name, which we do have.
Vicent Marti 64a862c2 2014-04-02T18:48:38 Merge pull request #2237 from mekishizufu/fix_return_value Fix submodule_is_config_only's return value
Jiri Pospisil 49653665 2014-04-02T18:21:41 checkout: Fix submodule_is_config_only's return value
Vicent Marti fe23860a 2014-04-02T17:45:25 Merge pull request #2230 from anuraggup/revwalk-merge-base No need to find merge base.
Russell Belfer ea1ca3c9 2014-04-01T21:30:52 Fix skipping content of contained repos When doing a diff for use in status, we should never show the content of a git repository contained inside another one. The logic to do this was looking for a .git directory and so when a gitlink plain .git file was used, it was failing to exclude the directory content.
Russell Belfer 8f4e5275 2014-04-01T16:46:25 More tests and fix submodule index refresh There was a little bug where the submodule cache thought that the index date was out of date even when it wasn't that was resulting in some extra scans of index data even when not needed. Mostly this commit adds a bunch of new tests including adding and removing submodules in the index and in the HEAD and seeing if we can automatically pick them up when refreshing.
Russell Belfer 4ece3e22 2014-04-01T12:19:11 Fix submodule accounting for name and path changes Wrote tests that try adding, removing, and updating the name of submodules which showed a number of problems with how we account for changes when incrementally updating the submodule info. Most of these issues didn't exist before because reloading would always blow away the old submodule data.
Carlos Martín Nieto f28e4c97 2014-04-01T20:17:49 refspec: git_refspec_parse() does not exist
Russell Belfer aa78c9ba 2014-04-01T10:22:51 Minor submodule cache locking improvements This improvement the management of the lock around submodule cache updates slightly, using the lock to make sure that foreach can safely make a snapshot of all existing submodules and making sure that git_submodule_add_setup also grabs a lock before inserting the new submodule. Cache initialization / refresh should already have been holding the lock correctly as it adds submodules.
Russell Belfer eeeb9654 2014-03-30T15:35:56 Reinstate efficient submodule reloading This makes it so that git_submodule_reload_all will actually only reload changed items unless the `force` flag is used.
Russell Belfer a4ccd2b0 2014-03-29T15:23:01 Use enums instead of bools for submodule options When forcing cache flushes or reload, etc., it is easier to keep track of intent using enums instead of plain bools. Also, this fixes a bug where the cache was not being properly refreshes by a git_submodule_reload_all.