rugged 0.23.0b2 → 0.23.0b4
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/ext/rugged/rugged_blob.c +39 -0
- data/ext/rugged/rugged_diff.c +7 -3
- data/ext/rugged/rugged_index.c +2 -2
- data/ext/rugged/rugged_remote.c +27 -148
- data/ext/rugged/rugged_remote_collection.c +134 -12
- data/ext/rugged/rugged_repo.c +74 -5
- data/ext/rugged/rugged_submodule.c +18 -208
- data/ext/rugged/rugged_submodule_collection.c +148 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +33 -25
- data/vendor/libgit2/deps/winhttp/winhttp.def +29 -29
- data/vendor/libgit2/include/git2.h +1 -1
- data/vendor/libgit2/include/git2/blob.h +4 -6
- data/vendor/libgit2/include/git2/checkout.h +10 -1
- data/vendor/libgit2/include/git2/clone.h +6 -7
- data/vendor/libgit2/include/git2/commit.h +11 -0
- data/vendor/libgit2/include/git2/cred_helpers.h +2 -2
- data/vendor/libgit2/include/git2/describe.h +1 -1
- data/vendor/libgit2/include/git2/diff.h +68 -11
- data/vendor/libgit2/include/git2/errors.h +4 -1
- data/vendor/libgit2/include/git2/filter.h +16 -0
- data/vendor/libgit2/include/git2/index.h +38 -11
- data/vendor/libgit2/include/git2/odb.h +1 -1
- data/vendor/libgit2/include/git2/odb_backend.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +300 -207
- data/vendor/libgit2/include/git2/reset.h +1 -0
- data/vendor/libgit2/include/git2/stash.h +135 -4
- data/vendor/libgit2/include/git2/status.h +1 -0
- data/vendor/libgit2/include/git2/submodule.h +46 -75
- data/vendor/libgit2/include/git2/sys/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/sys/stream.h +2 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -21
- data/vendor/libgit2/include/git2/transport.h +27 -0
- data/vendor/libgit2/include/git2/types.h +20 -10
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/libgit2.pc.in +4 -2
- data/vendor/libgit2/src/attr.c +2 -1
- data/vendor/libgit2/src/attr_file.c +18 -37
- data/vendor/libgit2/src/blame.c +2 -2
- data/vendor/libgit2/src/blob.c +4 -3
- data/vendor/libgit2/src/branch.c +6 -3
- data/vendor/libgit2/src/buf_text.c +4 -6
- data/vendor/libgit2/src/buf_text.h +1 -2
- data/vendor/libgit2/src/buffer.c +8 -6
- data/vendor/libgit2/src/buffer.h +1 -1
- data/vendor/libgit2/src/cache.c +1 -0
- data/vendor/libgit2/src/checkout.c +34 -20
- data/vendor/libgit2/src/clone.c +29 -29
- data/vendor/libgit2/src/commit.c +65 -0
- data/vendor/libgit2/src/common.h +5 -0
- data/vendor/libgit2/src/config.c +20 -0
- data/vendor/libgit2/src/config.h +6 -0
- data/vendor/libgit2/src/config_file.c +2 -2
- data/vendor/libgit2/src/crlf.c +39 -17
- data/vendor/libgit2/src/curl_stream.c +257 -0
- data/vendor/libgit2/src/curl_stream.h +14 -0
- data/vendor/libgit2/src/diff.c +223 -88
- data/vendor/libgit2/src/diff.h +21 -1
- data/vendor/libgit2/src/diff_file.c +23 -13
- data/vendor/libgit2/src/diff_file.h +4 -2
- data/vendor/libgit2/src/diff_patch.c +266 -71
- data/vendor/libgit2/src/diff_patch.h +36 -0
- data/vendor/libgit2/src/diff_print.c +156 -126
- data/vendor/libgit2/src/diff_tform.c +32 -54
- data/vendor/libgit2/src/fetch.c +27 -10
- data/vendor/libgit2/src/fetch.h +2 -2
- data/vendor/libgit2/src/filebuf.c +1 -1
- data/vendor/libgit2/src/fileops.c +6 -2
- data/vendor/libgit2/src/filter.c +28 -7
- data/vendor/libgit2/src/fnmatch.c +5 -5
- data/vendor/libgit2/src/global.c +16 -0
- data/vendor/libgit2/src/ident.c +2 -2
- data/vendor/libgit2/src/ignore.c +1 -0
- data/vendor/libgit2/src/index.c +338 -80
- data/vendor/libgit2/src/index.h +4 -1
- data/vendor/libgit2/src/indexer.c +19 -5
- data/vendor/libgit2/src/iterator.c +118 -11
- data/vendor/libgit2/src/iterator.h +25 -0
- data/vendor/libgit2/src/merge.c +96 -106
- data/vendor/libgit2/src/merge.h +14 -4
- data/vendor/libgit2/src/netops.c +3 -3
- data/vendor/libgit2/src/odb.c +17 -9
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +2 -2
- data/vendor/libgit2/src/odb_pack.c +1 -1
- data/vendor/libgit2/src/openssl_stream.c +118 -27
- data/vendor/libgit2/src/pack-objects.c +28 -0
- data/vendor/libgit2/src/pack-objects.h +1 -0
- data/vendor/libgit2/src/pack.c +18 -10
- data/vendor/libgit2/src/path.c +16 -11
- data/vendor/libgit2/src/path.h +1 -1
- data/vendor/libgit2/src/push.c +26 -42
- data/vendor/libgit2/src/push.h +2 -34
- data/vendor/libgit2/src/rebase.c +1 -1
- data/vendor/libgit2/src/refs.c +1 -1
- data/vendor/libgit2/src/refspec.c +6 -0
- data/vendor/libgit2/src/remote.c +381 -274
- data/vendor/libgit2/src/remote.h +0 -4
- data/vendor/libgit2/src/repository.c +33 -12
- data/vendor/libgit2/src/repository.h +0 -1
- data/vendor/libgit2/src/reset.c +1 -0
- data/vendor/libgit2/src/stash.c +439 -17
- data/vendor/libgit2/src/status.c +6 -0
- data/vendor/libgit2/src/stransport_stream.c +58 -21
- data/vendor/libgit2/src/stream.h +15 -0
- data/vendor/libgit2/src/submodule.c +410 -664
- data/vendor/libgit2/src/submodule.h +0 -24
- data/vendor/libgit2/src/transaction.c +1 -0
- data/vendor/libgit2/src/transports/cred.c +55 -1
- data/vendor/libgit2/src/transports/http.c +18 -2
- data/vendor/libgit2/src/transports/local.c +60 -59
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -11
- data/vendor/libgit2/src/transports/ssh.c +46 -7
- data/vendor/libgit2/src/unix/posix.h +4 -0
- data/vendor/libgit2/src/util.c +9 -9
- data/vendor/libgit2/src/util.h +9 -0
- data/vendor/libgit2/src/win32/posix.h +3 -0
- data/vendor/libgit2/src/win32/posix_w32.c +38 -0
- data/vendor/libgit2/src/win32/w32_util.h +10 -0
- metadata +4 -3
- data/vendor/libgit2/include/git2/push.h +0 -94
data/ext/rugged/rugged_repo.c
CHANGED
|
@@ -410,7 +410,6 @@ static VALUE rb_git_repo_init_at(int argc, VALUE *argv, VALUE klass)
|
|
|
410
410
|
|
|
411
411
|
static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct rugged_remote_cb_payload *remote_payload)
|
|
412
412
|
{
|
|
413
|
-
git_remote_callbacks remote_callbacks = GIT_REMOTE_CALLBACKS_INIT;
|
|
414
413
|
VALUE val;
|
|
415
414
|
|
|
416
415
|
if (NIL_P(rb_options))
|
|
@@ -426,9 +425,7 @@ static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct
|
|
|
426
425
|
ret->checkout_branch = StringValueCStr(val);
|
|
427
426
|
}
|
|
428
427
|
|
|
429
|
-
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &
|
|
430
|
-
|
|
431
|
-
ret->remote_callbacks = remote_callbacks;
|
|
428
|
+
rugged_remote_init_callbacks_and_payload_from_options(rb_options, &ret->fetch_opts.callbacks, remote_payload);
|
|
432
429
|
}
|
|
433
430
|
|
|
434
431
|
/*
|
|
@@ -593,6 +590,75 @@ static VALUE rb_git_repo_get_config(VALUE self)
|
|
|
593
590
|
RB_GIT_REPO_OWNED_GET(rb_cRuggedConfig, config);
|
|
594
591
|
}
|
|
595
592
|
|
|
593
|
+
/*
|
|
594
|
+
* call-seq:
|
|
595
|
+
* repo.ident = ident
|
|
596
|
+
*
|
|
597
|
+
* Set the identity to be used for writing reflogs.
|
|
598
|
+
*
|
|
599
|
+
* +ident+ can be either +nil+ or a Hash containing +name+ and/or +email+ entries.
|
|
600
|
+
*/
|
|
601
|
+
static VALUE rb_git_repo_set_ident(VALUE self, VALUE rb_ident) {
|
|
602
|
+
VALUE rb_val;
|
|
603
|
+
|
|
604
|
+
git_repository *repo;
|
|
605
|
+
const char *name = NULL, *email = NULL;
|
|
606
|
+
|
|
607
|
+
Data_Get_Struct(self, git_repository, repo);
|
|
608
|
+
|
|
609
|
+
if (!NIL_P(rb_ident)) {
|
|
610
|
+
Check_Type(rb_ident, T_HASH);
|
|
611
|
+
|
|
612
|
+
if (!NIL_P(rb_val = rb_hash_aref(rb_ident, CSTR2SYM("name")))) {
|
|
613
|
+
Check_Type(rb_val, T_STRING);
|
|
614
|
+
name = StringValueCStr(rb_val);
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
if (!NIL_P(rb_val = rb_hash_aref(rb_ident, CSTR2SYM("email")))) {
|
|
618
|
+
Check_Type(rb_val, T_STRING);
|
|
619
|
+
email = StringValueCStr(rb_val);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
rugged_exception_check(
|
|
624
|
+
git_repository_set_ident(repo, name, email)
|
|
625
|
+
);
|
|
626
|
+
|
|
627
|
+
return Qnil;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/*
|
|
631
|
+
* call-seq:
|
|
632
|
+
* repo.ident -> ident
|
|
633
|
+
*
|
|
634
|
+
* Return a Hash containing the identity that is used to write reflogs.
|
|
635
|
+
*
|
|
636
|
+
* +ident+ is a Hash containing +name+ and/or +email+ entries, or `nil`.
|
|
637
|
+
*/
|
|
638
|
+
static VALUE rb_git_repo_get_ident(VALUE self)
|
|
639
|
+
{
|
|
640
|
+
VALUE rb_ident = rb_hash_new();
|
|
641
|
+
|
|
642
|
+
git_repository *repo;
|
|
643
|
+
const char *name = NULL, *email = NULL;
|
|
644
|
+
|
|
645
|
+
Data_Get_Struct(self, git_repository, repo);
|
|
646
|
+
|
|
647
|
+
rugged_exception_check(
|
|
648
|
+
git_repository_ident(&name, &email, repo)
|
|
649
|
+
);
|
|
650
|
+
|
|
651
|
+
if (name) {
|
|
652
|
+
rb_hash_aset(rb_ident, CSTR2SYM("name"), rb_str_new_utf8(name));
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
if (email) {
|
|
656
|
+
rb_hash_aset(rb_ident, CSTR2SYM("email"), rb_str_new_utf8(email));
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
return rb_ident;
|
|
660
|
+
}
|
|
661
|
+
|
|
596
662
|
/*
|
|
597
663
|
* call-seq:
|
|
598
664
|
* repo.merge_base(oid1, oid2, ...)
|
|
@@ -2240,7 +2306,7 @@ static VALUE rb_git_repo_attributes(int argc, VALUE *argv, VALUE self)
|
|
|
2240
2306
|
VALUE rb_result;
|
|
2241
2307
|
const char **values;
|
|
2242
2308
|
const char **names;
|
|
2243
|
-
|
|
2309
|
+
long i, num_attr = RARRAY_LEN(rb_names);
|
|
2244
2310
|
|
|
2245
2311
|
if (num_attr > 32)
|
|
2246
2312
|
rb_raise(rb_eRuntimeError, "Too many attributes requested");
|
|
@@ -2386,6 +2452,9 @@ void Init_rugged_repo(void)
|
|
|
2386
2452
|
rb_define_method(rb_cRuggedRepo, "config", rb_git_repo_get_config, 0);
|
|
2387
2453
|
rb_define_method(rb_cRuggedRepo, "config=", rb_git_repo_set_config, 1);
|
|
2388
2454
|
|
|
2455
|
+
rb_define_method(rb_cRuggedRepo, "ident", rb_git_repo_get_ident, 0);
|
|
2456
|
+
rb_define_method(rb_cRuggedRepo, "ident=", rb_git_repo_set_ident, 1);
|
|
2457
|
+
|
|
2389
2458
|
rb_define_method(rb_cRuggedRepo, "bare?", rb_git_repo_is_bare, 0);
|
|
2390
2459
|
rb_define_method(rb_cRuggedRepo, "shallow?", rb_git_repo_is_shallow, 0);
|
|
2391
2460
|
rb_define_method(rb_cRuggedRepo, "empty?", rb_git_repo_is_empty, 0);
|
|
@@ -164,13 +164,18 @@ static VALUE submodule_status_flags_to_rb(unsigned int flags)
|
|
|
164
164
|
*/
|
|
165
165
|
static VALUE rb_git_submodule_status(VALUE self)
|
|
166
166
|
{
|
|
167
|
+
VALUE rb_repo = rugged_owner(self);
|
|
167
168
|
git_submodule *submodule;
|
|
169
|
+
git_repository *repo;
|
|
168
170
|
unsigned int flags;
|
|
169
171
|
|
|
172
|
+
rugged_check_repo(rb_repo);
|
|
173
|
+
Data_Get_Struct(rb_repo, git_repository, repo);
|
|
170
174
|
Data_Get_Struct(self, git_submodule, submodule);
|
|
171
175
|
|
|
172
176
|
rugged_exception_check(
|
|
173
|
-
git_submodule_status(&flags, submodule)
|
|
177
|
+
git_submodule_status(&flags, repo, git_submodule_name(submodule),
|
|
178
|
+
GIT_SUBMODULE_IGNORE_UNSPECIFIED)
|
|
174
179
|
);
|
|
175
180
|
|
|
176
181
|
return submodule_status_flags_to_rb(flags);
|
|
@@ -231,11 +236,16 @@ static VALUE rb_git_submodule_status_in_workdir(VALUE self)
|
|
|
231
236
|
}
|
|
232
237
|
|
|
233
238
|
#define RB_GIT_SUBMODULE_STATUS_FLAG_CHECK(flag) \
|
|
239
|
+
VALUE rb_repo = rugged_owner(self); \
|
|
240
|
+
git_repository *repo; \
|
|
234
241
|
git_submodule *submodule; \
|
|
235
242
|
unsigned int flags; \
|
|
243
|
+
rugged_check_repo(rb_repo); \
|
|
244
|
+
Data_Get_Struct(rb_repo, git_repository, repo); \
|
|
236
245
|
Data_Get_Struct(self, git_submodule, submodule); \
|
|
237
246
|
rugged_exception_check( \
|
|
238
|
-
git_submodule_status(&flags, submodule) \
|
|
247
|
+
git_submodule_status(&flags, repo, git_submodule_name(submodule), \
|
|
248
|
+
GIT_SUBMODULE_IGNORE_UNSPECIFIED) \
|
|
239
249
|
); \
|
|
240
250
|
return (flags & flag) ? Qtrue : Qfalse; \
|
|
241
251
|
|
|
@@ -350,11 +360,16 @@ static VALUE rb_git_submodule_status_untracked_files_in_workdir(VALUE self)
|
|
|
350
360
|
}
|
|
351
361
|
|
|
352
362
|
#define RB_GIT_SUBMODULE_STATUS_CHECK(check) \
|
|
363
|
+
VALUE rb_repo = rugged_owner(self); \
|
|
364
|
+
git_repository *repo; \
|
|
353
365
|
git_submodule *submodule; \
|
|
354
366
|
unsigned int flags; \
|
|
367
|
+
rugged_check_repo(rb_repo); \
|
|
368
|
+
Data_Get_Struct(rb_repo, git_repository, repo); \
|
|
355
369
|
Data_Get_Struct(self, git_submodule, submodule); \
|
|
356
370
|
rugged_exception_check( \
|
|
357
|
-
git_submodule_status(&flags, submodule) \
|
|
371
|
+
git_submodule_status(&flags, repo, git_submodule_name(submodule), \
|
|
372
|
+
GIT_SUBMODULE_IGNORE_UNSPECIFIED) \
|
|
358
373
|
); \
|
|
359
374
|
return check(flags) ? Qtrue : Qfalse; \
|
|
360
375
|
|
|
@@ -442,27 +457,6 @@ static VALUE rb_git_submodule_reload(VALUE self)
|
|
|
442
457
|
return self;
|
|
443
458
|
}
|
|
444
459
|
|
|
445
|
-
/*
|
|
446
|
-
* call-seq:
|
|
447
|
-
* submodule.save -> submodule
|
|
448
|
-
*
|
|
449
|
-
* Write submodule settings to +.gitmodules+ file.
|
|
450
|
-
*
|
|
451
|
-
* This commits any in-memory changes to the submodule to the +.gitmodules+
|
|
452
|
-
* file on disk.
|
|
453
|
-
*/
|
|
454
|
-
static VALUE rb_git_submodule_save(VALUE self)
|
|
455
|
-
{
|
|
456
|
-
git_submodule *submodule;
|
|
457
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
458
|
-
|
|
459
|
-
rugged_exception_check(
|
|
460
|
-
git_submodule_save(submodule)
|
|
461
|
-
);
|
|
462
|
-
|
|
463
|
-
return self;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
460
|
/*
|
|
467
461
|
* call-seq:
|
|
468
462
|
* submodule.sync -> submodule
|
|
@@ -563,33 +557,6 @@ static VALUE rb_git_submodule_url(VALUE self)
|
|
|
563
557
|
return url ? rb_str_new_utf8(url) : Qnil;
|
|
564
558
|
}
|
|
565
559
|
|
|
566
|
-
/*
|
|
567
|
-
* call-seq:
|
|
568
|
-
* submodule.url = url -> url
|
|
569
|
-
*
|
|
570
|
-
* Set the URL in memory for the submodule.
|
|
571
|
-
*
|
|
572
|
-
* This will be used for any following submodule actions while this submodule
|
|
573
|
-
* data is in memory.
|
|
574
|
-
*
|
|
575
|
-
* After calling this, #save can be called to write the changes back to
|
|
576
|
-
* the +.gitmodules+ file and #sync to write the changes to the checked out
|
|
577
|
-
* submodule repository.
|
|
578
|
-
*/
|
|
579
|
-
static VALUE rb_git_submodule_set_url(VALUE self, VALUE rb_url)
|
|
580
|
-
{
|
|
581
|
-
git_submodule *submodule;
|
|
582
|
-
|
|
583
|
-
Check_Type(rb_url, T_STRING);
|
|
584
|
-
|
|
585
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
586
|
-
|
|
587
|
-
rugged_exception_check(
|
|
588
|
-
git_submodule_set_url(submodule, StringValueCStr(rb_url))
|
|
589
|
-
);
|
|
590
|
-
return rb_url;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
560
|
/*
|
|
594
561
|
* call-seq:
|
|
595
562
|
* submodule.path -> string
|
|
@@ -680,28 +647,6 @@ static VALUE rb_git_submodule_fetch_recurse_submodules(VALUE self)
|
|
|
680
647
|
return git_submodule_fetch_recurse_submodules(submodule) ? Qtrue : Qfalse;
|
|
681
648
|
}
|
|
682
649
|
|
|
683
|
-
/*
|
|
684
|
-
* call-seq:
|
|
685
|
-
* submodule.fetch_recurse_submodules= bool -> bool
|
|
686
|
-
*
|
|
687
|
-
* Set the +fetchRecurseSubmodules+ rule in memory for a submodule.
|
|
688
|
-
*
|
|
689
|
-
* This sets the <tt>submodule.<name>.fetchRecurseSubmodules</tt> value for
|
|
690
|
-
* the submodule. #save can be called to persist the new value.
|
|
691
|
-
*/
|
|
692
|
-
static VALUE rb_git_submodule_set_fetch_recurse_submodules(VALUE self, VALUE rb_fetch_recursive)
|
|
693
|
-
{
|
|
694
|
-
git_submodule *submodule;
|
|
695
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
696
|
-
|
|
697
|
-
git_submodule_set_fetch_recurse_submodules(
|
|
698
|
-
submodule,
|
|
699
|
-
rugged_parse_bool(rb_fetch_recursive)
|
|
700
|
-
);
|
|
701
|
-
|
|
702
|
-
return rb_fetch_recursive;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
650
|
static VALUE rb_git_subm_ignore_rule_fromC(git_submodule_ignore_t rule)
|
|
706
651
|
{
|
|
707
652
|
switch(rule) {
|
|
@@ -754,72 +699,6 @@ static VALUE rb_git_submodule_ignore_rule(VALUE self)
|
|
|
754
699
|
return rb_git_subm_ignore_rule_fromC(ignore);
|
|
755
700
|
}
|
|
756
701
|
|
|
757
|
-
static git_submodule_ignore_t rb_git_subm_ignore_rule_toC(VALUE rb_ignore_rule)
|
|
758
|
-
{
|
|
759
|
-
ID id_ignore_rule;
|
|
760
|
-
|
|
761
|
-
Check_Type(rb_ignore_rule, T_SYMBOL);
|
|
762
|
-
id_ignore_rule = SYM2ID(rb_ignore_rule);
|
|
763
|
-
|
|
764
|
-
if (id_ignore_rule == id_ignore_none) {
|
|
765
|
-
return GIT_SUBMODULE_IGNORE_NONE;
|
|
766
|
-
} else if (id_ignore_rule == id_ignore_untracked) {
|
|
767
|
-
return GIT_SUBMODULE_IGNORE_UNTRACKED;
|
|
768
|
-
} else if (id_ignore_rule == id_ignore_dirty) {
|
|
769
|
-
return GIT_SUBMODULE_IGNORE_DIRTY;
|
|
770
|
-
} else if (id_ignore_rule == id_ignore_all) {
|
|
771
|
-
return GIT_SUBMODULE_IGNORE_ALL;
|
|
772
|
-
} else {
|
|
773
|
-
rb_raise(rb_eArgError, "Invalid submodule ignore rule type.");
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
/*
|
|
778
|
-
* call-seq:
|
|
779
|
-
* submodule.ignore_rule = rule -> rule
|
|
780
|
-
*
|
|
781
|
-
* Set the ignore_rule to +rule+ in memory for a submodule.
|
|
782
|
-
* See #ignore for a list of accepted rules.
|
|
783
|
-
*
|
|
784
|
-
* This will be used for any following actions (such as
|
|
785
|
-
* #status) while the submodule is in memory. The ignore
|
|
786
|
-
* rule can be persisted to the config with #save.
|
|
787
|
-
*
|
|
788
|
-
* Calling #reset_ignore_rule or #reload will
|
|
789
|
-
* revert the rule to the value that was in the config.
|
|
790
|
-
*/
|
|
791
|
-
static VALUE rb_git_submodule_set_ignore_rule(VALUE self, VALUE rb_ignore_rule)
|
|
792
|
-
{
|
|
793
|
-
git_submodule *submodule;
|
|
794
|
-
|
|
795
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
796
|
-
|
|
797
|
-
git_submodule_set_ignore(
|
|
798
|
-
submodule,
|
|
799
|
-
rb_git_subm_ignore_rule_toC(rb_ignore_rule)
|
|
800
|
-
);
|
|
801
|
-
|
|
802
|
-
return rb_ignore_rule;
|
|
803
|
-
}
|
|
804
|
-
|
|
805
|
-
/*
|
|
806
|
-
* call-seq:
|
|
807
|
-
* submodule.reset_ignore_rule -> submodule
|
|
808
|
-
*
|
|
809
|
-
* Revert the ignore rule set by #ignore_rule= to the value that
|
|
810
|
-
* was in the config.
|
|
811
|
-
*/
|
|
812
|
-
static VALUE rb_git_submodule_reset_ignore_rule(VALUE self)
|
|
813
|
-
{
|
|
814
|
-
git_submodule *submodule;
|
|
815
|
-
|
|
816
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
817
|
-
|
|
818
|
-
git_submodule_set_ignore(submodule, GIT_SUBMODULE_IGNORE_RESET);
|
|
819
|
-
|
|
820
|
-
return self;
|
|
821
|
-
}
|
|
822
|
-
|
|
823
702
|
static VALUE rb_git_subm_update_rule_fromC(git_submodule_update_t rule)
|
|
824
703
|
{
|
|
825
704
|
switch(rule) {
|
|
@@ -867,68 +746,6 @@ static VALUE rb_git_submodule_update_rule(VALUE self)
|
|
|
867
746
|
return rb_git_subm_update_rule_fromC(update);
|
|
868
747
|
}
|
|
869
748
|
|
|
870
|
-
static git_submodule_update_t rb_git_subm_update_rule_toC(VALUE rb_update_rule)
|
|
871
|
-
{
|
|
872
|
-
ID id_update_rule;
|
|
873
|
-
|
|
874
|
-
Check_Type(rb_update_rule, T_SYMBOL);
|
|
875
|
-
id_update_rule = SYM2ID(rb_update_rule);
|
|
876
|
-
|
|
877
|
-
if (id_update_rule == id_update_checkout) {
|
|
878
|
-
return GIT_SUBMODULE_UPDATE_CHECKOUT;
|
|
879
|
-
} else if (id_update_rule == id_update_rebase) {
|
|
880
|
-
return GIT_SUBMODULE_UPDATE_REBASE;
|
|
881
|
-
} else if (id_update_rule == id_update_merge) {
|
|
882
|
-
return GIT_SUBMODULE_UPDATE_MERGE;
|
|
883
|
-
} else if (id_update_rule == id_update_none) {
|
|
884
|
-
return GIT_SUBMODULE_UPDATE_NONE;
|
|
885
|
-
} else {
|
|
886
|
-
rb_raise(rb_eArgError, "Invalid submodule update rule type.");
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
/*
|
|
891
|
-
* call-seq:
|
|
892
|
-
* submodule.update_rule = rule -> rule
|
|
893
|
-
*
|
|
894
|
-
* Set the update_rule to +rule+ in memory for a submodule.
|
|
895
|
-
* See #update_rule for a list of accepted rules.
|
|
896
|
-
*
|
|
897
|
-
* Calling #reset_update_rule or #reload will
|
|
898
|
-
* revert the +rule+ to the value that was in the config.
|
|
899
|
-
*/
|
|
900
|
-
static VALUE rb_git_submodule_set_update_rule(VALUE self, VALUE rb_update_rule)
|
|
901
|
-
{
|
|
902
|
-
git_submodule *submodule;
|
|
903
|
-
|
|
904
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
905
|
-
|
|
906
|
-
git_submodule_set_update(
|
|
907
|
-
submodule,
|
|
908
|
-
rb_git_subm_update_rule_toC(rb_update_rule)
|
|
909
|
-
);
|
|
910
|
-
|
|
911
|
-
return rb_update_rule;
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
/*
|
|
915
|
-
* call-seq:
|
|
916
|
-
* submodule.reset_update_rule -> submodule
|
|
917
|
-
*
|
|
918
|
-
* Revert the update rule set by #update_rule= to the value that
|
|
919
|
-
* was in the config.
|
|
920
|
-
*/
|
|
921
|
-
static VALUE rb_git_submodule_reset_update_rule(VALUE self)
|
|
922
|
-
{
|
|
923
|
-
git_submodule *submodule;
|
|
924
|
-
|
|
925
|
-
Data_Get_Struct(self, git_submodule, submodule);
|
|
926
|
-
|
|
927
|
-
git_submodule_set_update(submodule, GIT_SUBMODULE_UPDATE_RESET);
|
|
928
|
-
|
|
929
|
-
return self;
|
|
930
|
-
}
|
|
931
|
-
|
|
932
749
|
/*
|
|
933
750
|
* call-seq:
|
|
934
751
|
* submodule.repository -> repository
|
|
@@ -997,17 +814,11 @@ void Init_rugged_submodule(void)
|
|
|
997
814
|
|
|
998
815
|
rb_define_method(rb_cRuggedSubmodule, "name", rb_git_submodule_name, 0);
|
|
999
816
|
rb_define_method(rb_cRuggedSubmodule, "url", rb_git_submodule_url, 0);
|
|
1000
|
-
rb_define_method(rb_cRuggedSubmodule, "url=", rb_git_submodule_set_url, 1);
|
|
1001
817
|
rb_define_method(rb_cRuggedSubmodule, "path", rb_git_submodule_path, 0);
|
|
1002
818
|
rb_define_method(rb_cRuggedSubmodule, "fetch_recurse_submodules?", rb_git_submodule_fetch_recurse_submodules, 0);
|
|
1003
|
-
rb_define_method(rb_cRuggedSubmodule, "fetch_recurse_submodules=", rb_git_submodule_set_fetch_recurse_submodules, 1);
|
|
1004
819
|
|
|
1005
820
|
rb_define_method(rb_cRuggedSubmodule, "ignore_rule", rb_git_submodule_ignore_rule, 0);
|
|
1006
|
-
rb_define_method(rb_cRuggedSubmodule, "ignore_rule=", rb_git_submodule_set_ignore_rule, 1);
|
|
1007
|
-
rb_define_method(rb_cRuggedSubmodule, "reset_ignore_rule", rb_git_submodule_reset_ignore_rule, 0);
|
|
1008
821
|
rb_define_method(rb_cRuggedSubmodule, "update_rule", rb_git_submodule_update_rule, 0);
|
|
1009
|
-
rb_define_method(rb_cRuggedSubmodule, "update_rule=", rb_git_submodule_set_update_rule, 1);
|
|
1010
|
-
rb_define_method(rb_cRuggedSubmodule, "reset_update_rule", rb_git_submodule_reset_update_rule, 0);
|
|
1011
822
|
|
|
1012
823
|
rb_define_method(rb_cRuggedSubmodule, "head_oid", rb_git_submodule_head_id, 0);
|
|
1013
824
|
rb_define_method(rb_cRuggedSubmodule, "index_oid", rb_git_submodule_index_id, 0);
|
|
@@ -1036,7 +847,6 @@ void Init_rugged_submodule(void)
|
|
|
1036
847
|
|
|
1037
848
|
rb_define_method(rb_cRuggedSubmodule, "add_to_index", rb_git_submodule_add_to_index, -1);
|
|
1038
849
|
rb_define_method(rb_cRuggedSubmodule, "reload", rb_git_submodule_reload, 0);
|
|
1039
|
-
rb_define_method(rb_cRuggedSubmodule, "save", rb_git_submodule_save, 0);
|
|
1040
850
|
rb_define_method(rb_cRuggedSubmodule, "sync", rb_git_submodule_sync, 0);
|
|
1041
851
|
rb_define_method(rb_cRuggedSubmodule, "init", rb_git_submodule_init, -1);
|
|
1042
852
|
}
|
|
@@ -224,6 +224,151 @@ static VALUE rb_git_submodule_setup_add(int argc, VALUE *argv, VALUE self)
|
|
|
224
224
|
return rugged_submodule_new(rb_repo, submodule);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
static git_submodule_ignore_t rb_git_subm_ignore_rule_toC(VALUE rb_ignore_rule)
|
|
228
|
+
{
|
|
229
|
+
ID id_ignore_rule;
|
|
230
|
+
|
|
231
|
+
Check_Type(rb_ignore_rule, T_SYMBOL);
|
|
232
|
+
id_ignore_rule = SYM2ID(rb_ignore_rule);
|
|
233
|
+
|
|
234
|
+
if (id_ignore_rule == rb_intern("none")) {
|
|
235
|
+
return GIT_SUBMODULE_IGNORE_NONE;
|
|
236
|
+
} else if (id_ignore_rule == rb_intern("untracked")) {
|
|
237
|
+
return GIT_SUBMODULE_IGNORE_UNTRACKED;
|
|
238
|
+
} else if (id_ignore_rule == rb_intern("dirty")) {
|
|
239
|
+
return GIT_SUBMODULE_IGNORE_DIRTY;
|
|
240
|
+
} else if (id_ignore_rule == rb_intern("all")) {
|
|
241
|
+
return GIT_SUBMODULE_IGNORE_ALL;
|
|
242
|
+
} else {
|
|
243
|
+
rb_raise(rb_eArgError, "Invalid submodule ignore rule type.");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
static git_submodule_update_t rb_git_subm_update_rule_toC(VALUE rb_update_rule)
|
|
248
|
+
{
|
|
249
|
+
ID id_update_rule;
|
|
250
|
+
|
|
251
|
+
Check_Type(rb_update_rule, T_SYMBOL);
|
|
252
|
+
id_update_rule = SYM2ID(rb_update_rule);
|
|
253
|
+
|
|
254
|
+
if (id_update_rule == rb_intern("checkout")) {
|
|
255
|
+
return GIT_SUBMODULE_UPDATE_CHECKOUT;
|
|
256
|
+
} else if (id_update_rule == rb_intern("rebase")) {
|
|
257
|
+
return GIT_SUBMODULE_UPDATE_REBASE;
|
|
258
|
+
} else if (id_update_rule == rb_intern("merge")) {
|
|
259
|
+
return GIT_SUBMODULE_UPDATE_MERGE;
|
|
260
|
+
} else if (id_update_rule == rb_intern("none")) {
|
|
261
|
+
return GIT_SUBMODULE_UPDATE_NONE;
|
|
262
|
+
} else {
|
|
263
|
+
rb_raise(rb_eArgError, "Invalid submodule update rule type.");
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/*
|
|
268
|
+
* call-seq:
|
|
269
|
+
* submodules.update(submodule, settings) -> nil
|
|
270
|
+
* submodules.update(name, settings) -> nil
|
|
271
|
+
*
|
|
272
|
+
* Update settings for the given submodule in the submodule config.
|
|
273
|
+
*
|
|
274
|
+
* Existing `Rugged::Submodule` instances are not updated, but can be
|
|
275
|
+
* reloaded by calling `#reload`.
|
|
276
|
+
*
|
|
277
|
+
* The following options can be passed in the +settings+ Hash:
|
|
278
|
+
*
|
|
279
|
+
* :url ::
|
|
280
|
+
* Updates the URL for the submodule.
|
|
281
|
+
*
|
|
282
|
+
* :ignore_rule ::
|
|
283
|
+
* See `Rugged::Submodule#ignore_rule` for a list of accepted rules.
|
|
284
|
+
*
|
|
285
|
+
* :update_rule ::
|
|
286
|
+
* See `Rugged::Submodule#update_rule` for a list of accepted rules.
|
|
287
|
+
*
|
|
288
|
+
* :fetch_recurse_submodules ::
|
|
289
|
+
* Updates the +fetchRecurseSubmodules+ rule.
|
|
290
|
+
*/
|
|
291
|
+
static VALUE rb_git_submodule_update(VALUE self, VALUE rb_name_or_submodule, VALUE rb_settings)
|
|
292
|
+
{
|
|
293
|
+
git_repository *repo;
|
|
294
|
+
git_submodule_ignore_t ignore_rule;
|
|
295
|
+
git_submodule_update_t update_rule;
|
|
296
|
+
const char *submodule_name;
|
|
297
|
+
int fetch_recurse_submodules;
|
|
298
|
+
VALUE rb_repo = rugged_owner(self);
|
|
299
|
+
VALUE rb_url, rb_fetch_recurse_submodules, rb_ignore_rule, rb_update_rule;
|
|
300
|
+
|
|
301
|
+
rugged_check_repo(rb_repo);
|
|
302
|
+
Data_Get_Struct(rb_repo, git_repository, repo);
|
|
303
|
+
|
|
304
|
+
if (rb_obj_is_kind_of(rb_name_or_submodule, rb_cRuggedSubmodule))
|
|
305
|
+
rb_name_or_submodule = rb_funcall(rb_name_or_submodule, rb_intern("name"), 0);
|
|
306
|
+
|
|
307
|
+
if (TYPE(rb_name_or_submodule) != T_STRING)
|
|
308
|
+
rb_raise(rb_eTypeError, "Expecting a String or Rugged::Submodule instance");
|
|
309
|
+
|
|
310
|
+
rb_url = rb_hash_aref(rb_settings, CSTR2SYM("url"));
|
|
311
|
+
rb_fetch_recurse_submodules = rb_hash_aref(rb_settings, CSTR2SYM("fetch_recurse_submodules"));
|
|
312
|
+
rb_ignore_rule = rb_hash_aref(rb_settings, CSTR2SYM("ignore_rule"));
|
|
313
|
+
rb_update_rule = rb_hash_aref(rb_settings, CSTR2SYM("update_rule"));
|
|
314
|
+
|
|
315
|
+
if (!NIL_P(rb_url)) {
|
|
316
|
+
Check_Type(rb_url, T_STRING);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (!NIL_P(rb_fetch_recurse_submodules)) {
|
|
320
|
+
fetch_recurse_submodules = rugged_parse_bool(rb_fetch_recurse_submodules);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (!NIL_P(rb_ignore_rule)) {
|
|
324
|
+
ignore_rule = rb_git_subm_ignore_rule_toC(rb_ignore_rule);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (!NIL_P(rb_update_rule)) {
|
|
328
|
+
update_rule = rb_git_subm_update_rule_toC(rb_update_rule);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
submodule_name = StringValueCStr(rb_name_or_submodule);
|
|
332
|
+
|
|
333
|
+
if (!NIL_P(rb_url)) {
|
|
334
|
+
rugged_exception_check(
|
|
335
|
+
git_submodule_set_url(repo,
|
|
336
|
+
submodule_name,
|
|
337
|
+
StringValueCStr(rb_url)
|
|
338
|
+
)
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if (!NIL_P(rb_fetch_recurse_submodules)) {
|
|
343
|
+
rugged_exception_check(
|
|
344
|
+
git_submodule_set_fetch_recurse_submodules(repo,
|
|
345
|
+
submodule_name,
|
|
346
|
+
fetch_recurse_submodules
|
|
347
|
+
)
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (!NIL_P(rb_ignore_rule)) {
|
|
352
|
+
rugged_exception_check(
|
|
353
|
+
git_submodule_set_ignore(repo,
|
|
354
|
+
submodule_name,
|
|
355
|
+
ignore_rule
|
|
356
|
+
)
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (!NIL_P(rb_update_rule)) {
|
|
361
|
+
rugged_exception_check(
|
|
362
|
+
git_submodule_set_update(repo,
|
|
363
|
+
submodule_name,
|
|
364
|
+
update_rule
|
|
365
|
+
)
|
|
366
|
+
);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return Qnil;
|
|
370
|
+
}
|
|
371
|
+
|
|
227
372
|
void Init_rugged_submodule_collection(void)
|
|
228
373
|
{
|
|
229
374
|
rb_cRuggedSubmoduleCollection = rb_define_class_under(rb_mRugged, "SubmoduleCollection", rb_cObject);
|
|
@@ -232,5 +377,8 @@ void Init_rugged_submodule_collection(void)
|
|
|
232
377
|
rb_define_method(rb_cRuggedSubmoduleCollection, "initialize", rb_git_submodule_collection_initialize, 1);
|
|
233
378
|
rb_define_method(rb_cRuggedSubmoduleCollection, "[]", rb_git_submodule_collection_aref, 1);
|
|
234
379
|
rb_define_method(rb_cRuggedSubmoduleCollection, "each", rb_git_submodule_collection_each, 0);
|
|
380
|
+
|
|
381
|
+
rb_define_method(rb_cRuggedSubmoduleCollection, "update", rb_git_submodule_update, 2);
|
|
382
|
+
|
|
235
383
|
rb_define_method(rb_cRuggedSubmoduleCollection, "setup_add", rb_git_submodule_setup_add, -1);
|
|
236
384
|
}
|