Commit Graph

9892 Commits

Author SHA1 Message Date
Carlos Martín Nieto
9884dd613e SecureTransport: handle NULL trust on success
The `SSLCopyPeerTrust` call can succeed but fail to return a trust
object if it can't load the certificate chain and thus cannot check the
validity of a certificate. This can lead to us calling `CFRelease` on a
`NULL` trust object, causing a crash.

Handle this by returning ECERTIFICATE.
2016-08-05 18:40:37 +02:00
Carlos Martín Nieto
c550c92228 Merge pull request #3881 from pks-t/pks/fix-clar-suite-prefix-computation
clar: fix parsing of test suite prefixes
2016-08-05 18:24:28 +02:00
Edward Thomson
cba60b9b0e Merge pull request #3884 from pks-t/pks/patch-image-initialization
Patch image initialization
2016-08-05 09:10:58 -04:00
Patrick Steinhardt
274a727e0b apply: fix warning when initializing patch images 2016-08-05 10:57:42 +02:00
Patrick Steinhardt
844f5b2062 pool: provide macro to statically initialize git_pool 2016-08-05 10:57:13 +02:00
Edward Thomson
73dab7692e Merge pull request #3861 from libgit2/ethomson/refresh_objects
odb: freshen existing objects when writing
2016-08-04 16:16:16 -04:00
Edward Thomson
27051d4e31 odb: only freshen pack files every 2 seconds
Since writing multiple objects may all already exist in a single
packfile, avoid freshening that packfile repeatedly in a tight loop.
Instead, only freshen pack files every 2 seconds.
2016-08-04 15:12:04 -04:00
Edward Thomson
8f09a98e18 odb: freshen existing objects when writing
When writing an object, we calculate its OID and see if it exists in the
object database.  If it does, we need to freshen the file that contains
it.
2016-08-04 15:12:04 -04:00
Carlos Martín Nieto
d2794b0e37 Merge pull request #3877 from libgit2/ethomson/paths_init
sysdir: don't assume an empty dir is uninitialized
2016-08-04 20:49:50 +02:00
Edward Thomson
0d84de0208 Merge pull request #3869 from richardipsum/fix-outdated-comment
Fix outdated comment
2016-08-04 13:20:49 -04:00
Edward Thomson
78b500bf59 Merge pull request #3850 from wildart/custom-tls
Enable https transport for custom TLS streams
2016-08-04 12:45:19 -04:00
Edward Thomson
031d34b7e8 sysdir: use the standard init pattern
Don't try to determine when sysdirs are uninitialized.  Instead, simply
initialize them all at `git_libgit2_init` time and never try to
reinitialize, except when consumers explicitly call `git_sysdir_set`.

Looking at the buffer length is especially problematic, since there may
no appropriate path for that value.  (For example, the Windows-specific
programdata directory has no value on non-Windows machines.)

Previously we would continually trying to re-lookup these values,
which could get racy if two different threads are each calling
`git_sysdir_get` and trying to lookup / clear the value simultaneously.
2016-08-04 12:26:06 -04:00
Edward Thomson
da7f9feb5c Merge pull request #3879 from libgit2/ethomson/mwindow_init
mwindow: init mwindow files in git_libgit2_init
2016-08-04 11:51:06 -04:00
Edward Thomson
2381d9e490 mwindow: init mwindow files in git_libgit2_init 2016-08-04 10:30:48 -04:00
Patrick Steinhardt
1eee631d11 refspec: do not set empty rhs for fetch refspecs
According to git-fetch(1), "[t]he colon can be omitted when <dst>
is empty." So according to git, the refspec "refs/heads/master"
is the same as the refspec "refs/heads/master:" when fetching
changes. When trying to fetch from a remote with a trailing
colon with libgit2, though, the fetch actually fails while it
works when the trailing colon is left out. So obviously, libgit2
does _not_ treat these two refspec formats the same for fetches.

The problem results from parsing refspecs, where the resulting
refspec has its destination set to an empty string in the case of
a trailing colon and to a `NULL` pointer in the case of no
trailing colon. When passing this to our DWIM machinery, the
empty string gets translated to "refs/heads/", which is simply
wrong.

Fix the problem by having the parsing machinery treat both cases
the same for fetch refspecs.
2016-08-04 13:54:19 +02:00
Patrick Steinhardt
f2cab0a6fa clar: fix parsing of test suite prefixes
When passing in a specific suite which should be executed by clar
via `-stest::suite`, we try to parse this string and then include
all tests contained in this suite. This also includes all tests
in sub-suites, e.g. 'test::suite::foo'.

In the case where multiple suites start with the same _string_,
for example 'test::foo' and 'test::foobar', we fail to
distinguish this correctly. When passing in `-stest::foobar`,
we wrongly determine that 'test::foo' is a prefix and try to
execute all of its matching functions. But as no function
will now match 'test::foobar', we simply execute nothing.

To fix this, we instead have to check if the prefix is an actual
suite prefix as opposed to a simple string prefix. We do so by by
inspecting if the first two characters trailing the prefix are
our suite delimiters '::', and only consider the filter as
matching in this case.
2016-08-04 11:49:39 +02:00
Edward Thomson
baa87dfc50 Merge pull request #3880 from libgit2/ethomson/diff_file
git_diff_file: move `id_abbrev`
2016-08-03 22:00:21 -04:00
Edward Thomson
002c8e29a1 git_diff_file: move id_abbrev
Move `id_abbrev` to a more reasonable place where it packs more nicely
(before anybody starts using it).
2016-08-03 17:57:37 -04:00
Edward Thomson
152efee20b Merge pull request #3865 from libgit2/ethomson/leaks
Fix leaks, some warnings and an error
2016-08-02 18:43:12 -04:00
Edward Thomson
df87648ab8 crlf: set a safe crlf default 2016-07-24 16:10:30 -04:00
Edward Thomson
a37624ecc7 Merge pull request #3815 from pks-t/pks/coverity-model
Coverity user model
2016-07-24 16:05:17 -04:00
Edward Thomson
76cfdd4612 Merge pull request #3862 from novalis/dturner/do-not-die-on-missing-config
remote: Handle missing config values when deleting a remote
2016-07-24 15:51:13 -04:00
Edward Thomson
b118f6479d repository: don't cast to int for no reason
And give it a default so that some compilers don't (unnecessarily)
complain.
2016-07-24 15:49:19 -04:00
Edward Thomson
4aaae9354c index: cast to avoid warning 2016-07-24 15:49:19 -04:00
Edward Thomson
498d0801a1 tests: use a size_t 2016-07-24 15:49:19 -04:00
Edward Thomson
60e15ecd55 packbuilder: size_t all the things
After 1cd65991, we were passing a pointer to an `unsigned long` to
a function that now expected a pointer to a `size_t`.  These types
differ on 64-bit Windows, which means that we trash the stack.

Use `size_t`s in the packbuilder to avoid this.
2016-07-24 15:49:19 -04:00
Edward Thomson
581a4d3942 apply: safety check files that dont end with eol 2016-07-24 15:49:19 -04:00
Edward Thomson
c065f6a1d2 apply: check allocation properly 2016-07-24 15:49:19 -04:00
Edward Thomson
531be3e8c6 apply: compare preimage to image
Compare the preimage to the image; don't compare the preimage to itself.
2016-07-24 15:49:19 -04:00
Edward Thomson
e02f567641 repo::open: remove dead code, free buffers 2016-07-24 15:49:19 -04:00
Edward Thomson
378d12ac85 Merge pull request #3868 from libgit2/ethomson/mac_build
ci: point to the homebrew libssh2 install
2016-07-24 15:47:58 -04:00
Edward Thomson
0239eff354 ci: install homebrew's curl on mac 2016-07-24 14:54:40 -04:00
Richard Ipsum
8b2ad593a8 Make comment conform to style guide
Style guide says // style comments should be avoided.
2016-07-23 11:55:43 +01:00
Richard Ipsum
877282ea6f Fix outdated comment
SSH transport seems to be supported now.
2016-07-23 11:47:59 +01:00
Edward Thomson
08556e6db3 ci: install homebrew's zlib on mac 2016-07-22 21:10:25 -04:00
David Turner
d81cb2e405 remote: Handle missing config values when deleting a remote
Somehow I ended up with the following in my ~/.gitconfig:
[branch "master"]
remote = origin
merge = master
rebase = true

I assume something went crazy while I was running the git.git tests
some time ago, and that I never noticed until now.

This is not a good configuration, but it shouldn't cause problems. But
it does. Specifically, if you have this in your config, and you
perform the following set of actions:

create a remote
fetch from that remote
create a branch off of the remote master branch called "master"
delete the branch
delete the remote

The remote delete fails with the message "Could not find key
'branch.master.rebase' to delete". This is because it's iterating over
the config entries (including the ones in the global config) and
believes that there is a master branch which must therefore have these
config keys.

https://github.com/libgit2/libgit2/issues/3856
2016-07-15 13:47:01 -04:00
wildart
bdec62dce1 remove conditions that prevent use of custom TLS stream 2016-07-06 13:06:25 -04:00
Edward Thomson
c18a2bc4e0 Merge pull request #3851 from txdv/get-user-agent
Add get user agent functionality.
2016-07-05 15:51:01 -04:00
Edward Thomson
b57c176aa9 Merge pull request #3846 from rkrp/fix_bug_parsing_int64min
Fixed bug while parsing INT64_MIN
2016-07-05 12:46:27 -04:00
Andrius Bentkus
f1dba14481 Add get user agent functionality. 2016-07-05 18:10:24 +03:00
Edward Thomson
d8243465be Merge pull request #3836 from joshtriplett/cleanup-find_repo
find_repo: Clean up and simplify logic
2016-07-01 18:47:06 -04:00
Edward Thomson
ebeb56f0f5 Merge pull request #3711 from joshtriplett/git_repository_discover_default
Add GIT_REPOSITORY_OPEN_FROM_ENV flag to respect $GIT_* environment vars
2016-07-01 18:45:10 -04:00
Josh Triplett
2b80260ea5 CHANGELOG.md: Document new flags for git_repository_open_ext
Document GIT_REPOSITORY_OPEN_NO_DOTGIT and GIT_REPOSITORY_OPEN_FROM_ENV.
2016-06-30 08:08:36 -07:00
Josh Triplett
04d6ab6c4c CHANGELOG.md: Document behavior change in repository discovery 2016-06-30 08:08:06 -07:00
Edward Thomson
e421845033 Merge pull request #3847 from libgit2/ethomson/read_index_conflicts
Include conflicts in `git_index_read_index`
2016-06-30 10:20:32 -04:00
Edward Thomson
6249d960ab index: include conflicts in git_index_read_index
Ensure that we include conflicts when calling `git_index_read_index`,
which will remove conflicts in the index that do not exist in the new
target, and will add conflicts from the new target.
2016-06-29 18:37:00 -04:00
Edward Thomson
6f7ec7283d index: refactor common read_index functionality
Most of `git_index_read_index` is common to reading any iterator.
Refactor it out in case we want to implement `read_tree` in terms of it
in the future.
2016-06-29 17:01:47 -04:00
Edward Thomson
59a0005ddd Merge pull request #3813 from stinb/submodule-update-fetch
submodule: Try to fetch when update fails to find the target commit.
2016-06-29 10:01:26 -04:00
Edward Thomson
d88e500133 Merge pull request #3842 from pks-t/pks/double-free
blame: increment reference count for origin's commit
2016-06-29 09:35:56 -04:00
Patrick Steinhardt
2176670289 blame: do not decrement commit refcount in make_origin
When we create a blame origin, we try to look up the blob that is
to be blamed at a certain revision. When this lookup fails, e.g.
because the file did not exist at that certain revision, we fail
to create the blame origin and return `NULL`. The blame origin
that we have just allocated is thereby free'd with
`origin_decref`.

The `origin_decref` function does not only decrement reference
counts for the blame origin, though, but also for its commit and
blob. When this is done in the error case, we will cause an
uneven reference count for these objects. This may result in
hard-to-debug failures at seemingly unrelated code paths, where
we try to access these objects when they in fact have already
been free'd.

Fix the issue by refactoring `make_origin` such that we only
allocate the object after the only function that may fail so that
we do not have to call `origin_decref` at all. Also fix the
`pass_blame` function, which indirectly calls `make_origin`, to
free the commit when `make_origin` failed.
2016-06-29 14:43:00 +02:00