rugged 1.0.0 → 1.0.1
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/README.md +2 -2
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +10 -0
- data/lib/rugged/commit.rb +1 -2
- data/lib/rugged/repository.rb +5 -6
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/deps/ntlmclient/compat.h +1 -1
- data/vendor/libgit2/include/git2/version.h +2 -2
- data/vendor/libgit2/src/config_file.c +9 -0
- data/vendor/libgit2/src/index.c +2 -2
- data/vendor/libgit2/src/merge.c +20 -7
- data/vendor/libgit2/src/stash.c +2 -2
- data/vendor/libgit2/src/transports/httpclient.c +16 -4
- data/vendor/libgit2/src/worktree.c +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a71025a0b98dfed66af094ccdc24138d61bf4159eb05c49bf8fb9823a5ba34b
|
4
|
+
data.tar.gz: c1e1978022f16609de31a310a476c8f0d96cc26018c92f41bd7c10d5fac42cd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a17566ce7dc49b8fe819e4b6c1ef44a7afc6fd538895f93177332273330cd1aedcf855f2ee3093a0deb74a2fff16d22f9b4a3e602a3d6a9e9ed782a013d9227
|
7
|
+
data.tar.gz: 2f36b64dab2fe738396b5ab5fc9c64354266d4bd3338ff77a8298a8bd0a659e37915945101583436113bf72d7db47d063e0a6aef27a877a84e1a175f13fcc7df
|
data/README.md
CHANGED
@@ -17,9 +17,9 @@ Rugged is a self-contained gem. You can install it by running:
|
|
17
17
|
|
18
18
|
$ gem install rugged
|
19
19
|
|
20
|
-
You need to have CMake and `pkg-config` installed on your system to be able to build the included version of `libgit2`. On OS X, after installing [Homebrew](http://brew.sh/), you can get
|
20
|
+
You need to have CMake and `pkg-config` installed on your system to be able to build the included version of `libgit2`. On OS X, after installing [Homebrew](http://brew.sh/), you can get the required packages with:
|
21
21
|
```bash
|
22
|
-
$ brew install cmake
|
22
|
+
$ brew install cmake pkg-config
|
23
23
|
```
|
24
24
|
|
25
25
|
Please follow the above in case installation of the gem fails with `ERROR: CMake is required to build Rugged.`.
|
data/ext/rugged/rugged_config.c
CHANGED
@@ -173,7 +173,7 @@ static int cb_config__each_key(const git_config_entry *entry, void *payload)
|
|
173
173
|
{
|
174
174
|
int *exception = (int *) payload;
|
175
175
|
|
176
|
-
rb_protect(rb_yield,
|
176
|
+
rb_protect(rb_yield, rb_str_new_utf8(entry->name), exception);
|
177
177
|
|
178
178
|
return (*exception != 0) ? GIT_EUSER : GIT_OK;
|
179
179
|
}
|
data/ext/rugged/rugged_remote.c
CHANGED
@@ -207,6 +207,18 @@ static void init_custom_headers(VALUE rb_options, git_strarray *custom_headers)
|
|
207
207
|
}
|
208
208
|
}
|
209
209
|
|
210
|
+
static void init_proxy_options(VALUE rb_options, git_proxy_options *proxy_options)
|
211
|
+
{
|
212
|
+
if (NIL_P(rb_options)) return;
|
213
|
+
|
214
|
+
VALUE val = rb_hash_aref(rb_options, CSTR2SYM("proxy_url"));
|
215
|
+
if (!NIL_P(val)) {
|
216
|
+
Check_Type(val, T_STRING);
|
217
|
+
proxy_options->type = GIT_PROXY_SPECIFIED;
|
218
|
+
proxy_options->url = StringValueCStr(val);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
210
222
|
static int parse_prune_type(VALUE rb_prune_type)
|
211
223
|
{
|
212
224
|
if (rb_prune_type == Qtrue) {
|
@@ -283,11 +295,15 @@ static VALUE rugged_rhead_new(const git_remote_head *head)
|
|
283
295
|
*
|
284
296
|
* :headers ::
|
285
297
|
* Extra HTTP headers to include with the request (only applies to http:// or https:// remotes)
|
298
|
+
*
|
299
|
+
* :proxy_url ::
|
300
|
+
* The url of an http proxy to use to access the remote repository.
|
286
301
|
*/
|
287
302
|
static VALUE rb_git_remote_ls(int argc, VALUE *argv, VALUE self)
|
288
303
|
{
|
289
304
|
git_remote *remote;
|
290
305
|
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
306
|
+
git_proxy_options proxy_options = GIT_PROXY_OPTIONS_INIT;
|
291
307
|
git_strarray custom_headers = {0};
|
292
308
|
const git_remote_head **heads;
|
293
309
|
|
@@ -304,8 +320,9 @@ static VALUE rb_git_remote_ls(int argc, VALUE *argv, VALUE self)
|
|
304
320
|
|
305
321
|
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &callbacks, &payload);
|
306
322
|
init_custom_headers(rb_options, &custom_headers);
|
323
|
+
init_proxy_options(rb_options, &proxy_options);
|
307
324
|
|
308
|
-
if ((error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks,
|
325
|
+
if ((error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks, &proxy_options, &custom_headers)) ||
|
309
326
|
(error = git_remote_ls(&heads, &heads_len, remote)))
|
310
327
|
goto cleanup;
|
311
328
|
|
@@ -474,6 +491,9 @@ static VALUE rb_git_remote_push_refspecs(VALUE self)
|
|
474
491
|
* :headers ::
|
475
492
|
* Extra HTTP headers to include with the request (only applies to http:// or https:// remotes)
|
476
493
|
*
|
494
|
+
* :proxy_url ::
|
495
|
+
* The url of an http proxy to use to access the remote repository.
|
496
|
+
*
|
477
497
|
* Example:
|
478
498
|
*
|
479
499
|
* remote = repo.remotes["origin"]
|
@@ -484,6 +504,7 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
|
|
484
504
|
{
|
485
505
|
git_remote *remote;
|
486
506
|
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
507
|
+
git_proxy_options proxy_options = GIT_PROXY_OPTIONS_INIT;
|
487
508
|
git_strarray custom_headers = {0};
|
488
509
|
struct rugged_remote_cb_payload payload = { Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, 0 };
|
489
510
|
VALUE rb_direction, rb_options;
|
@@ -504,8 +525,9 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
|
|
504
525
|
|
505
526
|
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &callbacks, &payload);
|
506
527
|
init_custom_headers(rb_options, &custom_headers);
|
528
|
+
init_proxy_options(rb_options, &proxy_options);
|
507
529
|
|
508
|
-
error = git_remote_connect(remote, direction, &callbacks,
|
530
|
+
error = git_remote_connect(remote, direction, &callbacks, &proxy_options, &custom_headers);
|
509
531
|
git_remote_disconnect(remote);
|
510
532
|
|
511
533
|
xfree(custom_headers.strings);
|
@@ -563,6 +585,9 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
|
|
563
585
|
* Specifies the prune mode for the fetch. +true+ remove any remote-tracking references that
|
564
586
|
* no longer exist, +false+ do not prune, +nil+ use configured settings Defaults to "nil".
|
565
587
|
*
|
588
|
+
* :proxy_url ::
|
589
|
+
* The url of an http proxy to use to access the remote repository.
|
590
|
+
*
|
566
591
|
* Example:
|
567
592
|
*
|
568
593
|
* remote = Rugged::Remote.lookup(@repo, 'origin')
|
@@ -593,6 +618,7 @@ static VALUE rb_git_remote_fetch(int argc, VALUE *argv, VALUE self)
|
|
593
618
|
|
594
619
|
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &opts.callbacks, &payload);
|
595
620
|
init_custom_headers(rb_options, &opts.custom_headers);
|
621
|
+
init_proxy_options(rb_options, &opts.proxy_opts);
|
596
622
|
|
597
623
|
if (!NIL_P(rb_options)) {
|
598
624
|
VALUE rb_prune_type;
|
@@ -654,6 +680,9 @@ static VALUE rb_git_remote_fetch(int argc, VALUE *argv, VALUE self)
|
|
654
680
|
* :headers ::
|
655
681
|
* Extra HTTP headers to include with the push (only applies to http:// or https:// remotes)
|
656
682
|
*
|
683
|
+
* :proxy_url ::
|
684
|
+
* The url of an http proxy to use to access the remote repository.
|
685
|
+
*
|
657
686
|
* Example:
|
658
687
|
*
|
659
688
|
* remote = Rugged::Remote.lookup(@repo, 'origin')
|
@@ -679,6 +708,7 @@ static VALUE rb_git_remote_push(int argc, VALUE *argv, VALUE self)
|
|
679
708
|
|
680
709
|
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &opts.callbacks, &payload);
|
681
710
|
init_custom_headers(rb_options, &opts.custom_headers);
|
711
|
+
init_proxy_options(rb_options, &opts.proxy_opts);
|
682
712
|
|
683
713
|
error = git_remote_push(remote, &refspecs, &opts);
|
684
714
|
|
data/ext/rugged/rugged_repo.c
CHANGED
@@ -528,6 +528,13 @@ static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct
|
|
528
528
|
ret->checkout_branch = StringValueCStr(val);
|
529
529
|
}
|
530
530
|
|
531
|
+
val = rb_hash_aref(rb_options, CSTR2SYM("proxy_url"));
|
532
|
+
if (!NIL_P(val)) {
|
533
|
+
Check_Type(val, T_STRING);
|
534
|
+
ret->fetch_opts.proxy_opts.type = GIT_PROXY_SPECIFIED;
|
535
|
+
ret->fetch_opts.proxy_opts.url = StringValueCStr(val);
|
536
|
+
}
|
537
|
+
|
531
538
|
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &ret->fetch_opts.callbacks, remote_payload);
|
532
539
|
}
|
533
540
|
|
@@ -552,6 +559,9 @@ static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct
|
|
552
559
|
* :ignore_cert_errors ::
|
553
560
|
* If set to +true+, errors while validating the remote's host certificate will be ignored.
|
554
561
|
*
|
562
|
+
* :proxy_url ::
|
563
|
+
* The url of an http proxy to use to access the remote repository.
|
564
|
+
*
|
555
565
|
* :credentials ::
|
556
566
|
* The credentials to use for the clone operation. Can be either an instance of one
|
557
567
|
* of the Rugged::Credentials types, or a proc returning one of the former.
|
data/lib/rugged/commit.rb
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
|
6
6
|
module Rugged
|
7
7
|
class Commit
|
8
|
-
|
9
8
|
def self.prettify_message(msg, strip_comments = true)
|
10
9
|
Rugged::prettify_message(msg, strip_comments)
|
11
10
|
end
|
@@ -30,7 +29,7 @@ module Rugged
|
|
30
29
|
#
|
31
30
|
# See Rugged::Tree#diff_workdir for more details.
|
32
31
|
def diff_workdir(options = {})
|
33
|
-
self.tree.diff_workdir(options)
|
32
|
+
self.tree.diff_workdir(**options)
|
34
33
|
end
|
35
34
|
|
36
35
|
# The time when this commit was made effective. This is the same value
|
data/lib/rugged/repository.rb
CHANGED
@@ -30,7 +30,7 @@ module Rugged
|
|
30
30
|
options[:strategy] ||= :safe
|
31
31
|
options.delete(:paths)
|
32
32
|
|
33
|
-
return checkout_head(options) if target == "HEAD"
|
33
|
+
return checkout_head(**options) if target == "HEAD"
|
34
34
|
|
35
35
|
if target.kind_of?(Rugged::Branch)
|
36
36
|
branch = target
|
@@ -39,7 +39,7 @@ module Rugged
|
|
39
39
|
end
|
40
40
|
|
41
41
|
if branch
|
42
|
-
self.checkout_tree(branch.target, options)
|
42
|
+
self.checkout_tree(branch.target, **options)
|
43
43
|
|
44
44
|
if branch.remote?
|
45
45
|
references.create("HEAD", branch.target_id, force: true)
|
@@ -49,7 +49,7 @@ module Rugged
|
|
49
49
|
else
|
50
50
|
commit = Commit.lookup(self, self.rev_parse_oid(target))
|
51
51
|
references.create("HEAD", commit.oid, force: true)
|
52
|
-
self.checkout_tree(commit, options)
|
52
|
+
self.checkout_tree(commit, **options)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -250,12 +250,11 @@ module Rugged
|
|
250
250
|
(blob.type == :blob) ? blob : nil
|
251
251
|
end
|
252
252
|
|
253
|
-
def fetch(remote_or_url, *args)
|
253
|
+
def fetch(remote_or_url, *args, **kwargs)
|
254
254
|
unless remote_or_url.kind_of? Remote
|
255
255
|
remote_or_url = remotes[remote_or_url] || remotes.create_anonymous(remote_or_url)
|
256
256
|
end
|
257
|
-
|
258
|
-
remote_or_url.fetch(*args)
|
257
|
+
remote_or_url.fetch(*args, **kwargs)
|
259
258
|
end
|
260
259
|
|
261
260
|
# Push a list of refspecs to the given remote.
|
@@ -26,8 +26,8 @@ module Rugged
|
|
26
26
|
#
|
27
27
|
# Returns the newly created +submodule+
|
28
28
|
def add(url, path, options = {})
|
29
|
-
submodule = setup_add(url, path, options)
|
30
|
-
clone_submodule(submodule.repository, options)
|
29
|
+
submodule = setup_add(url, path, **options)
|
30
|
+
clone_submodule(submodule.repository, **options)
|
31
31
|
submodule.finalize_add
|
32
32
|
end
|
33
33
|
|
@@ -40,9 +40,9 @@ module Rugged
|
|
40
40
|
# 1. fetches the remote
|
41
41
|
# 2. sets up a master branch to be tracking origin/master
|
42
42
|
# 3. checkouts the submodule
|
43
|
-
def clone_submodule(repo, fetch_options)
|
43
|
+
def clone_submodule(repo, **fetch_options)
|
44
44
|
# the remote was just added by setup_add, no need to check presence
|
45
|
-
repo.remotes['origin'].fetch(fetch_options)
|
45
|
+
repo.remotes['origin'].fetch(**fetch_options)
|
46
46
|
|
47
47
|
repo.branches.create('master','origin/master')
|
48
48
|
repo.branches['master'].upstream = repo.branches['origin/master']
|
data/lib/rugged/version.rb
CHANGED
@@ -7,10 +7,10 @@
|
|
7
7
|
#ifndef INCLUDE_git_version_h__
|
8
8
|
#define INCLUDE_git_version_h__
|
9
9
|
|
10
|
-
#define LIBGIT2_VERSION "1.0.
|
10
|
+
#define LIBGIT2_VERSION "1.0.1"
|
11
11
|
#define LIBGIT2_VER_MAJOR 1
|
12
12
|
#define LIBGIT2_VER_MINOR 0
|
13
|
-
#define LIBGIT2_VER_REVISION
|
13
|
+
#define LIBGIT2_VER_REVISION 1
|
14
14
|
#define LIBGIT2_VER_PATCH 0
|
15
15
|
|
16
16
|
#define LIBGIT2_SOVERSION "1.0"
|
@@ -111,6 +111,15 @@ static int config_file_open(git_config_backend *cfg, git_config_level_t level, c
|
|
111
111
|
if (!git_path_exists(b->file.path))
|
112
112
|
return 0;
|
113
113
|
|
114
|
+
/*
|
115
|
+
* git silently ignores configuration files that are not
|
116
|
+
* readable. We emulate that behavior. This is particularly
|
117
|
+
* important for sandboxed applications on macOS where the
|
118
|
+
* git configuration files may not be readable.
|
119
|
+
*/
|
120
|
+
if (p_access(b->file.path, R_OK) < 0)
|
121
|
+
return GIT_ENOTFOUND;
|
122
|
+
|
114
123
|
if (res < 0 || (res = config_file_read(b->entries, repo, &b->file, level, 0)) < 0) {
|
115
124
|
git_config_entries_free(b->entries);
|
116
125
|
b->entries = NULL;
|
data/vendor/libgit2/src/index.c
CHANGED
@@ -2744,7 +2744,7 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha
|
|
2744
2744
|
++same_len;
|
2745
2745
|
}
|
2746
2746
|
path_len -= same_len;
|
2747
|
-
varint_len = git_encode_varint(NULL, 0, same_len);
|
2747
|
+
varint_len = git_encode_varint(NULL, 0, strlen(last) - same_len);
|
2748
2748
|
}
|
2749
2749
|
|
2750
2750
|
disk_size = index_entry_size(path_len, varint_len, entry->flags);
|
@@ -2795,7 +2795,7 @@ static int write_disk_entry(git_filebuf *file, git_index_entry *entry, const cha
|
|
2795
2795
|
|
2796
2796
|
if (last) {
|
2797
2797
|
varint_len = git_encode_varint((unsigned char *) path,
|
2798
|
-
disk_size, same_len);
|
2798
|
+
disk_size, strlen(last) - same_len);
|
2799
2799
|
assert(varint_len > 0);
|
2800
2800
|
path += varint_len;
|
2801
2801
|
disk_size -= varint_len;
|
data/vendor/libgit2/src/merge.c
CHANGED
@@ -68,6 +68,16 @@ struct merge_diff_df_data {
|
|
68
68
|
git_merge_diff *prev_conflict;
|
69
69
|
};
|
70
70
|
|
71
|
+
/*
|
72
|
+
* This acts as a negative cache entry marker. In case we've tried to calculate
|
73
|
+
* similarity metrics for a given blob already but `git_hashsig` determined
|
74
|
+
* that it's too small in order to have a meaningful hash signature, we will
|
75
|
+
* insert the address of this marker instead of `NULL`. Like this, we can
|
76
|
+
* easily check whether we have checked a gien entry already and skip doing the
|
77
|
+
* calculation again and again.
|
78
|
+
*/
|
79
|
+
static int cache_invalid_marker;
|
80
|
+
|
71
81
|
/* Merge base computation */
|
72
82
|
|
73
83
|
int merge_bases_many(git_commit_list **out, git_revwalk **walk_out, git_repository *repo, size_t length, const git_oid input_array[])
|
@@ -1027,6 +1037,9 @@ static int index_entry_similarity_calc(
|
|
1027
1037
|
git_object_size_t blobsize;
|
1028
1038
|
int error;
|
1029
1039
|
|
1040
|
+
if (*out || *out == &cache_invalid_marker)
|
1041
|
+
return 0;
|
1042
|
+
|
1030
1043
|
*out = NULL;
|
1031
1044
|
|
1032
1045
|
if ((error = git_blob_lookup(&blob, repo, &entry->id)) < 0)
|
@@ -1047,6 +1060,8 @@ static int index_entry_similarity_calc(
|
|
1047
1060
|
error = opts->metric->buffer_signature(out, &diff_file,
|
1048
1061
|
git_blob_rawcontent(blob), (size_t)blobsize,
|
1049
1062
|
opts->metric->payload);
|
1063
|
+
if (error == GIT_EBUFS)
|
1064
|
+
*out = &cache_invalid_marker;
|
1050
1065
|
|
1051
1066
|
git_blob_free(blob);
|
1052
1067
|
|
@@ -1069,18 +1084,16 @@ static int index_entry_similarity_inexact(
|
|
1069
1084
|
return 0;
|
1070
1085
|
|
1071
1086
|
/* update signature cache if needed */
|
1072
|
-
if (
|
1073
|
-
|
1074
|
-
if (!cache[b_idx] && (error = index_entry_similarity_calc(&cache[b_idx], repo, b, opts)) < 0)
|
1087
|
+
if ((error = index_entry_similarity_calc(&cache[a_idx], repo, a, opts)) < 0 ||
|
1088
|
+
(error = index_entry_similarity_calc(&cache[b_idx], repo, b, opts)) < 0)
|
1075
1089
|
return error;
|
1076
1090
|
|
1077
1091
|
/* some metrics may not wish to process this file (too big / too small) */
|
1078
|
-
if (
|
1092
|
+
if (cache[a_idx] == &cache_invalid_marker || cache[b_idx] == &cache_invalid_marker)
|
1079
1093
|
return 0;
|
1080
1094
|
|
1081
1095
|
/* compare signatures */
|
1082
|
-
if (opts->metric->similarity(
|
1083
|
-
&score, cache[a_idx], cache[b_idx], opts->metric->payload) < 0)
|
1096
|
+
if (opts->metric->similarity(&score, cache[a_idx], cache[b_idx], opts->metric->payload) < 0)
|
1084
1097
|
return -1;
|
1085
1098
|
|
1086
1099
|
/* clip score */
|
@@ -1550,7 +1563,7 @@ int git_merge_diff_list__find_renames(
|
|
1550
1563
|
done:
|
1551
1564
|
if (cache != NULL) {
|
1552
1565
|
for (i = 0; i < cache_size; ++i) {
|
1553
|
-
if (cache[i] != NULL)
|
1566
|
+
if (cache[i] != NULL && cache[i] != &cache_invalid_marker)
|
1554
1567
|
opts->metric->free_signature(cache[i], opts->metric->payload);
|
1555
1568
|
}
|
1556
1569
|
|
data/vendor/libgit2/src/stash.c
CHANGED
@@ -173,7 +173,7 @@ static int stash_to_index(
|
|
173
173
|
git_index *index,
|
174
174
|
const char *path)
|
175
175
|
{
|
176
|
-
git_index *repo_index;
|
176
|
+
git_index *repo_index = NULL;
|
177
177
|
git_index_entry entry = {{0}};
|
178
178
|
struct stat st;
|
179
179
|
int error;
|
@@ -187,7 +187,7 @@ static int stash_to_index(
|
|
187
187
|
return error;
|
188
188
|
|
189
189
|
git_index_entry__init_from_stat(&entry, &st,
|
190
|
-
(repo_index
|
190
|
+
(repo_index == NULL || !repo_index->distrust_filemode));
|
191
191
|
|
192
192
|
entry.path = path;
|
193
193
|
|
@@ -1038,6 +1038,7 @@ on_error:
|
|
1038
1038
|
|
1039
1039
|
GIT_INLINE(int) client_read(git_http_client *client)
|
1040
1040
|
{
|
1041
|
+
http_parser_context *parser_context = client->parser.data;
|
1041
1042
|
git_stream *stream;
|
1042
1043
|
char *buf = client->read_buf.ptr + client->read_buf.size;
|
1043
1044
|
size_t max_len;
|
@@ -1054,6 +1055,9 @@ GIT_INLINE(int) client_read(git_http_client *client)
|
|
1054
1055
|
max_len = client->read_buf.asize - client->read_buf.size;
|
1055
1056
|
max_len = min(max_len, INT_MAX);
|
1056
1057
|
|
1058
|
+
if (parser_context->output_size)
|
1059
|
+
max_len = min(max_len, parser_context->output_size);
|
1060
|
+
|
1057
1061
|
if (max_len == 0) {
|
1058
1062
|
git_error_set(GIT_ERROR_HTTP, "no room in output buffer");
|
1059
1063
|
return -1;
|
@@ -1191,7 +1195,7 @@ static void complete_response_body(git_http_client *client)
|
|
1191
1195
|
/* If we're not keeping alive, don't bother. */
|
1192
1196
|
if (!client->keepalive) {
|
1193
1197
|
client->connected = 0;
|
1194
|
-
|
1198
|
+
goto done;
|
1195
1199
|
}
|
1196
1200
|
|
1197
1201
|
parser_context.client = client;
|
@@ -1205,6 +1209,9 @@ static void complete_response_body(git_http_client *client)
|
|
1205
1209
|
git_error_clear();
|
1206
1210
|
client->connected = 0;
|
1207
1211
|
}
|
1212
|
+
|
1213
|
+
done:
|
1214
|
+
git_buf_clear(&client->read_buf);
|
1208
1215
|
}
|
1209
1216
|
|
1210
1217
|
int git_http_client_send_request(
|
@@ -1419,15 +1426,20 @@ int git_http_client_read_body(
|
|
1419
1426
|
client->parser.data = &parser_context;
|
1420
1427
|
|
1421
1428
|
/*
|
1422
|
-
* Clients expect to get a non-zero amount of data from us
|
1423
|
-
*
|
1424
|
-
*
|
1429
|
+
* Clients expect to get a non-zero amount of data from us,
|
1430
|
+
* so we either block until we have data to return, until we
|
1431
|
+
* hit EOF or there's an error. Do this in a loop, since we
|
1432
|
+
* may end up reading only some stream metadata (like chunk
|
1433
|
+
* information).
|
1425
1434
|
*/
|
1426
1435
|
while (!parser_context.output_written) {
|
1427
1436
|
error = client_read_and_parse(client);
|
1428
1437
|
|
1429
1438
|
if (error <= 0)
|
1430
1439
|
goto done;
|
1440
|
+
|
1441
|
+
if (client->state == DONE)
|
1442
|
+
break;
|
1431
1443
|
}
|
1432
1444
|
|
1433
1445
|
assert(parser_context.output_written <= INT_MAX);
|
@@ -506,7 +506,7 @@ int git_worktree_prune_options_init(
|
|
506
506
|
return 0;
|
507
507
|
}
|
508
508
|
|
509
|
-
int
|
509
|
+
int git_worktree_prune_init_options(git_worktree_prune_options *opts,
|
510
510
|
unsigned int version)
|
511
511
|
{
|
512
512
|
return git_worktree_prune_options_init(opts, version);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugged
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chacon
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-06-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|
@@ -674,7 +674,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
674
674
|
- !ruby/object:Gem::Version
|
675
675
|
version: '0'
|
676
676
|
requirements: []
|
677
|
-
rubygems_version: 3.
|
677
|
+
rubygems_version: 3.0.3
|
678
678
|
signing_key:
|
679
679
|
specification_version: 4
|
680
680
|
summary: Rugged is a Ruby binding to the libgit2 linkable library
|