summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* repository: introduce a convenience config snapshot methodcmn/config-snapshotCarlos Martín Nieto2014-05-077-30/+34
| | | | | | Accessing the repository's config and immediately taking a snapshot of it is a common operation, so let's provide a convenience function for it.
* config: share the strmap on snapshotCarlos Martín Nieto2014-04-181-54/+2
| | | | | | Now that our strmap is no longer modified but replaced, we can use the same strmap for the snapshot's values and it will be freed when we don't need it anymore.
* config: refcount the values mapCarlos Martín Nieto2014-04-181-43/+131
| | | | This is mostly groundwork to let us re-use the map in the snapshots.
* config: refresh on deleteCarlos Martín Nieto2014-04-182-54/+15
| | | | | | | | | When we delete an entry, we also want to refresh the configuration to catch any changes that happened externally. This allows us to simplify the logic, as we no longer need to delete these variables internally. The whole state will be refreshed and the deleted entries won't be there.
* config: document the how long the pointers are valid forCarlos Martín Nieto2014-04-181-1/+14
|
* config: refresh before reading a valueCarlos Martín Nieto2014-04-184-15/+16
| | | | | | | | | | With the isolation of complex reads, we can now try to refresh the on-disk file before reading a value from it. This changes the semantics a bit, as before we could be sure that a string we got from the configuration was valid until we wrote or refreshed. This is no longer the case, as a read can also invalidate the pointer.
* config: refresh the values on writeCarlos Martín Nieto2014-04-182-83/+18
| | | | | | When writing out, parse the resulting file instead of adding or replacing the value locally. This has the effect of reading external changes as well.
* config: use a snapshot for the iteratorCarlos Martín Nieto2014-04-181-3/+17
|
* config: split out the refresh stepCarlos Martín Nieto2014-04-181-14/+25
| | | | This will be used by the writing commands in a later step.
* config: make refresh atomicCarlos Martín Nieto2014-04-181-23/+16
| | | | | | | | Current code sets the active map to a new one and builds it whilst it's active. This is a race condition with someone else trying to access the same config. Instead, let's build up our new map and swap the active and new one.
* Use config snapshottingCarlos Martín Nieto2014-04-186-28/+49
| | | | | This way we can assume we have a consistent view of the config situation when we're looking up remote, branch, pack-objects, etc.
* config: implement config snapshottingCarlos Martín Nieto2014-04-185-67/+379
| | | | | | | | | | | In order to have consistent views of the config files for remotes, submodules et al. and a configuration that represents what is currently stored on-disk, we need a way to provide a view of the configuration that does not change. The goal here is to provide the snapshotting part by creating a read-only copy of the state of the configuration at a particular point in time, which does not change when a repository's main config changes.
* config: document current write behaviour in a testCarlos Martín Nieto2014-04-181-0/+27
| | | | | | | On set, we set/add the value written to the config's internal values, but we do not refresh old values. Document this in a test in preparation for the refresh changes.
* Merge pull request #2108 from libgit2/rb/threadsafe-index-iteratorVicent Marti2014-04-1850-1292/+2303
|\ | | | | Make index iterator thread safe
| * Some memory leak fixesRussell Belfer2014-04-174-30/+38
| |
| * Fix broken logic for attr cache invalidationRussell Belfer2014-04-1713-210/+265
| | | | | | | | | | | | | | 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-172-22/+40
| | | | | | | | | | | | | | 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-1718-756/+940
| | | | | | | | | | | | | | 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-172-29/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | 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-172-11/+12
| |
| * 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-176-202/+309
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-1713-140/+361
| | | | | | | | | | | | 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-179-107/+142
| | | | | | | | | | | | | | | | 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-173-24/+96
| | | | | | | | | | | | | | 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-175-176/+219
| | | | | | | | | | | | | | | | 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-177-33/+52
| | | | | | | | | | 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-16102-6/+1893
|\ | | | | Support for format-patch
| * Added a test case for formatting a binary patch e-mailJacques Germishuys2014-04-151-0/+43
| |
| * Sanitize git_diff_format_email_options' summary parameterJacques Germishuys2014-04-152-1/+87
| | | | | | | | 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-154-0/+740
| |
| * Introduce git_diff_get_stats, git_diff_stats_files_changed, ↵Jacques Germishuys2014-04-153-0/+856
| | | | | | | | git_diff_stats_insertions, git_diff_stats_deletions and git_diff_stats_to_buf
| * Added git_diff_stats test filesJacques Germishuys2014-04-1589-0/+72
| |
| * Fix const-correctness of git_patch_get_delta, git_patch_num_hunks, ↵Jacques Germishuys2014-04-112-6/+6
| | | | | | | | git_patch_num_lines_in_hunk
| * Added RFC2822 date format test casesJacques Germishuys2014-04-111-0/+40
| |
| * 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 #2270 from csware/fix_git_branch_t_enumVicent Marti2014-04-163-3/+4
|\ \ | | | | | | Add GIT_BRANCH_LOCAL_AND_REMOTE to git_branch_t enum
| * | Add GIT_BRANCH_ALL to git_branch_t enumSven Strickroth2014-04-163-3/+4
|/ / | | | | | | | | | | | | | | 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>
* | Merge pull request #2269 from libgit2/rb/fix-leading-slash-ignoresVicent Marti2014-04-166-30/+101
|\ \ | | | | | | Fix core.excludesfile named .gitignore
| * | Fix core.excludesfile named .gitignorerb/fix-leading-slash-ignoresRussell Belfer2014-04-146-30/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-15102-2/+1019
|\ \ \ | |/ / |/| | Add cherry pick support