rugged 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|