Commit Graph

6575 Commits

Author SHA1 Message Date
Jacques Germishuys
f70cfd34f5 Verify update_tips callbacks in push test cases 2014-04-21 19:38:34 +02:00
Jacques Germishuys
321d377a6a Fire update_tips callback also for pushes. 2014-04-21 17:28:03 +02:00
Jacques Germishuys
8b686b318b Correct argument order of git__calloc() 2014-04-21 16:29:41 +02:00
Jacques Germishuys
be6996b792 It is safe to free() a NULL pointer 2014-04-21 16:29:41 +02:00
Jacques Germishuys
48e60ae75e Don't redefine the same callback types, their signatures may change 2014-04-21 11:28:49 +02:00
Jacques Germishuys
98020d3a73 Rename progress callback to sideband_progress 2014-04-21 10:55:37 +02:00
Jacques Germishuys
4f62163ead Check the return codes of remote callbacks.
The user may have requested that the operation be cancelled.
2014-04-21 10:24:16 +02:00
Jacques Germishuys
9effa2fb72 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.
2014-04-20 22:06:45 +02:00
Vicent Marti
bfc50f83f8 Merge pull request #2273 from jacquesg/ssh-interactive
Add support for SSH keyboard-interactive authentication
2014-04-19 18:59:09 +02:00
Vicent Marti
7b0f8ba9a8 Merge pull request #2279 from libgit2/rb/moar-eegnöre-fîxés
Fix several ignore and attribute file behavior bugs
2014-04-19 13:05:32 +02:00
Russell Belfer
ac16bd0a94 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).
2014-04-18 15:45:59 -07:00
Russell Belfer
916fcbd617 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.
2014-04-18 14:42:40 -07:00
Russell Belfer
e3a2a04cef 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.
2014-04-18 14:29:58 -07:00
Jacques Germishuys
a622ff17a1 Only zero sensitive information on destruction (and memory actually allocated by us) 2014-04-18 20:09:58 +02:00
Russell Belfer
50e46d6018 Cleanup tests with helper functions 2014-04-18 10:58:01 -07:00
Russell Belfer
6a0956e504 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.
2014-04-18 10:32:35 -07:00
Russell Belfer
386777fd0d Merge pull request #2213 from ethomson/safecrlf
Introduce core.safecrlf handling
2014-04-18 09:26:38 -07:00
Jacques Germishuys
043112dc1c Replace void * with proper callback types 2014-04-18 17:58:25 +02:00
Jacques Germishuys
8ec0a55273 Make git_cred_ssh_custom_new() naming more consistent 2014-04-18 17:58:25 +02:00
Jacques Germishuys
478408c010 Introduce git_cred_ssh_interactive_new()
This allows for keyboard-interactive based SSH authentication
2014-04-18 17:58:25 +02:00
Vicent Marti
3c69bebc1c Merge pull request #2274 from libgit2/cmn/ssh-expect-username
cred: tighten username rules
2014-04-18 17:47:36 +02:00
Carlos Martín Nieto
bd270b70f9 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.
2014-04-18 17:33:26 +02:00
Vicent Marti
28fd7206b1 Merge pull request #2108 from libgit2/rb/threadsafe-index-iterator
Make index iterator thread safe
2014-04-18 12:33:19 +02:00
Carlos Martín Nieto
2bed3553f4 cherry-pick: terminate the commit id string
We treat this as a NUL-terminated string, so make sure that we add the
terminator.
2014-04-18 00:34:04 +02:00
Russell Belfer
8303827226 Some memory leak fixes 2014-04-17 15:04:42 -07:00
Russell Belfer
823c0e9cc1 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.
2014-04-17 15:04:41 -07:00
Russell Belfer
e6e8530aa6 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.
2014-04-17 14:56:41 -07:00
Russell Belfer
ea642d61f9 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.
2014-04-17 14:56:41 -07:00
Russell Belfer
2e9d813bd6 Fix tests with new attr cache code 2014-04-17 14:56:41 -07:00
Russell Belfer
7d4908724f 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.
2014-04-17 14:56:41 -07:00
Russell Belfer
1fa17b5c92 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.
2014-04-17 14:43:46 -07:00
Russell Belfer
aba6b5edbd 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.
2014-04-17 14:43:46 -07:00
Russell Belfer
cef170abf2 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.
2014-04-17 14:43:46 -07:00
Russell Belfer
b87776151a Fix refcount issues with mutex protected ignores
Some ignore files were not being freed from the cache.
2014-04-17 14:43:46 -07:00
Russell Belfer
3816debc13 Fix threading tests when threads disabled 2014-04-17 14:43:46 -07:00
Russell Belfer
52bb0476a8 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.
2014-04-17 14:43:46 -07:00
Russell Belfer
8a2834d341 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.
2014-04-17 14:43:45 -07:00
Russell Belfer
40ed499039 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.
2014-04-17 14:43:45 -07:00
Russell Belfer
3b4c401a38 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.
2014-04-17 14:43:45 -07:00
Russell Belfer
dac160489b Add mutex around index entries changes
This surrounds any function that mutates the entries vector with
a mutex so it can be safely snapshotted.
2014-04-17 14:43:45 -07:00
Russell Belfer
54edbb9871 Add index snapshot and use it for iterator 2014-04-17 14:43:45 -07:00
Russell Belfer
27e54bcf82 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.
2014-04-17 14:43:45 -07:00
Russell Belfer
3dbee45656 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.
2014-04-17 14:43:45 -07:00
Russell Belfer
c67fd4c9d5 Some vector utility tweaks
This is just laying some groundwork for internal index changes
that I'm working on.
2014-04-17 14:43:45 -07:00
Vicent Marti
c5cacc4ec2 Merge pull request #2261 from jacquesg/format-patch
Support for format-patch
2014-04-16 19:09:35 +02:00
Vicent Marti
3b2d14a7b8 Merge pull request #2270 from csware/fix_git_branch_t_enum
Add GIT_BRANCH_LOCAL_AND_REMOTE to git_branch_t enum
2014-04-16 18:51:38 +02:00
Sven Strickroth
fa13ee2d7c 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 a667ca8298 (PR #1946).

Signed-off-by: Sven Strickroth <email@cs-ware.de>
2014-04-16 18:51:16 +02:00
Vicent Marti
37ab5ecc10 Merge pull request #2269 from libgit2/rb/fix-leading-slash-ignores
Fix core.excludesfile named .gitignore
2014-04-16 10:51:25 +02:00
Vicent Marti
0f7aa47dbd Merge pull request #2235 from jacquesg/cherry-pick
Add cherry pick support
2014-04-15 20:26:23 +02:00
Jacques Germishuys
39206ca256 Added a test case for formatting a binary patch e-mail 2014-04-15 17:22:17 +02:00