src


Log

Author Commit Date CI Message
Carlos Martín Nieto e1f434f8 2015-06-24T23:33:46 Merge pull request #3183 from libgit2/cmn/curl-stream Implement a cURL stream
Carlos Martín Nieto 9d5efab8 2015-06-24T21:13:23 Merge pull request #3254 from ethomson/diff-binary-patch Handle binary DIFFABLEness properly
Carlos Martín Nieto c2f274c6 2015-06-24T19:47:34 Merge pull request #3250 from ethomson/stash Stash workdir correctly when added in the index, modified in the workdir
Edward Thomson 54077091 2015-06-24T12:06:41 diff: determine DIFFABLE-ness for binaries Always set `GIT_DIFF_PATCH_DIFFABLE` for all files, regardless of binary-ness, so that the binary callback is invoked to either show the binary contents, or just print the standard "Binary files differ" message. We may need to do deeper inspection for binary files where we have avoided loading the contents into a file map.
Carlos Martín Nieto 58ca8c7e 2015-06-24T17:27:16 SecureTransport: use the curl stream if available If the libcurl stream is available, use that as the underlying stream instead of the socket stream. This allows us to set a proxy for HTTPS connections.
Carlos Martín Nieto f97d5d09 2015-06-11T16:54:48 http: ask for the curl stream for non-encrypted connections The TLS streams talk over the curl stream themselves, so we don't need to ask for it explicitly. Do so in the case of the non-encrypted one so we can still make use proxies in that case.
Carlos Martín Nieto e247649d 2015-06-11T16:50:44 openssl: use the curl stream if available When linking against libcurl, use it as the underlying transport instead of straight sockets. We can't quite just give over the file descriptor, as curl puts it into non-blocking mode, so we build a custom BIO so OpenSSL sends the data through our stream, be it the socket or curl streams.
Carlos Martín Nieto cdee630f 2015-06-09T19:07:58 curl: extract certificate information The information is exposed by curl for some crypto libraries in the form of name:content strings. We can't do much more than return this information.
Carlos Martín Nieto 8762d721 2015-06-07T14:51:10 http: set the proxy if the stream supports it Of the built-in ones, only cURL support it, but there's no reason a user-provided stream wouldn't support it.
Carlos Martín Nieto 1376e784 2015-06-07T14:42:13 stream: add support for setting a proxy If the stream claims to support this feature, we can let the transport set the proxy. We also set HTTPPROXYTUNNEL option so curl can create a tunnel through the proxy which lets us create our own TLS session (if needed).
Carlos Martín Nieto 8443f492 2015-06-11T16:57:04 curl: remove the encrypted param to the constructor We do not want libcurl to perform the TLS negotiation for us, so we don't need to pass this option.
Carlos Martín Nieto 8dea1c21 2015-06-05T11:02:11 Implement a curl stream cURL has a mode in which it acts a lot like our streams, providing send and recv functions and taking care of the TLS and proxy setup for us. Implement a new stream which uses libcurl instead of raw sockets or the TLS libraries directly. This version does not support reporting certificates or proxies yet.
Pierre-Olivier Latour 6a8f3fa8 2015-06-23T20:59:03 Fixed invalid error handling in git_repository_open_ext()
Edward Thomson cc605e73 2015-06-23T23:52:03 Merge pull request #3222 from git-up/conflicted Fixed GIT_DELTA_CONFLICTED not returned in some cases
Edward Thomson bd670abd 2015-06-23T23:30:58 Merge pull request #3226 from libgit2/cmn/racy-diff-again racy-git, the missing link
Edward Thomson 90177111 2015-06-23T16:27:33 stash: save the workdir file when deleted in index When stashing the workdir tree, examine the index as well. Using a mechanism similar to `git_diff_tree_to_workdir_with_index` allows us to determine that a file was added in the index and subsequently modified in the working directory. Without examining the index, we would erroneously believe that this file was untracked and fail to include it in the working directory tree. Use a slightly modified `git_diff_tree_to_workdir_with_index` in order to avoid some of the behavior custom to `git diff`. In particular, be sure to include the working directory side of a file when it was deleted in the index.
Edward Thomson 5ef43d41 2015-06-23T10:29:59 git_diff__merge: allow pluggable diff merges
Edward Thomson 83ba5e36 2015-06-22T18:43:13 diff_tform: remove reversed copy of delta merger Drop `git_diff__merge_like_cgit_reversed`, since it's a copy and paste mess of slightly incompatible changes.
Carlos Martín Nieto 16c73d38 2015-06-23T20:44:27 repository: check the format version This is something we do on re-init but not when opening a repository. This hasn't particularly mattered up to now as the version has been 0 ever since the first release of git, but the times, they're a-changing and we will soon see version 1 in the wild. We need to make sure we don't open those.
Carlos Martín Nieto 99e11cdd 2015-06-23T20:43:49 repository: don't error out if there is no version git will assume the repository format version is 0 if the value is not there. Do the same.
Pierre-Olivier Latour 8d8a2eef 2015-06-15T11:14:40 Fixed GIT_DELTA_CONFLICTED not returned in some cases If an index entry for a file that is not in HEAD is in conflicted state, when diffing HEAD with the index, the status field of the corresponding git_diff_delta was incorrectly reported as GIT_DELTA_ADDED instead of GIT_DELTA_CONFLICTED. This was due to handle_unmatched_new_item() initially setting the status to GIT_DELTA_CONFLICTED but then overriding it later with GIT_DELTA_ADDED.
Pierre-Olivier Latour cb63e7e8 2015-06-17T08:55:09 Explicitly handle GIT_DELTA_CONFLICTED in git_diff_merge() This fixes a bug where if a file was in conflicted state in either diff, it would not always remain in conflicted state in the merged diff.
Edward Thomson 146d0d08 2015-06-09T00:42:28 crlf: give Unix the glory of autocrlf=true Perform LF->CRLF for core.autocrlf=true on non-Win32 because core git does.
Edward Thomson 8293c8f9 2015-06-08T13:51:28 git_buf_text_lf_to_crlf: allow mixed line endings Allow files to have mixed line endings instead of skipping processing on them.
Edward Thomson 47e9a6cb 2015-06-08T15:58:54 crlf: use statistics to control to workdir filter Use statistics (like core git) to control the behavior of the to workdir CRLF filter.
Edward Thomson 0b6ed4f9 2015-06-22T11:24:20 Merge pull request #3240 from libgit2/cmn/commit-header-field commit: allow retrieving an arbitrary header field
Carlos Martín Nieto a3f42fe8 2015-06-22T15:32:29 commit: allow retrieving an arbitrary header field This allows the user to look up fields which we don't parse in libgit2, and allows them to access gpgsig or mergetag fields if they wish to check the signature.
Carlos Martín Nieto 74975846 2015-06-18T14:22:10 index: check racily clean entries more thoroughly When an entry has a racy timestamp, we need to check whether the file itself has changed since we put its entry in the index. Only then do we smudge the size field to force a check the next time around.
Carlos Martín Nieto ff475375 2015-06-17T14:34:10 diff: check files with the same or newer timestamps When a file on the workdir has the same or a newer timestamp than the index, we need to perform a full check of the contents, as the update of the file may have happened just after we wrote the index. The iterator changes are such that we can reach inside the workdir iterator from the diff, though it may be better to have an accessor instead of moving these structs into the header.
Pierre-Olivier Latour e35b947b 2015-06-21T01:06:20 Write modified index in git_stash_apply() Same as with git_stash_save(), there's no reason not to write the index to disk since it has been modified.
Edward Thomson 96dd171e 2015-06-19T08:32:26 diff: preserve original mode in the index When updating the index during a diff, preserve the original mode, which prevents us from dropping the mode to what we have interpreted as on our system (eg, what the working directory claims it to be, which may be a lie on some systems.)
Edward Thomson 883cb642 2015-06-20T14:05:02 Merge pull request #3236 from libgit2/cmn/index-checksum Use the checksum to check whether an index has been modified
Carlos Martín Nieto 624c949f 2015-06-20T16:17:28 index: make relative comparison use the checksum as well This is used by the submodule in order to figure out if the index has changed since it last read it. Using a timestamp is racy, so let's make it use the checksum, just like we now do for reloading the index itself.
Carlos Martín Nieto 5e947c91 2015-06-19T22:05:08 index: use the checksum to check whether it's been modified We currently use a timetamp to check whether an index file has been modified since we last read it, but this is racy. If two updates happen in the same second and we read after the first one, we won't detect the second one. Instead read the SHA-1 checksum of the file, which are its last 20 bytes which gives us a sure-fire way to detect whether the file has changed since we last read it. As we're now keeping track of it, expose an accessor to this data.
Pierre-Olivier Latour 85a5e8eb 2015-06-17T09:00:23 Fixed Xcode 6.1 build warnings
Carlos Martín Nieto a56db992 2015-06-17T08:15:49 Merge pull request #3219 from libgit2/cmn/racy-diff Zero out racily-clean entries' file_size
Edward Thomson 892abf93 2015-06-16T17:23:12 checkout: allow workdir to contain checkout target When checking out some file 'foo' that has been modified in the working directory, allow the checkout to proceed (do not conflict) if 'foo' is identical to the target of the checkout.
Edward Thomson 121c3171 2015-06-16T15:18:04 Introduce p_utimes and p_futimes Provide functionality to set the time on a filesystem entry, using utimes or futimes on POSIX type systems or SetFileTime on Win32.
Edward Thomson 5f83758f 2015-06-16T10:40:46 Merge pull request #3209 from libgit2/cmn/double-author commit: ignore multiple author fields
Carlos Martín Nieto 47a40d1d 2015-06-16T12:39:11 remote: return EINVALIDSPEC when given an empty URL This is what we used to return in the settter and there's tests in bindings which ask for this. There's no particular reason to stop doing so.
Carlos Martín Nieto aeb2b991 2015-06-16T09:20:36 Merge pull request #3221 from git-up/build_warnings Fixed Xcode 6.1 build warnings
Carlos Martín Nieto c4e6ab5f 2015-06-15T14:32:08 crlf: tick the index forward to work around racy-git behaviour In order to avoid racy-git, we zero out the file size for entries with the same timestamp as the index (or during the initial checkout). This is the case in a couple of crlf tests, as the code is fast enough to do everything in the same second. As we know that we do not perform the modification just after writing out the index, which is what this is designed to work around, tick the mtime of the index file such that it doesn't agree with the files anymore, and we do not zero out these entries.
Carlos Martín Nieto 316b820b 2015-06-15T09:55:40 index: zero the size of racily-clean entries If a file entry has the same timestamp as the index itself, it is considered racily-clean, as it may have been modified after the index was written, but during the same second. We take extra steps to check the contents, but this is just one part of avoiding races. For files which do have changes but have not been updated in the index, updating the on-disk index means updating its timestamp, which means we would no longer recognise these entries as racy and we would trust the timestamp to tell us whether they have changed. In order to work around this, git zeroes out the file-size field in entries with the same timestamp as the index in order to force the next diff to check the contents. Do so in libgit2 as well.
Edward Thomson b93dcd4c 2015-06-15T17:10:35 Merge pull request #3216 from dprofeta/fixTransactionVisibility Fix visibility of transaction symbol
Pierre-Olivier Latour 0f4d9c03 2015-06-15T09:52:40 Fixed Xcode 6.1 build warnings
Carlos Martín Nieto 25bd0aaf 2015-06-15T13:28:08 path: remove unnecessary readdir_r usage Arguably all uses of readdir_r are unnecessary, but in this case especially so, as the directory handle only exists within this function, so we don't race with anybody.
Carlos Martín Nieto 2665fefa 2015-06-15T10:20:58 Merge pull request #3171 from libgit2/cmn/link-fallback clone: fall back to copying when linking does not work
Logan Collins b224c388 2015-05-07T14:21:25 Fix in stransport_stream.c for usage of SecCopyErrorMessageString(), which is unavailable to iOS targets.
Carlos Martín Nieto d4723c89 2015-06-15T08:17:45 Merge pull request #3177 from ethomson/binary_diff Binary diffs: store deltas in the diff structure, include binary data in diff callbacks
Carlos Martín Nieto f2dec481 2015-06-12T18:35:18 Merge pull request #3215 from jeffhostetler/windows_leak_diriter Fix memory leak on windows in diriter.
Damien PROFETA 5c757327 2015-06-12T18:14:32 Fix visibility of transaction symbol Transaction.c did not include the visibility definition of its symbol (that are in git2/transaction.h) and so was by default hidden.
Jeff Hostetler 95639dbb 2015-06-12T08:50:48 Fix memory leak on windows in diriter.
Edward Thomson 3208df37 2015-06-02T18:28:06 patch: include diff options on blob->blob diffs
Edward Thomson 8147b1af 2015-05-25T20:03:59 diff: introduce binary diff callbacks Introduce a new binary diff callback to provide the actual binary delta contents to callers. Create this data from the diff contents (instead of directly from the ODB) to support binary diffs including the workdir, not just things coming out of the ODB.
Pierre-Olivier Latour 6d0a0aca 2015-06-11T23:20:28 Fixed some Secure Transport issues on OS X The read and write callbacks passed to SSLSetIOFuncs() have been rewritten to match the implementation used on opensource.apple.com and other open source projects like VLC. This change also fixes a bug where the read callback could get into an infinite loop when 0 bytes were read.
Carlos Martín Nieto 65d69fe8 2015-06-11T08:24:58 commit: ignore multiple author fields Some tools create multiple author fields. git is rather lax when parsing them, although fsck does complain about them. This means that they exist in the wild. As it's not too taxing to check for them, and there shouldn't be a noticeable slowdown when dealing with correct commits, add logic to skip over these extra fields when parsing the commit.
Carlos Martín Nieto fa934fab 2015-06-11T07:17:34 Merge pull request #3205 from ethomson/crlf_query Introduce `git_filter_list_contains`
Edward Thomson 3e8c5e45 2015-06-10T16:43:48 Merge pull request #3174 from libgit2/cmn/idx-fill-hole indexer: use lseek to extend the packfile
Edward Thomson 2eecc288 2015-06-10T14:43:49 Introduce `git_filter_list_contains` `git_filter_list_contains` can be used to query a filter list to determine if a given filter will be run.
Pierre-Olivier Latour 50456801 2015-06-10T10:09:10 Fixed handling of GIT_DELTA_CONFLICTED in git_diff_find_similar() git_diff_find_similar() now ignores git_diff_delta records with a status of GIT_DELTA_CONFLICTED, which fixes a crash due to assert() being hit.
Carlos Martín Nieto 0137aba5 2015-06-10T11:08:05 filter: close the descriptor in case of error When we hit an error writing to the next stream from a file, we jump to 'done' which currently skips over closing the file descriptor. Make sure to close the descriptor if it has been set to a valid value.
Carlos Martín Nieto 969d4b70 2015-06-10T10:59:56 object: correct the expected ID size in prefix lookup We take in a possibly partial ID by taking a length and working off of that to figure out whether to just look up the object or ask the backends for a prefix lookup. Unfortunately we've been checking the size against `GIT_OID_HEXSZ` which is the size of a *string* containing a full ID, whereas we need to check against the size we can have when it's a 20-byte array. Change the checks and comment to use `GIT_OID_RAWSZ` which is the correct size of a git_oid to have when full.
Carlos Martín Nieto 878293f7 2015-06-10T10:44:14 pack: use git_buf when building the index name The way we currently do it depends on the subtlety of strlen vs sizeof and the fact that .pack is one longer than .idx. Let's use a git_buf so we can express the manipulation we want much more clearly.
Carlos Martín Nieto ca2857d8 2015-06-10T10:30:08 merge: actually increment the counts, not the pointers `merge_diff_list_count_candidates()` takes pointers to the source and target counts, but when it comes time to increase them, we're increasing the pointer, rather than the value it's pointing to. Dereference the value to increase.
Carlos Martín Nieto 2d73075a 2015-06-10T10:23:08 cache: add a check for a failed allocation Rather minimal change, but it's the kind of thing we should do.
Edward Thomson a166466c 2015-06-09T17:06:28 Merge pull request #3198 from libgit2/cmn/coverity A few fixes from Coverity
Carlos Martín Nieto 02980bdc 2015-06-09T16:53:07 Initialize a few variables Coverity complains about the git_rawobj ones because we use a loop in which we keep remembering the old version, and we end up copying our object as the base, so we want to have the data pointer be NULL.
Carlos Martín Nieto 81be2f46 2015-06-09T16:01:29 ssh: move NULL check to the free function Let `ssh_stream_free()` take a NULL stream, as free functions should, and remove the check from the connection setup. The connection setup would not need the check anyhow, as we always have a stream by the time we reach this code.
Carlos Martín Nieto 82a7a24c 2015-06-08T15:22:01 Merge pull request #3165 from ethomson/downcase Downcase
Tim Hentenaar 20f8edb7 2015-06-04T02:22:10 global: Ensure we free our SSL context.
Carlos Martín Nieto b6011e29 2015-06-07T15:10:28 Merge pull request #3185 from libgit2/cmn/foreach-cancel-loose path: error out if the callback returns an error
Carlos Martín Nieto fdb82dcd 2015-06-07T15:10:13 Merge pull request #3175 from git-up/build_warnings Fixed build warnings on Xcode 6.1
Carlos Martín Nieto 2785544f 2015-06-07T10:45:39 remote: some error-handling issues from Coverity
Carlos Martín Nieto 8da44047 2015-06-06T03:55:28 path: error out if the callback returns an error When the callback returns an error, we should stop immediately. This broke when trying to make sure we pass specific errors up the chain. This broke cancelling out of the loose backend's foreach.
Pierre-Olivier Latour 9f3c18e2 2015-06-02T08:36:15 Fixed build warnings on Xcode 6.1
Marius Ungureanu d71e3b25 2015-06-02T10:23:54 Change error when running out of ssh agent keys
Carlos Martín Nieto aa57231f 2015-06-02T10:25:22 indexer: use lseek to extend the packfile We've been using `p_ftruncate()` to extend the packfile in order to mmap it and write the new data into it. This works well in the general case, but as truncation does not allocate space in the filesystem, it must do so when we write data to it. The only way the OS has to indicate a failure to allocate space is via SIGBUS which means we tried to write outside the file. This will cause everyone to crash as they don't expect to handle this signal. Switch to using `p_lseek()` and `p_write()` to extend the file in a way which tells the filesystem to allocate the space for the missing data. We can then be sure that we have space to write into.
Carlos Martín Nieto 10940736 2015-06-01T22:15:11 clone: fall back to copying when linking does not work We use heuristics to make a decent guess at when we can save time and space by linking object files during a clone. Unfortunately checking the device id isn't enough, as those would be the same during e.g. a bind-mount, but the OS still does not allow us to link between mounts of the same filesystem. If we fail to perform the links, fall back to copying the contents into a new file as a last attempt.
Patrick Steinhardt ec0c4c40 2015-05-04T11:59:20 remote: apply insteadOf configuration. A remote's URLs are now modified according to the url.*.insteadOf and url.*.pushInsteadOf configurations. This allows a user to replace URL prefixes by setting the corresponding keys. E.g. "url.foo.insteadOf = bar" would replace the prefix "bar" with the new prefix "foo".
Edward Thomson 75a4636f 2015-05-29T16:56:38 git__tolower: a tolower() that isn't dumb Some brain damaged tolower() implementations appear to want to take the locale into account, and this may require taking some insanely aggressive lock on the locale and slowing down what should be the most trivial of trivial calls for people who just want to downcase ASCII.
Edward Thomson 006548da 2015-05-29T16:07:51 git__strcasecmp: treat input bytes as unsigned Treat input bytes as unsigned before doing arithmetic on them, lest we look at some non-ASCII byte (like a UTF-8 character) as a negative value and perform the comparison incorrectly.
Carlos Martín Nieto 2c8550f0 2015-05-29T19:38:11 Merge pull request #3157 from mgorny/ssh_memory_auth Support getting SSH keys from memory, pt. 2
Edward Thomson 885b94aa 2015-05-28T15:26:13 Rename GIT_EMERGECONFLICT to GIT_ECONFLICT We do not error on "merge conflicts"; on the contrary, merge conflicts are a normal part of merging. We only error on "checkout conflicts", where a change exists in the index or the working directory that would otherwise be overwritten by performing the checkout. This *may* happen during merge (after the production of the new index that we're going to checkout) but it could happen during any checkout.
Carlos Martín Nieto ff8d635a 2015-05-28T18:45:57 Merge pull request #3139 from ethomson/diff_conflicts Include conflicts when diffing
Edward Thomson fb92b48d 2015-05-28T10:13:07 Merge pull request #3149 from libgit2/cmn/upstream-matching-push Fill the pointers for matching refspecs
Carlos Martín Nieto 2b922832 2015-05-28T16:09:17 Merge pull request #3127 from libgit2/cmn/remote-fixups Tackle remote API issues from bindings
Edward Thomson 9b3e41f7 2015-05-19T18:29:15 index_add_all: remove conflicts when no wd file If there exists a conflict in the index, but no file in the working directory, this implies that the user wants to accept the resolution by removing the file. Thus, remove the conflict entry from the index, instead of trying to add a (nonexistent) file.
Edward Thomson 10549a2d 2015-05-19T18:26:04 Introduce `GIT_DIFF_FLAG_EXISTS` Mark the `old_file` and `new_file` sides of a delta with a new bit, `GIT_DIFF_FLAG_EXISTS`, that introduces that a particular side of the delta exists in the diff. This is useful for indicating whether a working directory item exists or not, in the presence of a conflict. Diff users may have previously used DELETED to determine this information.
Edward Thomson 253a05f7 2015-05-19T11:31:15 diff: prettify `maybe_modified` a little
Edward Thomson 9f545b9d 2015-05-19T11:23:59 introduce `git_index_entry_is_conflict` It's not always obvious the mapping between stage level and conflict-ness. More importantly, this can lead otherwise sane people to write constructs like `if (!git_index_entry_stage(entry))`, which (while technically correct) is unreadable. Provide a nice method to help avoid such messy thinking.
Edward Thomson 191e97a0 2015-05-18T18:15:17 diff conflicts: don't include incorrect ID Since a diff entry only concerns a single entry, zero the information for the index side of a conflict. (The index entry would otherwise erroneously include the lowest-stage index entry - generally the ancestor of a conflict.) Test that during status, the index side of the conflict is empty.
Edward Thomson 7877146f 2015-05-18T15:13:43 diff: for conflicts w/o workdir, blank nitem side Make sure that we provide a blanked nitem side when the item does not exist in the working directory.
Edward Thomson 7c948014 2015-05-14T14:00:29 diff/status: introduce conflicts When diffing against an index, return a new `GIT_DELTA_CONFLICTED` delta type for items that are conflicted. For a single file path, only one delta will be produced (despite the fact that there are multiple entries in the index). Index iterators now have the (optional) ability to return conflicts in the index. Prior to this change, they would be omitted, and callers (like diff) would omit conflicted index entries entirely.
Edward Thomson d67f270e 2015-05-14T13:30:29 index: validate mode of new conflicts
Edward Thomson 3ab5a659 2015-05-14T12:54:39 index: remove error message in non-error remove If `git_index_remove_bypath` does no work, and returns an OK error code, it should not set an error message.
Edward Thomson ecd60a56 2015-05-14T11:52:48 conflicts: when adding conflicts, remove staged When adding a conflict for some path, remove the staged entry. Otherwise, an illegal index (with both stage 0 and high-stage entries) would result.
Edward Thomson 1b6c26db 2015-05-13T17:47:26 diff: wrap the iterator functions Wrap the iterator current / advance functions so that we can extend them, but also handle GIT_ITEROVER cases in the iterator funcs instead of the callers.
Edward Thomson aa3af01d 2015-05-13T15:52:21 index iterator: optionally include conflicts
Carlos Martín Nieto 9566ce43 2015-05-18T14:42:35 remote: call the update_tips callback for opportunisitc updates These are updates, same as the rest, we should call this callback. As we are using the callback, let's make sure to skip unnecessary updates.
Carlos Martín Nieto c6e942fb 2015-05-17T15:19:22 remote: validate refspecs before adding to config When we moved from acting on the instance to acting on the configuration, we dropped the validation of the passed refspec, which can lead to writing an invalid refspec to the configuration. Bring that validation back.