summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | cred: tighten username rulesCarlos Martín Nieto2014-04-182-50/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Merge pull request #2108 from libgit2/rb/threadsafe-index-iteratorVicent Marti2014-04-1832-1168/+1795
|\ \ | | | | | | Make index iterator thread safe
| * | Some memory leak fixesRussell Belfer2014-04-171-26/+28
| | |
| * | Fix broken logic for attr cache invalidationRussell Belfer2014-04-178-198/+243
| | | | | | | | | | | | | | | | | | | | | 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.
| * | Lock attribute file while reparsing dataRussell Belfer2014-04-173-17/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Fix race checking for existing index itemsRussell Belfer2014-04-171-20/+32
| | | | | | | | | | | | | | | | | | | | | 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.
| * | Fix tests with new attr cache codeRussell Belfer2014-04-174-57/+109
| | |
| * | Attribute file cache refactorRussell Belfer2014-04-1712-696/+818
| | | | | | | | | | | | | | | | | | | | | 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.
| * | Minor tree cache speedupsRussell Belfer2014-04-172-17/+11
| | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Fix leak in git_index_conflict_cleanupRussell Belfer2014-04-171-22/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Fix leak when using push and pop with ignoresRussell Belfer2014-04-171-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Fix refcount issues with mutex protected ignoresRussell Belfer2014-04-171-1/+15
| | | | | | | | | | | | Some ignore files were not being freed from the cache.
| * | Fix threading tests when threads disabledRussell Belfer2014-04-171-10/+10
| | |
| * | Clean up index snapshot function namingRussell Belfer2014-04-175-54/+63
| | | | | | | | | | | | | | | Clear up some of the various "find" functions and the snapshot API naming to be things I like more.
| * | Index locking and entry allocation changesRussell Belfer2014-04-174-169/+218
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Add diff threading tests and attr file cache locksRussell Belfer2014-04-1710-102/+173
| | | | | | | | | | | | | | | | | | 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.
| * | Decouple index iterator sort from indexRussell Belfer2014-04-178-100/+91
| | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Add mutex around index entries changesRussell Belfer2014-04-172-63/+169
| | | | | | | | | | | | | | | This surrounds any function that mutates the entries vector with a mutex so it can be safely snapshotted.
| * | Add index snapshot and use it for iteratorRussell Belfer2014-04-173-22/+67
| | |
| * | Add public diff print helpersRussell Belfer2014-04-171-2/+26
| | | | | | | | | | | | | | | | | | | | | 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.
| * | Some index internals refactoringRussell Belfer2014-04-174-172/+208
| | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | Some vector utility tweaksRussell Belfer2014-04-175-9/+41
| | | | | | | | | | | | | | | This is just laying some groundwork for internal index changes that I'm working on.
* | | cherry-pick: terminate the commit id stringCarlos Martín Nieto2014-04-181-1/+1
|/ / | | | | | | | | We treat this as a NUL-terminated string, so make sure that we add the terminator.
* | Merge pull request #2261 from jacquesg/format-patchVicent Marti2014-04-168-3/+621
|\ \ | | | | | | Support for format-patch
| * | Sanitize git_diff_format_email_options' summary parameterJacques Germishuys2014-04-151-1/+19
| | | | | | | | | | | | It will form part of the subject line and should thus be one line.
| * | Introduce git_diff_format_email and git_diff_commit_as_emailJacques Germishuys2014-04-152-0/+207
| | |
| * | Introduce git_diff_get_stats, git_diff_stats_files_changed, ↵Jacques Germishuys2014-04-151-0/+343
| | | | | | | | | | | | git_diff_stats_insertions, git_diff_stats_deletions and git_diff_stats_to_buf
| * | Fix const-correctness of git_patch_get_delta, git_patch_num_hunks, ↵Jacques Germishuys2014-04-111-3/+3
| | | | | | | | | | | | git_patch_num_lines_in_hunk
| * | Introduce git__date_rfc2822_fmt. Allows for RFC2822 date headersJacques Germishuys2014-04-112-0/+40
| | |
| * | Introduce git_buf_putcnJacques Germishuys2014-04-102-0/+10
| | | | | | | | | | | | Allows for inserting the same character n amount of times
* | | Merge pull request #2269 from libgit2/rb/fix-leading-slash-ignoresVicent Marti2014-04-162-18/+12
|\ \ \ | | | | | | | | Fix core.excludesfile named .gitignore
| * | | Fix core.excludesfile named .gitignorerb/fix-leading-slash-ignoresRussell Belfer2014-04-142-18/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | Merge pull request #2235 from jacquesg/cherry-pickVicent Marti2014-04-154-0/+275
|\ \ \ \ | |/ / / |/| | | Add cherry pick support
| * | | Capture conflict information in MERGE_MSG for revert and mergeJacques Germishuys2014-04-142-0/+2
| | | |
| * | | Added cherry-pick supportJacques Germishuys2014-04-141-0/+230
| | | |
| * | | Introduce git_merge__extract_conflict_pathsJacques Germishuys2014-04-142-0/+43
| | | |
* | | | Merge pull request #2264 from jacquesg/fix-warningsVicent Marti2014-04-141-1/+2
|\ \ \ \ | | | | | | | | | | Correct C90 warnings
| * | | | Correct C90 warningsJacques Germishuys2014-04-111-1/+2
| | |/ / | |/| |
* | | | Merge pull request #2262 from libgit2/rb/fix-ignore-popVicent Marti2014-04-142-1/+11
|\ \ \ \ | |/ / / |/| | | Fix bug popping ignore files during wd iteration
| * | | Fix bug popping ignore files during wd iterationRussell Belfer2014-04-102-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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).
* | | | Merge pull request #2259 from libgit2/vmg/state-cleanupVicent Marti2014-04-091-12/+23
|\ \ \ \ | | | | | | | | | | Rewrite `state-cleanup`
| * | | | Rewrite `git_repository__cleanup_files`vmg/state-cleanupVicent Marti2014-04-091-14/+20
| | | | |
| * | | | git_repository_state_cleanup() should remove rebase-merge/, rebase-apply/ ↵Jacques Germishuys2014-04-071-1/+6
| | |/ / | |/| | | | | | | | | | and BISECT_LOG
* | | | Merge pull request #2257 from libgit2/rb/fix-submodules-with-tracked-contentVicent Marti2014-04-091-1/+11
|\ \ \ \ | | | | | | | | | | Update treatment of submodule-like directories with tracked content in the parent
| * | | | Update submodules with parent-tracked contentrb/fix-submodules-with-tracked-contentRussell Belfer2014-04-081-1/+11
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | userdiff: update ada patternsjk/userdiff-ccJeff King2014-04-081-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the moral equivalent of git/git@39a87a29ce364ed3337e535adce5973731ba2968 from Adrian Johnson <ajohnson@redneon.com>.
* | | | userdiff: update C/C++ patternsJeff King2014-04-081-7/+5
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This pulls upstream changes from: git/git@8a2e8da367f7175465118510b474ad365161d6b1 git/git@abf8f9860248d8c213600974742f18dadaa8fbb5 git/git@407e07f2a6f55e605fda9e90cb622887269f68b5 all by Johannes Sixt <j6t@kdbg.org>.
* | | graph: handle not finding a merge base gracefullyCarlos Martín Nieto2014-04-081-1/+6
| | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge pull request #2256 from jacquesg/graph-descendantVicent Marti2014-04-081-1/+1
|\ \ \ | |_|/ |/| | Correct grouping of parentheses
| * | Correct grouping of parenthesesJacques Germishuys2014-04-081-1/+1
| |/ | | | | | | git_graph_descendant_of was returning the result of an assignment