rugged 0.23.2 → 0.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +12 -3
- data/vendor/libgit2/COPYING +46 -0
- data/vendor/libgit2/include/git2/config.h +4 -2
- data/vendor/libgit2/include/git2/cred_helpers.h +1 -1
- data/vendor/libgit2/include/git2/diff.h +0 -19
- data/vendor/libgit2/include/git2/errors.h +12 -0
- data/vendor/libgit2/include/git2/sys/filter.h +1 -4
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +2 -3
- data/vendor/libgit2/include/git2/transport.h +21 -14
- data/vendor/libgit2/include/git2/version.h +2 -2
- data/vendor/libgit2/src/blame.c +1 -1
- data/vendor/libgit2/src/blame_git.c +27 -7
- data/vendor/libgit2/src/blame_git.h +1 -1
- data/vendor/libgit2/src/branch.c +12 -1
- data/vendor/libgit2/src/checkout.c +2 -1
- data/vendor/libgit2/src/clone.c +2 -2
- data/vendor/libgit2/src/common.h +13 -13
- data/vendor/libgit2/src/curl_stream.c +8 -7
- data/vendor/libgit2/src/diff.c +0 -25
- data/vendor/libgit2/src/diff_driver.c +6 -7
- data/vendor/libgit2/src/diff_patch.c +4 -0
- data/vendor/libgit2/src/diff_xdiff.c +7 -0
- data/vendor/libgit2/src/diff_xdiff.h +5 -0
- data/vendor/libgit2/src/errors.c +40 -75
- data/vendor/libgit2/src/filter.c +2 -5
- data/vendor/libgit2/src/global.c +9 -25
- data/vendor/libgit2/src/global.h +0 -1
- data/vendor/libgit2/src/index.c +3 -3
- data/vendor/libgit2/src/iterator.c +2 -2
- data/vendor/libgit2/src/merge.c +0 -56
- data/vendor/libgit2/src/merge_file.c +76 -22
- data/vendor/libgit2/src/openssl_stream.c +2 -3
- data/vendor/libgit2/src/path.c +0 -16
- data/vendor/libgit2/src/path.h +0 -5
- data/vendor/libgit2/src/refdb_fs.c +0 -7
- data/vendor/libgit2/src/remote.c +9 -18
- data/vendor/libgit2/src/stransport_stream.c +1 -1
- data/vendor/libgit2/src/submodule.c +7 -3
- data/vendor/libgit2/src/sysdir.c +8 -22
- data/vendor/libgit2/src/transports/http.c +9 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +1 -1
- data/vendor/libgit2/src/transports/ssh.c +2 -2
- data/vendor/libgit2/src/transports/winhttp.c +1 -1
- data/vendor/libgit2/src/util.c +0 -48
- data/vendor/libgit2/src/util.h +5 -13
- data/vendor/libgit2/src/win32/posix_w32.c +0 -2
- data/vendor/libgit2/src/xdiff/xdiff.h +5 -3
- data/vendor/libgit2/src/xdiff/xdiffi.c +8 -4
- data/vendor/libgit2/src/xdiff/xhistogram.c +4 -2
- data/vendor/libgit2/src/xdiff/xmerge.c +98 -44
- metadata +76 -81
- data/vendor/libgit2/src/merge_file.h +0 -14
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +0 -343
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -93
- data/vendor/libgit2/src/win32/w32_stack.c +0 -192
- data/vendor/libgit2/src/win32/w32_stack.h +0 -138
    
        data/vendor/libgit2/src/common.h
    CHANGED
    
    | @@ -46,10 +46,6 @@ | |
| 46 46 | 
             
            # ifdef GIT_THREADS
         | 
| 47 47 | 
             
            #	include "win32/pthread.h"
         | 
| 48 48 | 
             
            # endif
         | 
| 49 | 
            -
            # if defined(GIT_MSVC_CRTDBG)
         | 
| 50 | 
            -
            #   include "win32/w32_stack.h"
         | 
| 51 | 
            -
            #   include "win32/w32_crtdbg_stacktrace.h"
         | 
| 52 | 
            -
            # endif
         | 
| 53 49 |  | 
| 54 50 | 
             
            #else
         | 
| 55 51 |  | 
| @@ -141,25 +137,20 @@ void giterr_system_set(int code); | |
| 141 137 | 
             
             * Structure to preserve libgit2 error state
         | 
| 142 138 | 
             
             */
         | 
| 143 139 | 
             
            typedef struct {
         | 
| 144 | 
            -
            	int | 
| 145 | 
            -
            	unsigned int oom : 1;
         | 
| 140 | 
            +
            	int       error_code;
         | 
| 146 141 | 
             
            	git_error error_msg;
         | 
| 147 142 | 
             
            } git_error_state;
         | 
| 148 143 |  | 
| 149 144 | 
             
            /**
         | 
| 150 145 | 
             
             * Capture current error state to restore later, returning error code.
         | 
| 151 | 
            -
             * If `error_code` is zero, this does  | 
| 152 | 
            -
             * You must either restore this error state, or free it.
         | 
| 146 | 
            +
             * If `error_code` is zero, this does nothing and returns zero.
         | 
| 153 147 | 
             
             */
         | 
| 154 | 
            -
             | 
| 148 | 
            +
            int giterr_capture(git_error_state *state, int error_code);
         | 
| 155 149 |  | 
| 156 150 | 
             
            /**
         | 
| 157 151 | 
             
             * Restore error state to a previous value, returning saved error code.
         | 
| 158 152 | 
             
             */
         | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
            /** Free an error state. */
         | 
| 162 | 
            -
            extern void giterr_state_free(git_error_state *state);
         | 
| 153 | 
            +
            int giterr_restore(git_error_state *state);
         | 
| 163 154 |  | 
| 164 155 | 
             
            /**
         | 
| 165 156 | 
             
             * Check a versioned structure for validity
         | 
| @@ -208,6 +199,15 @@ GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int v | |
| 208 199 | 
             
            #define GITERR_CHECK_ALLOC_ADD(out, one, two) \
         | 
| 209 200 | 
             
            	if (GIT_ADD_SIZET_OVERFLOW(out, one, two)) { return -1; }
         | 
| 210 201 |  | 
| 202 | 
            +
            #define GITERR_CHECK_ALLOC_ADD3(out, one, two, three) \
         | 
| 203 | 
            +
            	if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
         | 
| 204 | 
            +
            		GIT_ADD_SIZET_OVERFLOW(out, *(out), three)) { return -1; }
         | 
| 205 | 
            +
             | 
| 206 | 
            +
            #define GITERR_CHECK_ALLOC_ADD4(out, one, two, three, four) \
         | 
| 207 | 
            +
            	if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
         | 
| 208 | 
            +
            		GIT_ADD_SIZET_OVERFLOW(out, *(out), three) || \
         | 
| 209 | 
            +
            		GIT_ADD_SIZET_OVERFLOW(out, *(out), four)) { return -1; }
         | 
| 210 | 
            +
             | 
| 211 211 | 
             
            /** Check for multiplicative overflow, failing if it would occur. */
         | 
| 212 212 | 
             
            #define GITERR_CHECK_ALLOC_MULTIPLY(out, nelem, elsize) \
         | 
| 213 213 | 
             
            	if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { return -1; }
         | 
| @@ -67,9 +67,9 @@ static int curls_certificate(git_cert **out, git_stream *stream) | |
| 67 67 |  | 
| 68 68 | 
             
            	/* No information is available, can happen with SecureTransport */
         | 
| 69 69 | 
             
            	if (certinfo->num_of_certs == 0) {
         | 
| 70 | 
            -
            		s->cert_info. | 
| 71 | 
            -
            		s->cert_info.data | 
| 72 | 
            -
            		s->cert_info.len | 
| 70 | 
            +
            		s->cert_info.cert_type = GIT_CERT_NONE;
         | 
| 71 | 
            +
            		s->cert_info.data      = NULL;
         | 
| 72 | 
            +
            		s->cert_info.len       = 0;
         | 
| 73 73 | 
             
            		return 0;
         | 
| 74 74 | 
             
            	}
         | 
| 75 75 |  | 
| @@ -85,11 +85,11 @@ static int curls_certificate(git_cert **out, git_stream *stream) | |
| 85 85 | 
             
            	s->cert_info_strings.strings = (char **) strings.contents;
         | 
| 86 86 | 
             
            	s->cert_info_strings.count   = strings.length;
         | 
| 87 87 |  | 
| 88 | 
            -
            	s->cert_info. | 
| 89 | 
            -
            	s->cert_info.data | 
| 90 | 
            -
            	s->cert_info.len | 
| 88 | 
            +
            	s->cert_info.cert_type = GIT_CERT_STRARRAY;
         | 
| 89 | 
            +
            	s->cert_info.data      = &s->cert_info_strings;
         | 
| 90 | 
            +
            	s->cert_info.len       = strings.length;
         | 
| 91 91 |  | 
| 92 | 
            -
            	*out = &s->cert_info | 
| 92 | 
            +
            	*out = (git_cert *) &s->cert_info;
         | 
| 93 93 |  | 
| 94 94 | 
             
            	return 0;
         | 
| 95 95 | 
             
            }
         | 
| @@ -220,6 +220,7 @@ int git_curl_stream_new(git_stream **out, const char *host, const char *port) | |
| 220 220 | 
             
            	curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 1);
         | 
| 221 221 | 
             
            	curl_easy_setopt(handle, CURLOPT_CERTINFO, 1);
         | 
| 222 222 | 
             
            	curl_easy_setopt(handle, CURLOPT_HTTPPROXYTUNNEL, 1);
         | 
| 223 | 
            +
            	curl_easy_setopt(handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
         | 
| 223 224 |  | 
| 224 225 | 
             
            	/* curl_easy_setopt(handle, CURLOPT_VERBOSE, 1); */
         | 
| 225 226 |  | 
    
        data/vendor/libgit2/src/diff.c
    CHANGED
    
    | @@ -1421,31 +1421,6 @@ int git_diff_tree_to_workdir_with_index( | |
| 1421 1421 | 
             
            	return error;
         | 
| 1422 1422 | 
             
            }
         | 
| 1423 1423 |  | 
| 1424 | 
            -
            int git_diff_index_to_index(
         | 
| 1425 | 
            -
            	git_diff **diff,
         | 
| 1426 | 
            -
            	git_repository *repo,
         | 
| 1427 | 
            -
            	git_index *old_index,
         | 
| 1428 | 
            -
            	git_index *new_index,
         | 
| 1429 | 
            -
            	const git_diff_options *opts)
         | 
| 1430 | 
            -
            {
         | 
| 1431 | 
            -
            	int error = 0;
         | 
| 1432 | 
            -
             | 
| 1433 | 
            -
            	assert(diff && old_index && new_index);
         | 
| 1434 | 
            -
             | 
| 1435 | 
            -
            	DIFF_FROM_ITERATORS(
         | 
| 1436 | 
            -
            		git_iterator_for_index(
         | 
| 1437 | 
            -
            			&a, old_index, GIT_ITERATOR_DONT_IGNORE_CASE, pfx, pfx),
         | 
| 1438 | 
            -
            		git_iterator_for_index(
         | 
| 1439 | 
            -
            			&b, new_index, GIT_ITERATOR_DONT_IGNORE_CASE, pfx, pfx)
         | 
| 1440 | 
            -
            	);
         | 
| 1441 | 
            -
             | 
| 1442 | 
            -
            	/* if index is in case-insensitive order, re-sort deltas to match */
         | 
| 1443 | 
            -
            	if (!error && (old_index->ignore_case || new_index->ignore_case))
         | 
| 1444 | 
            -
            		diff_set_ignore_case(*diff, true);
         | 
| 1445 | 
            -
             | 
| 1446 | 
            -
            	return error;
         | 
| 1447 | 
            -
            }
         | 
| 1448 | 
            -
             | 
| 1449 1424 | 
             
            size_t git_diff_num_deltas(const git_diff *diff)
         | 
| 1450 1425 | 
             
            {
         | 
| 1451 1426 | 
             
            	assert(diff);
         | 
| @@ -97,8 +97,7 @@ static int diff_driver_add_patterns( | |
| 97 97 | 
             
            	for (scan = regex_str; scan; scan = end) {
         | 
| 98 98 | 
             
            		/* get pattern to fill in */
         | 
| 99 99 | 
             
            		if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) {
         | 
| 100 | 
            -
            			 | 
| 101 | 
            -
            			break;
         | 
| 100 | 
            +
            			return -1;
         | 
| 102 101 | 
             
            		}
         | 
| 103 102 |  | 
| 104 103 | 
             
            		pat->flags = regex_flags;
         | 
| @@ -117,10 +116,9 @@ static int diff_driver_add_patterns( | |
| 117 116 | 
             
            			break;
         | 
| 118 117 |  | 
| 119 118 | 
             
            		if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) {
         | 
| 120 | 
            -
            			/* | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
            			break;
         | 
| 119 | 
            +
            			/*
         | 
| 120 | 
            +
            			 * TODO: issue a warning
         | 
| 121 | 
            +
            			 */
         | 
| 124 122 | 
             
            		}
         | 
| 125 123 | 
             
            	}
         | 
| 126 124 |  | 
| @@ -128,7 +126,8 @@ static int diff_driver_add_patterns( | |
| 128 126 | 
             
            		(void)git_array_pop(drv->fn_patterns); /* release last item */
         | 
| 129 127 | 
             
            	git_buf_free(&buf);
         | 
| 130 128 |  | 
| 131 | 
            -
            	return  | 
| 129 | 
            +
            	/* We want to ignore bad patterns, so return success regardless */
         | 
| 130 | 
            +
            	return 0;
         | 
| 132 131 | 
             
            }
         | 
| 133 132 |  | 
| 134 133 | 
             
            static int diff_driver_xfuncname(const git_config_entry *entry, void *payload)
         | 
| @@ -30,6 +30,10 @@ static void diff_patch_update_binary(git_patch *patch) | |
| 30 30 | 
             
            		(patch->nfile.file->flags & GIT_DIFF_FLAG_BINARY) != 0)
         | 
| 31 31 | 
             
            		patch->delta->flags |= GIT_DIFF_FLAG_BINARY;
         | 
| 32 32 |  | 
| 33 | 
            +
            	else if (patch->ofile.file->size > GIT_XDIFF_MAX_SIZE ||
         | 
| 34 | 
            +
            			 patch->nfile.file->size > GIT_XDIFF_MAX_SIZE)
         | 
| 35 | 
            +
            		patch->delta->flags |= GIT_DIFF_FLAG_BINARY;
         | 
| 36 | 
            +
             | 
| 33 37 | 
             
            	else if ((patch->ofile.file->flags & DIFF_FLAGS_NOT_BINARY) != 0 &&
         | 
| 34 38 | 
             
            			 (patch->nfile.file->flags & DIFF_FLAGS_NOT_BINARY) != 0)
         | 
| 35 39 | 
             
            		patch->delta->flags |= GIT_DIFF_FLAG_NOT_BINARY;
         | 
| @@ -4,6 +4,7 @@ | |
| 4 4 | 
             
             * This file is part of libgit2, distributed under the GNU GPL v2 with
         | 
| 5 5 | 
             
             * a Linking Exception. For full terms see the included COPYING file.
         | 
| 6 6 | 
             
             */
         | 
| 7 | 
            +
            #include "git2/errors.h"
         | 
| 7 8 | 
             
            #include "common.h"
         | 
| 8 9 | 
             
            #include "diff.h"
         | 
| 9 10 | 
             
            #include "diff_driver.h"
         | 
| @@ -208,6 +209,12 @@ static int git_xdiff(git_diff_output *output, git_patch *patch) | |
| 208 209 | 
             
            	git_patch__old_data(&info.xd_old_data.ptr, &info.xd_old_data.size, patch);
         | 
| 209 210 | 
             
            	git_patch__new_data(&info.xd_new_data.ptr, &info.xd_new_data.size, patch);
         | 
| 210 211 |  | 
| 212 | 
            +
            	if (info.xd_old_data.size > GIT_XDIFF_MAX_SIZE ||
         | 
| 213 | 
            +
            		info.xd_new_data.size > GIT_XDIFF_MAX_SIZE) {
         | 
| 214 | 
            +
            		giterr_set(GITERR_INVALID, "files too large for diff");
         | 
| 215 | 
            +
            		return -1;
         | 
| 216 | 
            +
            	}
         | 
| 217 | 
            +
             | 
| 211 218 | 
             
            	xdl_diff(&info.xd_old_data, &info.xd_new_data,
         | 
| 212 219 | 
             
            		&xo->params, &xo->config, &xo->callback);
         | 
| 213 220 |  | 
| @@ -11,6 +11,11 @@ | |
| 11 11 | 
             
            #include "diff_patch.h"
         | 
| 12 12 | 
             
            #include "xdiff/xdiff.h"
         | 
| 13 13 |  | 
| 14 | 
            +
            /* xdiff cannot cope with large files.  these files should not be passed to
         | 
| 15 | 
            +
             * xdiff.  callers should treat these large files as binary.
         | 
| 16 | 
            +
             */
         | 
| 17 | 
            +
            #define GIT_XDIFF_MAX_SIZE (1024LL * 1024 * 1023)
         | 
| 18 | 
            +
             | 
| 14 19 | 
             
            /* A git_xdiff_output is a git_diff_output with extra fields necessary
         | 
| 15 20 | 
             
             * to use libxdiff.  Calling git_xdiff_init() will set the diff_cb field
         | 
| 16 21 | 
             
             * of the output to use xdiff to generate the diffs.
         | 
    
        data/vendor/libgit2/src/errors.c
    CHANGED
    
    | @@ -18,30 +18,19 @@ static git_error g_git_oom_error = { | |
| 18 18 | 
             
            	GITERR_NOMEMORY
         | 
| 19 19 | 
             
            };
         | 
| 20 20 |  | 
| 21 | 
            -
            static void  | 
| 21 | 
            +
            static void set_error(int error_class, char *string)
         | 
| 22 22 | 
             
            {
         | 
| 23 23 | 
             
            	git_error *error = &GIT_GLOBAL->error_t;
         | 
| 24 | 
            -
            	git_buf *buf = &GIT_GLOBAL->error_buf;
         | 
| 25 24 |  | 
| 26 | 
            -
            	error->message  | 
| 25 | 
            +
            	if (error->message != string)
         | 
| 26 | 
            +
            		git__free(error->message);
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            	error->message = string;
         | 
| 27 29 | 
             
            	error->klass = error_class;
         | 
| 28 30 |  | 
| 29 31 | 
             
            	GIT_GLOBAL->last_error = error;
         | 
| 30 32 | 
             
            }
         | 
| 31 33 |  | 
| 32 | 
            -
            static void set_error(int error_class, char *string)
         | 
| 33 | 
            -
            {
         | 
| 34 | 
            -
            	git_buf *buf = &GIT_GLOBAL->error_buf;
         | 
| 35 | 
            -
             | 
| 36 | 
            -
            	git_buf_clear(buf);
         | 
| 37 | 
            -
            	if (string) {
         | 
| 38 | 
            -
            		git_buf_puts(buf, string);
         | 
| 39 | 
            -
            		git__free(string);
         | 
| 40 | 
            -
            	}
         | 
| 41 | 
            -
             | 
| 42 | 
            -
            	set_error_from_buffer(error_class);
         | 
| 43 | 
            -
            }
         | 
| 44 | 
            -
             | 
| 45 34 | 
             
            void giterr_set_oom(void)
         | 
| 46 35 | 
             
            {
         | 
| 47 36 | 
             
            	GIT_GLOBAL->last_error = &g_git_oom_error;
         | 
| @@ -49,28 +38,27 @@ void giterr_set_oom(void) | |
| 49 38 |  | 
| 50 39 | 
             
            void giterr_set(int error_class, const char *string, ...)
         | 
| 51 40 | 
             
            {
         | 
| 41 | 
            +
            	git_buf buf = GIT_BUF_INIT;
         | 
| 52 42 | 
             
            	va_list arglist;
         | 
| 53 43 | 
             
            #ifdef GIT_WIN32
         | 
| 54 44 | 
             
            	DWORD win32_error_code = (error_class == GITERR_OS) ? GetLastError() : 0;
         | 
| 55 45 | 
             
            #endif
         | 
| 56 46 | 
             
            	int error_code = (error_class == GITERR_OS) ? errno : 0;
         | 
| 57 | 
            -
            	git_buf *buf = &GIT_GLOBAL->error_buf;
         | 
| 58 47 |  | 
| 59 | 
            -
            	git_buf_clear(buf);
         | 
| 60 48 | 
             
            	if (string) {
         | 
| 61 49 | 
             
            		va_start(arglist, string);
         | 
| 62 | 
            -
            		git_buf_vprintf(buf, string, arglist);
         | 
| 50 | 
            +
            		git_buf_vprintf(&buf, string, arglist);
         | 
| 63 51 | 
             
            		va_end(arglist);
         | 
| 64 52 |  | 
| 65 53 | 
             
            		if (error_class == GITERR_OS)
         | 
| 66 | 
            -
            			git_buf_PUTS(buf, ": ");
         | 
| 54 | 
            +
            			git_buf_PUTS(&buf, ": ");
         | 
| 67 55 | 
             
            	}
         | 
| 68 56 |  | 
| 69 57 | 
             
            	if (error_class == GITERR_OS) {
         | 
| 70 58 | 
             
            #ifdef GIT_WIN32
         | 
| 71 59 | 
             
            		char * win32_error = git_win32_get_error_message(win32_error_code);
         | 
| 72 60 | 
             
            		if (win32_error) {
         | 
| 73 | 
            -
            			git_buf_puts(buf, win32_error);
         | 
| 61 | 
            +
            			git_buf_puts(&buf, win32_error);
         | 
| 74 62 | 
             
            			git__free(win32_error);
         | 
| 75 63 |  | 
| 76 64 | 
             
            			SetLastError(0);
         | 
| @@ -78,29 +66,26 @@ void giterr_set(int error_class, const char *string, ...) | |
| 78 66 | 
             
            		else
         | 
| 79 67 | 
             
            #endif
         | 
| 80 68 | 
             
            		if (error_code)
         | 
| 81 | 
            -
            			git_buf_puts(buf, strerror(error_code));
         | 
| 69 | 
            +
            			git_buf_puts(&buf, strerror(error_code));
         | 
| 82 70 |  | 
| 83 71 | 
             
            		if (error_code)
         | 
| 84 72 | 
             
            			errno = 0;
         | 
| 85 73 | 
             
            	}
         | 
| 86 74 |  | 
| 87 | 
            -
            	if (!git_buf_oom(buf))
         | 
| 88 | 
            -
            		 | 
| 75 | 
            +
            	if (!git_buf_oom(&buf))
         | 
| 76 | 
            +
            		set_error(error_class, git_buf_detach(&buf));
         | 
| 89 77 | 
             
            }
         | 
| 90 78 |  | 
| 91 79 | 
             
            void giterr_set_str(int error_class, const char *string)
         | 
| 92 80 | 
             
            {
         | 
| 93 | 
            -
            	 | 
| 81 | 
            +
            	char *message;
         | 
| 94 82 |  | 
| 95 83 | 
             
            	assert(string);
         | 
| 96 84 |  | 
| 97 | 
            -
            	 | 
| 98 | 
            -
            		return;
         | 
| 85 | 
            +
            	message = git__strdup(string);
         | 
| 99 86 |  | 
| 100 | 
            -
            	 | 
| 101 | 
            -
             | 
| 102 | 
            -
            	if (!git_buf_oom(buf))
         | 
| 103 | 
            -
            		set_error_from_buffer(error_class);
         | 
| 87 | 
            +
            	if (message)
         | 
| 88 | 
            +
            		set_error(error_class, message);
         | 
| 104 89 | 
             
            }
         | 
| 105 90 |  | 
| 106 91 | 
             
            int giterr_set_regex(const regex_t *regex, int error_code)
         | 
| @@ -131,65 +116,45 @@ void giterr_clear(void) | |
| 131 116 | 
             
            #endif
         | 
| 132 117 | 
             
            }
         | 
| 133 118 |  | 
| 134 | 
            -
             | 
| 135 | 
            -
            {
         | 
| 136 | 
            -
            	return GIT_GLOBAL->last_error;
         | 
| 137 | 
            -
            }
         | 
| 138 | 
            -
             | 
| 139 | 
            -
            int giterr_state_capture(git_error_state *state, int error_code)
         | 
| 119 | 
            +
            int giterr_detach(git_error *cpy)
         | 
| 140 120 | 
             
            {
         | 
| 141 121 | 
             
            	git_error *error = GIT_GLOBAL->last_error;
         | 
| 142 | 
            -
            	git_buf *error_buf = &GIT_GLOBAL->error_buf;
         | 
| 143 | 
            -
             | 
| 144 | 
            -
            	memset(state, 0, sizeof(git_error_state));
         | 
| 145 122 |  | 
| 146 | 
            -
            	 | 
| 147 | 
            -
            		return 0;
         | 
| 123 | 
            +
            	assert(cpy);
         | 
| 148 124 |  | 
| 149 | 
            -
            	 | 
| 150 | 
            -
             | 
| 125 | 
            +
            	if (!error)
         | 
| 126 | 
            +
            		return -1;
         | 
| 151 127 |  | 
| 152 | 
            -
            	 | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
            		if (state->oom)
         | 
| 156 | 
            -
            			state->error_msg.message = g_git_oom_error.message;
         | 
| 157 | 
            -
            		else
         | 
| 158 | 
            -
            			state->error_msg.message = git_buf_detach(error_buf);
         | 
| 159 | 
            -
            	}
         | 
| 128 | 
            +
            	cpy->message = error->message;
         | 
| 129 | 
            +
            	cpy->klass = error->klass;
         | 
| 160 130 |  | 
| 131 | 
            +
            	error->message = NULL;
         | 
| 161 132 | 
             
            	giterr_clear();
         | 
| 162 | 
            -
             | 
| 133 | 
            +
             | 
| 134 | 
            +
            	return 0;
         | 
| 163 135 | 
             
            }
         | 
| 164 136 |  | 
| 165 | 
            -
             | 
| 137 | 
            +
            const git_error *giterr_last(void)
         | 
| 166 138 | 
             
            {
         | 
| 167 | 
            -
            	 | 
| 168 | 
            -
             | 
| 169 | 
            -
            	giterr_clear();
         | 
| 170 | 
            -
             | 
| 171 | 
            -
            	if (state && state->error_msg.message) {
         | 
| 172 | 
            -
            		if (state->oom)
         | 
| 173 | 
            -
            			giterr_set_oom();
         | 
| 174 | 
            -
            		else
         | 
| 175 | 
            -
            			set_error(state->error_msg.klass, state->error_msg.message);
         | 
| 176 | 
            -
             | 
| 177 | 
            -
            		ret = state->error_code;
         | 
| 178 | 
            -
            		memset(state, 0, sizeof(git_error_state));
         | 
| 179 | 
            -
            	}
         | 
| 180 | 
            -
             | 
| 181 | 
            -
            	return ret;
         | 
| 139 | 
            +
            	return GIT_GLOBAL->last_error;
         | 
| 182 140 | 
             
            }
         | 
| 183 141 |  | 
| 184 | 
            -
             | 
| 142 | 
            +
            int giterr_capture(git_error_state *state, int error_code)
         | 
| 185 143 | 
             
            {
         | 
| 186 | 
            -
            	 | 
| 187 | 
            -
             | 
| 144 | 
            +
            	state->error_code = error_code;
         | 
| 145 | 
            +
            	if (error_code)
         | 
| 146 | 
            +
            		giterr_detach(&state->error_msg);
         | 
| 147 | 
            +
            	return error_code;
         | 
| 148 | 
            +
            }
         | 
| 188 149 |  | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 150 | 
            +
            int giterr_restore(git_error_state *state)
         | 
| 151 | 
            +
            {
         | 
| 152 | 
            +
            	if (state && state->error_code && state->error_msg.message)
         | 
| 153 | 
            +
            		set_error(state->error_msg.klass, state->error_msg.message);
         | 
| 154 | 
            +
            	else
         | 
| 155 | 
            +
            		giterr_clear();
         | 
| 191 156 |  | 
| 192 | 
            -
            	 | 
| 157 | 
            +
            	return state ? state->error_code : 0;
         | 
| 193 158 | 
             
            }
         | 
| 194 159 |  | 
| 195 160 | 
             
            int giterr_system_last(void)
         | 
    
        data/vendor/libgit2/src/filter.c
    CHANGED
    
    | @@ -433,11 +433,8 @@ static int filter_list_check_attributes( | |
| 433 433 | 
             
            		want_type  = git_attr_value(want);
         | 
| 434 434 | 
             
            		found_type = git_attr_value(strs[i]);
         | 
| 435 435 |  | 
| 436 | 
            -
            		if (want_type != found_type | 
| 437 | 
            -
            			 | 
| 438 | 
            -
            		else if (want_type == GIT_ATTR_VALUE_T &&
         | 
| 439 | 
            -
            				strcmp(want, strs[i]) &&
         | 
| 440 | 
            -
            				strcmp(want, "*"))
         | 
| 436 | 
            +
            		if (want_type != found_type ||
         | 
| 437 | 
            +
            			(want_type == GIT_ATTR_VALUE_T && strcmp(want, strs[i])))
         | 
| 441 438 | 
             
            			error = GIT_ENOTFOUND;
         | 
| 442 439 | 
             
            	}
         | 
| 443 440 |  | 
    
        data/vendor/libgit2/src/global.c
    CHANGED
    
    | @@ -11,10 +11,7 @@ | |
| 11 11 | 
             
            #include "git2/global.h"
         | 
| 12 12 | 
             
            #include "git2/sys/openssl.h"
         | 
| 13 13 | 
             
            #include "thread-utils.h"
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            #include "win32/w32_stack.h"
         | 
| 16 | 
            -
            #include "win32/w32_crtdbg_stacktrace.h"
         | 
| 17 | 
            -
            #endif
         | 
| 14 | 
            +
             | 
| 18 15 |  | 
| 19 16 | 
             
            git_mutex git__mwindow_mutex;
         | 
| 20 17 |  | 
| @@ -228,11 +225,6 @@ int git_libgit2_init(void) | |
| 228 225 |  | 
| 229 226 | 
             
            	/* Only do work on a 0 -> 1 transition of the refcount */
         | 
| 230 227 | 
             
            	if ((ret = git_atomic_inc(&git__n_inits)) == 1) {
         | 
| 231 | 
            -
            #if defined(GIT_MSVC_CRTDBG)
         | 
| 232 | 
            -
            		git_win32__crtdbg_stacktrace_init();
         | 
| 233 | 
            -
            		git_win32__stack_init();
         | 
| 234 | 
            -
            #endif
         | 
| 235 | 
            -
             | 
| 236 228 | 
             
            		if (synchronized_threads_init() < 0)
         | 
| 237 229 | 
             
            			ret = -1;
         | 
| 238 230 | 
             
            	}
         | 
| @@ -262,15 +254,9 @@ int git_libgit2_shutdown(void) | |
| 262 254 | 
             
            	while (InterlockedCompareExchange(&_mutex, 1, 0)) { Sleep(0); }
         | 
| 263 255 |  | 
| 264 256 | 
             
            	/* Only do work on a 1 -> 0 transition of the refcount */
         | 
| 265 | 
            -
            	if ((ret = git_atomic_dec(&git__n_inits)) == 0) | 
| 257 | 
            +
            	if ((ret = git_atomic_dec(&git__n_inits)) == 0)
         | 
| 266 258 | 
             
            		synchronized_threads_shutdown();
         | 
| 267 259 |  | 
| 268 | 
            -
            #if defined(GIT_MSVC_CRTDBG)
         | 
| 269 | 
            -
            		git_win32__crtdbg_stacktrace_cleanup();
         | 
| 270 | 
            -
            		git_win32__stack_cleanup();
         | 
| 271 | 
            -
            #endif
         | 
| 272 | 
            -
            	}
         | 
| 273 | 
            -
             | 
| 274 260 | 
             
            	/* Exit the lock */
         | 
| 275 261 | 
             
            	InterlockedExchange(&_mutex, 0);
         | 
| 276 262 |  | 
| @@ -279,19 +265,18 @@ int git_libgit2_shutdown(void) | |
| 279 265 |  | 
| 280 266 | 
             
            git_global_st *git__global_state(void)
         | 
| 281 267 | 
             
            {
         | 
| 282 | 
            -
            	 | 
| 268 | 
            +
            	void *ptr;
         | 
| 283 269 |  | 
| 284 270 | 
             
            	assert(git_atomic_get(&git__n_inits) > 0);
         | 
| 285 271 |  | 
| 286 272 | 
             
            	if ((ptr = TlsGetValue(_tls_index)) != NULL)
         | 
| 287 273 | 
             
            		return ptr;
         | 
| 288 274 |  | 
| 289 | 
            -
            	ptr =  | 
| 275 | 
            +
            	ptr = git__malloc(sizeof(git_global_st));
         | 
| 290 276 | 
             
            	if (!ptr)
         | 
| 291 277 | 
             
            		return NULL;
         | 
| 292 278 |  | 
| 293 | 
            -
            	 | 
| 294 | 
            -
             | 
| 279 | 
            +
            	memset(ptr, 0x0, sizeof(git_global_st));
         | 
| 295 280 | 
             
            	TlsSetValue(_tls_index, ptr);
         | 
| 296 281 | 
             
            	return ptr;
         | 
| 297 282 | 
             
            }
         | 
| @@ -345,8 +330,8 @@ int git_libgit2_init(void) | |
| 345 330 | 
             
            {
         | 
| 346 331 | 
             
            	int ret;
         | 
| 347 332 |  | 
| 348 | 
            -
            	ret = git_atomic_inc(&git__n_inits);
         | 
| 349 333 | 
             
            	pthread_once(&_once_init, init_once);
         | 
| 334 | 
            +
            	ret = git_atomic_inc(&git__n_inits);
         | 
| 350 335 |  | 
| 351 336 | 
             
            	return init_error ? init_error : ret;
         | 
| 352 337 | 
             
            }
         | 
| @@ -379,18 +364,18 @@ int git_libgit2_shutdown(void) | |
| 379 364 |  | 
| 380 365 | 
             
            git_global_st *git__global_state(void)
         | 
| 381 366 | 
             
            {
         | 
| 382 | 
            -
            	 | 
| 367 | 
            +
            	void *ptr;
         | 
| 383 368 |  | 
| 384 369 | 
             
            	assert(git_atomic_get(&git__n_inits) > 0);
         | 
| 385 370 |  | 
| 386 371 | 
             
            	if ((ptr = pthread_getspecific(_tls_key)) != NULL)
         | 
| 387 372 | 
             
            		return ptr;
         | 
| 388 373 |  | 
| 389 | 
            -
            	ptr =  | 
| 374 | 
            +
            	ptr = git__malloc(sizeof(git_global_st));
         | 
| 390 375 | 
             
            	if (!ptr)
         | 
| 391 376 | 
             
            		return NULL;
         | 
| 392 377 |  | 
| 393 | 
            -
            	 | 
| 378 | 
            +
            	memset(ptr, 0x0, sizeof(git_global_st));
         | 
| 394 379 | 
             
            	pthread_setspecific(_tls_key, ptr);
         | 
| 395 380 | 
             
            	return ptr;
         | 
| 396 381 | 
             
            }
         | 
| @@ -408,7 +393,6 @@ int git_libgit2_init(void) | |
| 408 393 | 
             
            		ssl_inited = 1;
         | 
| 409 394 | 
             
            	}
         | 
| 410 395 |  | 
| 411 | 
            -
            	git_buf_init(&__state.error_buf, 0);
         | 
| 412 396 | 
             
            	return git_atomic_inc(&git__n_inits);
         | 
| 413 397 | 
             
            }
         | 
| 414 398 |  |