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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3da2dd9613a57a897d79059d83ed3383a8b814dda9dd3b0a850dc52addc354c0
4
- data.tar.gz: 27a171313a2b9c7031ec1e5f104676934b16a347487a4533a660b47e98e77eac
3
+ metadata.gz: 8a71025a0b98dfed66af094ccdc24138d61bf4159eb05c49bf8fb9823a5ba34b
4
+ data.tar.gz: c1e1978022f16609de31a310a476c8f0d96cc26018c92f41bd7c10d5fac42cd2
5
5
  SHA512:
6
- metadata.gz: f5c3e519057e1154b0245b221524fcda071ddaae994c81d277fa466adc20ec38f83d69b6632ab5ab65ceadbd903c400d81f1f31cec8b6b214d14a7b9c48cd390
7
- data.tar.gz: e0a2246325bdf104f4d2c9a5654694705d7fd41674f0dd520888067cdfa8939877a05cdaa34baeff954555fd4528ea668af8446ff450f9080601b7e8a0d9b2c6
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 CMake with:
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.`.
@@ -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, rb_ary_new3(1, rb_str_new_utf8(entry->name)), exception);
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
  }
@@ -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, NULL, &custom_headers)) ||
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, NULL, &custom_headers);
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
 
@@ -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.
@@ -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
@@ -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']
@@ -4,5 +4,5 @@
4
4
  # For full terms see the included LICENSE file.
5
5
 
6
6
  module Rugged
7
- Version = VERSION = '1.0.0'
7
+ Version = VERSION = '1.0.1'
8
8
  end
@@ -25,7 +25,7 @@
25
25
  /* See man page endian(3) */
26
26
  # include <endian.h>
27
27
  # define htonll htobe64
28
- #elif defined(__OpenBSD__)
28
+ #elif defined(__NetBSD__) || defined(__OpenBSD__)
29
29
  /* See man page htobe64(3) */
30
30
  # include <endian.h>
31
31
  # define htonll htobe64
@@ -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.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 0
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;
@@ -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;
@@ -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 (!cache[a_idx] && (error = index_entry_similarity_calc(&cache[a_idx], repo, a, opts)) < 0)
1073
- return error;
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 (!cache[a_idx] || !cache[b_idx])
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
 
@@ -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 != NULL || !repo_index->distrust_filemode));
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
- return;
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
- * With a sufficiently small buffer, one might only read a chunk
1424
- * length. Loop until we actually have data to return.
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 git_worktree_pruneinit_options(git_worktree_prune_options *opts,
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.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-04-03 00:00:00.000000000 Z
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.1.2
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