rugged 0.21.1b2 → 0.21.2

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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -12
  3. data/ext/rugged/extconf.rb +8 -8
  4. data/ext/rugged/rugged.h +1 -1
  5. data/ext/rugged/rugged_blob.c +0 -57
  6. data/ext/rugged/rugged_cred.c +0 -23
  7. data/ext/rugged/rugged_index.c +2 -6
  8. data/ext/rugged/rugged_remote.c +1 -69
  9. data/ext/rugged/rugged_repo.c +5 -287
  10. data/ext/rugged/rugged_tag_collection.c +2 -70
  11. data/ext/rugged/rugged_tree.c +10 -29
  12. data/lib/rugged.rb +0 -2
  13. data/lib/rugged/diff.rb +1 -0
  14. data/lib/rugged/diff/line.rb +3 -1
  15. data/lib/rugged/patch.rb +2 -12
  16. data/lib/rugged/version.rb +1 -1
  17. data/vendor/libgit2/CMakeLists.txt +0 -11
  18. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -2
  19. data/vendor/libgit2/deps/zlib/adler32.c +29 -39
  20. data/vendor/libgit2/deps/zlib/crc32.c +50 -33
  21. data/vendor/libgit2/deps/zlib/crc32.h +1 -1
  22. data/vendor/libgit2/deps/zlib/deflate.c +65 -198
  23. data/vendor/libgit2/deps/zlib/deflate.h +4 -8
  24. data/vendor/libgit2/deps/zlib/inffast.c +3 -3
  25. data/vendor/libgit2/deps/zlib/inffixed.h +3 -3
  26. data/vendor/libgit2/deps/zlib/inflate.c +52 -84
  27. data/vendor/libgit2/deps/zlib/inftrees.c +39 -15
  28. data/vendor/libgit2/deps/zlib/trees.c +36 -18
  29. data/vendor/libgit2/deps/zlib/zconf.h +0 -4
  30. data/vendor/libgit2/deps/zlib/zlib.h +95 -250
  31. data/vendor/libgit2/deps/zlib/zutil.c +10 -13
  32. data/vendor/libgit2/deps/zlib/zutil.h +62 -41
  33. data/vendor/libgit2/include/git2/attr.h +13 -16
  34. data/vendor/libgit2/include/git2/buffer.h +0 -16
  35. data/vendor/libgit2/include/git2/checkout.h +12 -12
  36. data/vendor/libgit2/include/git2/cherrypick.h +15 -15
  37. data/vendor/libgit2/include/git2/clone.h +69 -77
  38. data/vendor/libgit2/include/git2/diff.h +0 -7
  39. data/vendor/libgit2/include/git2/errors.h +0 -2
  40. data/vendor/libgit2/include/git2/merge.h +0 -16
  41. data/vendor/libgit2/include/git2/oid.h +4 -8
  42. data/vendor/libgit2/include/git2/remote.h +32 -13
  43. data/vendor/libgit2/include/git2/repository.h +1 -4
  44. data/vendor/libgit2/include/git2/reset.h +0 -4
  45. data/vendor/libgit2/include/git2/revert.h +1 -1
  46. data/vendor/libgit2/include/git2/status.h +14 -17
  47. data/vendor/libgit2/include/git2/submodule.h +0 -18
  48. data/vendor/libgit2/include/git2/sys/repository.h +0 -13
  49. data/vendor/libgit2/include/git2/transport.h +313 -79
  50. data/vendor/libgit2/include/git2/tree.h +2 -4
  51. data/vendor/libgit2/include/git2/types.h +6 -54
  52. data/vendor/libgit2/include/git2/version.h +2 -2
  53. data/vendor/libgit2/src/attr.c +4 -8
  54. data/vendor/libgit2/src/attr_file.c +1 -14
  55. data/vendor/libgit2/src/blame.c +1 -0
  56. data/vendor/libgit2/src/buf_text.c +5 -9
  57. data/vendor/libgit2/src/buf_text.h +2 -3
  58. data/vendor/libgit2/src/buffer.c +10 -67
  59. data/vendor/libgit2/src/buffer.h +2 -4
  60. data/vendor/libgit2/src/cache.c +9 -9
  61. data/vendor/libgit2/src/cache.h +1 -1
  62. data/vendor/libgit2/src/checkout.c +44 -121
  63. data/vendor/libgit2/src/cherrypick.c +44 -41
  64. data/vendor/libgit2/src/clone.c +56 -94
  65. data/vendor/libgit2/src/config_file.c +7 -2
  66. data/vendor/libgit2/src/crlf.c +1 -2
  67. data/vendor/libgit2/src/diff.c +0 -21
  68. data/vendor/libgit2/src/diff_file.c +0 -1
  69. data/vendor/libgit2/src/diff_print.c +9 -11
  70. data/vendor/libgit2/src/diff_tform.c +2 -4
  71. data/vendor/libgit2/src/errors.c +7 -9
  72. data/vendor/libgit2/src/filebuf.c +2 -0
  73. data/vendor/libgit2/src/fileops.c +7 -9
  74. data/vendor/libgit2/src/filter.c +11 -2
  75. data/vendor/libgit2/src/global.c +20 -3
  76. data/vendor/libgit2/src/global.h +0 -2
  77. data/vendor/libgit2/src/graph.c +2 -2
  78. data/vendor/libgit2/src/hashsig.c +1 -1
  79. data/vendor/libgit2/{include/git2/sys → src}/hashsig.h +7 -11
  80. data/vendor/libgit2/src/ignore.c +2 -2
  81. data/vendor/libgit2/src/indexer.c +1 -13
  82. data/vendor/libgit2/src/merge.c +145 -99
  83. data/vendor/libgit2/src/merge.h +1 -1
  84. data/vendor/libgit2/src/mwindow.c +8 -117
  85. data/vendor/libgit2/src/mwindow.h +1 -9
  86. data/vendor/libgit2/src/netops.c +7 -6
  87. data/vendor/libgit2/src/netops.h +4 -0
  88. data/vendor/libgit2/src/odb_loose.c +1 -1
  89. data/vendor/libgit2/src/odb_pack.c +3 -6
  90. data/vendor/libgit2/src/oid.c +0 -8
  91. data/vendor/libgit2/src/oid.h +0 -11
  92. data/vendor/libgit2/src/pack.c +6 -20
  93. data/vendor/libgit2/src/pack.h +0 -3
  94. data/vendor/libgit2/src/path.c +64 -134
  95. data/vendor/libgit2/src/path.h +1 -22
  96. data/vendor/libgit2/src/posix.h +28 -46
  97. data/vendor/libgit2/src/refs.h +2 -2
  98. data/vendor/libgit2/src/refspec.c +2 -14
  99. data/vendor/libgit2/src/remote.c +26 -29
  100. data/vendor/libgit2/src/remote.h +1 -3
  101. data/vendor/libgit2/src/repository.c +14 -54
  102. data/vendor/libgit2/src/revert.c +6 -4
  103. data/vendor/libgit2/src/revparse.c +18 -15
  104. data/vendor/libgit2/src/signature.c +2 -2
  105. data/vendor/libgit2/src/stash.c +1 -2
  106. data/vendor/libgit2/src/status.c +2 -11
  107. data/vendor/libgit2/src/strnlen.h +1 -2
  108. data/vendor/libgit2/src/submodule.c +33 -73
  109. data/vendor/libgit2/src/tag.c +3 -2
  110. data/vendor/libgit2/src/thread-utils.h +7 -0
  111. data/vendor/libgit2/src/trace.h +1 -9
  112. data/vendor/libgit2/src/transport.c +90 -93
  113. data/vendor/libgit2/src/transports/cred.c +0 -58
  114. data/vendor/libgit2/src/transports/cred_helpers.c +0 -3
  115. data/vendor/libgit2/src/transports/git.c +0 -1
  116. data/vendor/libgit2/src/transports/http.c +82 -205
  117. data/vendor/libgit2/src/transports/smart.c +0 -2
  118. data/vendor/libgit2/src/transports/smart.h +0 -2
  119. data/vendor/libgit2/src/transports/smart_protocol.c +5 -7
  120. data/vendor/libgit2/src/transports/ssh.c +35 -224
  121. data/vendor/libgit2/src/transports/winhttp.c +34 -140
  122. data/vendor/libgit2/src/tree.c +60 -64
  123. data/vendor/libgit2/src/tree.h +3 -2
  124. data/vendor/libgit2/src/unix/posix.h +9 -23
  125. data/vendor/libgit2/src/unix/realpath.c +7 -8
  126. data/vendor/libgit2/src/util.c +1 -2
  127. data/vendor/libgit2/src/util.h +3 -3
  128. data/vendor/libgit2/src/win32/mingw-compat.h +12 -5
  129. data/vendor/libgit2/src/win32/msvc-compat.h +32 -3
  130. data/vendor/libgit2/src/win32/posix.h +31 -20
  131. data/vendor/libgit2/src/win32/posix_w32.c +18 -62
  132. metadata +5 -18
  133. data/lib/rugged/attributes.rb +0 -41
  134. data/lib/rugged/blob.rb +0 -28
  135. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +0 -324
  136. data/vendor/libgit2/deps/zlib/infback.c +0 -640
  137. data/vendor/libgit2/include/git2/oidarray.h +0 -40
  138. data/vendor/libgit2/include/git2/sys/transport.h +0 -352
  139. data/vendor/libgit2/src/oidarray.c +0 -21
  140. data/vendor/libgit2/src/oidarray.h +0 -18
  141. data/vendor/libgit2/src/transports/auth.c +0 -71
  142. data/vendor/libgit2/src/transports/auth.h +0 -63
  143. data/vendor/libgit2/src/transports/auth_negotiate.c +0 -275
  144. data/vendor/libgit2/src/transports/auth_negotiate.h +0 -27
  145. data/vendor/libgit2/src/transports/cred.h +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c7f700c66a544556cd950109a76174c81bc1051
4
- data.tar.gz: cc1d7bdc3d29de80c9dd7e851c6b6661c8b7aa04
3
+ metadata.gz: 7fd19143d7ae79c19dcc780edd7399e0b96c677b
4
+ data.tar.gz: c2e501d2d3525acc5a3a2297bc3726fc0c3465f8
5
5
  SHA512:
6
- metadata.gz: 544b7008795e5066b76a1fe45345ef2a4f3ed6f9c2e5f387823b8cbbc12bacb1408c99e56a514c800477a3d436e6beccb7c9217fe1b2995977a6938b6a09a13b
7
- data.tar.gz: fd71862f8cd20de77fd0aff0df25fc2463231e4f179ed735aac142ca0d277178faaab582f9ce58c83bdf718af1eb4ff9f406a97fa1b6ed889bd1f9229febf1ae
6
+ metadata.gz: 2b6f3fb73a8d64f10b2dcac66dc7bc6a27c8257bf72f9d2d02b7d3179bb24a096a36593c87b420cfd31e889425c72b725d81f551907115ef717101716bb4f390
7
+ data.tar.gz: 991a7b7aaa258c7fe858dedde2694493ce4af466e61ea42935fac3afe3ceaa1b80298f345f83cb82ee237256968ffe45faabfc182402d349ded4665bcf794424
data/README.md CHANGED
@@ -17,12 +17,7 @@ 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:
21
- ```bash
22
- $ brew install cmake
23
- ```
24
-
25
- If you want to build Rugged with HTTPS and SSH support, check out the list of optional [libgit2 dependencies](https://github.com/libgit2/libgit2#optional-dependencies).
20
+ You need to have CMake installed on your system to be able to build the included version of `libgit2`. If you want to build Rugged with HTTPS and SSH support, check out the list of optional [libgit2 dependencies](https://github.com/libgit2/libgit2#optional-dependencies).
26
21
 
27
22
  If you're using bundler and want to bundle `libgit2` with Rugged, you can use the `:submodules` option:
28
23
 
@@ -101,7 +96,7 @@ repo.bare?
101
96
  # => false
102
97
  repo.empty?
103
98
  # => true
104
- repo.head_unborn?
99
+ repo.head_orphan?
105
100
  # => false
106
101
  repo.head_detached?
107
102
  # => false
@@ -114,15 +109,13 @@ repo.workdir
114
109
 
115
110
  # The HEAD of the repository.
116
111
  ref = repo.head
117
- # => #<Rugged::Reference:2228467240 {name: "refs/heads/master", target: #<Rugged::Commit:2228467250 {message: "helpful message", tree: #<Rugged::Tree:2228467260 {oid: 5d6f29220a0783b8085134df14ec4d960b6c3bf2}>}>
112
+ # => #<Rugged::Reference:2228467240 {name: "refs/heads/master", target: "07b44cbda23b726e5d54e2ef383495922c024202"}>
118
113
 
119
- # From the returned ref, you can also access the `name`, `target`, and target SHA:
114
+ # From the returned ref, you can also access the `name` and `target`:
120
115
  ref.name
121
116
  # => "refs/heads/master"
122
117
  ref.target
123
- # => #<Rugged::Commit:2228467250 {message: "helpful message", tree: #<Rugged::Tree:2228467260 {oid: 5d6f29220a0783b8085134df14ec4d960b6c3bf2}>}>
124
- ref.target_id
125
- # => "2bc6a70483369f33f641ca44873497f13a15cde5"
118
+ # => "07b44cbda23b726e5d54e2ef383495922c024202"
126
119
 
127
120
  # Reading an object
128
121
  object = repo.read('a0ae5566e3c8a3bddffab21022056f0b5e03ef07')
@@ -15,10 +15,18 @@ def sys(cmd)
15
15
  ret
16
16
  end
17
17
 
18
+ if !find_executable('cmake')
19
+ abort "ERROR: CMake is required to build Rugged."
20
+ end
21
+
18
22
  if !(MAKE = find_executable('gmake') || find_executable('make'))
19
23
  abort "ERROR: GNU make is required to build Rugged."
20
24
  end
21
25
 
26
+ if !find_executable('pkg-config')
27
+ abort "ERROR: pkg-config is required to build Rugged."
28
+ end
29
+
22
30
  if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES'])
23
31
  puts "Building Rugged using system libraries.\n"
24
32
 
@@ -32,14 +40,6 @@ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES'])
32
40
  #endif
33
41
  SRC
34
42
  else
35
- if !find_executable('cmake')
36
- abort "ERROR: CMake is required to build Rugged."
37
- end
38
-
39
- if !find_executable('pkg-config')
40
- abort "ERROR: pkg-config is required to build Rugged."
41
- end
42
-
43
43
  CWD = File.expand_path(File.dirname(__FILE__))
44
44
  LIBGIT2_DIR = File.join(CWD, '..', '..', 'vendor', 'libgit2')
45
45
 
@@ -120,7 +120,7 @@ static inline VALUE rugged_owner(VALUE object)
120
120
  static inline void rugged_validate_remote_url(VALUE rb_url)
121
121
  {
122
122
  Check_Type(rb_url, T_STRING);
123
- if (!git_remote_supported_url(StringValueCStr(rb_url)))
123
+ if (!git_remote_valid_url(StringValueCStr(rb_url)))
124
124
  rb_raise(rb_eArgError, "Invalid URL format");
125
125
  }
126
126
 
@@ -24,7 +24,6 @@
24
24
 
25
25
  #include "rugged.h"
26
26
  #include <ctype.h>
27
- #include <git2/sys/hashsig.h>
28
27
 
29
28
  extern VALUE rb_mRugged;
30
29
  extern VALUE rb_cRuggedObject;
@@ -32,7 +31,6 @@ extern VALUE rb_cRuggedRepo;
32
31
  static ID id_read;
33
32
 
34
33
  VALUE rb_cRuggedBlob;
35
- VALUE rb_cRuggedBlobSig;
36
34
 
37
35
  /*
38
36
  * call-seq:
@@ -522,57 +520,6 @@ static VALUE rb_git_blob_to_buffer(int argc, VALUE *argv, VALUE self)
522
520
  return rb_ret;
523
521
  }
524
522
 
525
- static VALUE rb_git_blob_sig_new(int argc, VALUE *argv, VALUE klass)
526
- {
527
- int error, opts = 0;
528
- git_hashsig *sig;
529
- VALUE rb_blob, rb_options;
530
-
531
- if (rb_scan_args(argc, argv, "11", &rb_blob, &rb_options) == 2) {
532
- Check_Type(rb_options, T_FIXNUM);
533
- opts = FIX2INT(rb_options);
534
- }
535
-
536
- if (rb_obj_is_kind_of(rb_blob, rb_cRuggedBlob)) {
537
- git_blob *blob;
538
- Data_Get_Struct(rb_blob, git_blob, blob);
539
-
540
- error = git_hashsig_create(&sig,
541
- git_blob_rawcontent(blob),
542
- git_blob_rawsize(blob),
543
- opts);
544
- } else {
545
- Check_Type(rb_blob, T_STRING);
546
- error = git_hashsig_create(&sig, RSTRING_PTR(rb_blob), RSTRING_LEN(rb_blob), opts);
547
- }
548
-
549
- rugged_exception_check(error);
550
-
551
- return Data_Wrap_Struct(klass, NULL, &git_hashsig_free, sig);
552
- }
553
-
554
- static VALUE rb_git_blob_sig_compare(VALUE self, VALUE rb_sig_a, VALUE rb_sig_b)
555
- {
556
- git_hashsig *sig_a;
557
- git_hashsig *sig_b;
558
- int result;
559
-
560
- if (!rb_obj_is_kind_of(rb_sig_a, rb_cRuggedBlobSig) ||
561
- !rb_obj_is_kind_of(rb_sig_b, rb_cRuggedBlobSig)) {
562
- rb_raise(rb_eTypeError, "Expected Rugged::Blob::HashSignature");
563
- }
564
-
565
- Data_Get_Struct(rb_sig_a, git_hashsig, sig_a);
566
- Data_Get_Struct(rb_sig_b, git_hashsig, sig_b);
567
-
568
- result = git_hashsig_compare(sig_a, sig_b);
569
-
570
- if (result < 0)
571
- rugged_exception_check(result);
572
-
573
- return INT2FIX(result);
574
- }
575
-
576
523
  void Init_rugged_blob(void)
577
524
  {
578
525
  id_read = rb_intern("read");
@@ -592,8 +539,4 @@ void Init_rugged_blob(void)
592
539
  rb_define_singleton_method(rb_cRuggedBlob, "from_io", rb_git_blob_from_io, -1);
593
540
 
594
541
  rb_define_singleton_method(rb_cRuggedBlob, "to_buffer", rb_git_blob_to_buffer, -1);
595
-
596
- rb_cRuggedBlobSig = rb_define_class_under(rb_cRuggedBlob, "HashSignature", rb_cObject);
597
- rb_define_singleton_method(rb_cRuggedBlobSig, "new", rb_git_blob_sig_new, -1);
598
- rb_define_singleton_method(rb_cRuggedBlobSig, "compare", rb_git_blob_sig_compare, 2);
599
542
  }
@@ -88,42 +88,19 @@ static void rugged_cred_extract_default(git_cred **cred, VALUE rb_credential)
88
88
  rugged_exception_check(git_cred_default_new(cred));
89
89
  }
90
90
 
91
- static void rugged_cred_extract_username(git_cred **cred, VALUE rb_credential)
92
- {
93
- VALUE rb_username = rb_iv_get(rb_credential, "@username");
94
- Check_Type(rb_username, T_STRING);
95
-
96
- rugged_exception_check(git_cred_username_new(cred, StringValueCStr(rb_username)));
97
- }
98
-
99
91
  void rugged_cred_extract(git_cred **cred, int allowed_types, VALUE rb_credential)
100
92
  {
101
93
  if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredUserPassword)) {
102
- if (allowed_types & GIT_CREDTYPE_USERNAME) {
103
- rugged_cred_extract_username(cred, rb_credential);
104
- return;
105
- }
106
-
107
94
  if (!(allowed_types & GIT_CREDTYPE_USERPASS_PLAINTEXT))
108
95
  rb_raise(rb_eArgError, "Invalid credential type");
109
96
 
110
97
  rugged_cred_extract_userpass(cred, rb_credential);
111
98
  } else if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredSshKey)) {
112
- if (allowed_types & GIT_CREDTYPE_USERNAME) {
113
- rugged_cred_extract_username(cred, rb_credential);
114
- return;
115
- }
116
-
117
99
  if (!(allowed_types & GIT_CREDTYPE_SSH_KEY))
118
100
  rb_raise(rb_eArgError, "Invalid credential type");
119
101
 
120
102
  rugged_cred_extract_ssh_key(cred, rb_credential);
121
103
  } else if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredSshKeyFromAgent)) {
122
- if (allowed_types & GIT_CREDTYPE_USERNAME) {
123
- rugged_cred_extract_username(cred, rb_credential);
124
- return;
125
- }
126
-
127
104
  if (!(allowed_types & GIT_CREDTYPE_SSH_KEY))
128
105
  rb_raise(rb_eArgError, "Invalid credential type");
129
106
 
@@ -681,10 +681,6 @@ static VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
681
681
  Data_Get_Struct(self, git_index, index);
682
682
  Data_Get_Struct(rb_tree, git_tree, tree);
683
683
 
684
- if (!rb_obj_is_kind_of(rb_tree, rb_cRuggedTree)) {
685
- rb_raise(rb_eTypeError, "A Rugged::Tree instance is required");
686
- }
687
-
688
684
  error = git_index_read_tree(index, tree);
689
685
  rugged_exception_check(error);
690
686
 
@@ -756,7 +752,7 @@ static VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
756
752
  * :recurse_untracked_dirs ::
757
753
  * Even if +:include_untracked+ is true, untracked directories will only be
758
754
  * marked with a single entry in the diff. If this flag is set to true,
759
- * all files under ignored directories will be included in the diff, too.
755
+ * all files under ignored directories will be included in the di ff, too.
760
756
  *
761
757
  * :disable_pathspec_match ::
762
758
  * If true, the given +:paths+ will be applied as exact matches, instead of
@@ -835,7 +831,7 @@ static VALUE rb_git_index_diff(int argc, VALUE *argv, VALUE self)
835
831
  xfree(opts.pathspec.strings);
836
832
  rugged_exception_check(error);
837
833
 
838
- return rugged_diff_new(rb_cRuggedDiff, owner, diff);
834
+ return rugged_diff_new(rb_cRuggedDiff, self, diff);
839
835
  }
840
836
 
841
837
  /*
@@ -29,7 +29,7 @@ extern VALUE rb_cRuggedRepo;
29
29
  extern VALUE rb_eRuggedError;
30
30
  VALUE rb_cRuggedRemote;
31
31
 
32
- #define RUGGED_REMOTE_CALLBACKS_INIT {1, progress_cb, NULL, credentials_cb, NULL, transfer_progress_cb, update_tips_cb, NULL}
32
+ #define RUGGED_REMOTE_CALLBACKS_INIT {1, progress_cb, NULL, credentials_cb, transfer_progress_cb, update_tips_cb, NULL}
33
33
 
34
34
  static int progress_cb(const char *str, int len, void *data)
35
35
  {
@@ -535,73 +535,6 @@ static VALUE rb_git_remote_rename(VALUE self, VALUE rb_new_name)
535
535
  return rb_result;
536
536
  }
537
537
 
538
- /*
539
- * call-seq:
540
- * remote.check_connection(direction, options = {}) -> boolean
541
- *
542
- * Try to connect to the +remote+. Useful to simulate
543
- * <tt>git fetch --dry-run</tt> and <tt>git push --dry-run</tt>.
544
- *
545
- * Returns +true+ if connection is successful, +false+ otherwise.
546
- *
547
- * +direction+ must be either +:fetch+ or +:push+.
548
- *
549
- * The following options can be passed in the +options+ Hash:
550
- *
551
- * +credentials+ ::
552
- * The credentials to use for the connection. Can be either an instance of
553
- * one of the Rugged::Credentials types, or a proc returning one of the
554
- * former.
555
- * The proc will be called with the +url+, the +username+ from the url (if
556
- * applicable) and a list of applicable credential types.
557
- *
558
- * Example:
559
- *
560
- * remote = repo.remotes["origin"]
561
- * success = remote.check_connection(:fetch)
562
- * raise Error("Unable to pull without credentials") unless success
563
- */
564
- static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
565
- {
566
- git_remote *remote;
567
- git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
568
- struct rugged_remote_cb_payload payload = { Qnil, Qnil, Qnil, Qnil, Qnil, 0 };
569
- VALUE rb_direction, rb_options;
570
- ID id_direction;
571
- int error, direction;
572
-
573
- Data_Get_Struct(self, git_remote, remote);
574
- rb_scan_args(argc, argv, "01:", &rb_direction, &rb_options);
575
-
576
- Check_Type(rb_direction, T_SYMBOL);
577
- id_direction = SYM2ID(rb_direction);
578
- if (id_direction == rb_intern("fetch"))
579
- direction = GIT_DIRECTION_FETCH;
580
- else if (id_direction == rb_intern("push"))
581
- direction = GIT_DIRECTION_PUSH;
582
- else
583
- rb_raise(rb_eTypeError, "Invalid direction. Expected :fetch or :push");
584
-
585
- if (!NIL_P(rb_options))
586
- rugged_remote_init_callbacks_and_payload_from_options(rb_options, &callbacks, &payload);
587
-
588
- if ((error = git_remote_set_callbacks(remote, &callbacks)) < 0)
589
- goto cleanup;
590
-
591
- if (git_remote_connect(remote, direction))
592
- return Qfalse;
593
- else {
594
- git_remote_disconnect(remote);
595
- return Qtrue;
596
- }
597
-
598
- cleanup:
599
- if (payload.exception)
600
- rb_jump_tag(payload.exception);
601
- rugged_exception_check(error);
602
- return Qfalse;
603
- }
604
-
605
538
  /*
606
539
  * call-seq:
607
540
  * remote.fetch(refspecs = nil, options = {}) -> hash
@@ -894,7 +827,6 @@ void Init_rugged_remote(void)
894
827
  rb_define_method(rb_cRuggedRemote, "add_fetch", rb_git_remote_add_fetch, 1);
895
828
  rb_define_method(rb_cRuggedRemote, "add_push", rb_git_remote_add_push, 1);
896
829
  rb_define_method(rb_cRuggedRemote, "ls", rb_git_remote_ls, -1);
897
- rb_define_method(rb_cRuggedRemote, "check_connection", rb_git_remote_check_connection, -1);
898
830
  rb_define_method(rb_cRuggedRemote, "fetch", rb_git_remote_fetch, -1);
899
831
  rb_define_method(rb_cRuggedRemote, "push", rb_git_remote_push, -1);
900
832
  rb_define_method(rb_cRuggedRemote, "clear_refspecs", rb_git_remote_clear_refspecs, 0);
@@ -643,10 +643,9 @@ static VALUE rb_git_repo_merge_commits(int argc, VALUE *argv, VALUE self)
643
643
  * repo.exists?(oid) -> true or false
644
644
  *
645
645
  * Return whether an object with the given SHA1 OID (represented as
646
- * a hex string of at least 7 characters) exists in the repository.
646
+ * a 40-character string) exists in the repository.
647
647
  *
648
648
  * repo.include?("d8786bfc97485e8d7b19b21fb88c8ef1f199fc3f") #=> true
649
- * repo.include?("d8786bfc") #=> true
650
649
  */
651
650
  static VALUE rb_git_repo_exists(VALUE self, VALUE hex)
652
651
  {
@@ -654,23 +653,21 @@ static VALUE rb_git_repo_exists(VALUE self, VALUE hex)
654
653
  git_odb *odb;
655
654
  git_oid oid;
656
655
  int error;
656
+ VALUE rb_result;
657
657
 
658
658
  Data_Get_Struct(self, git_repository, repo);
659
659
  Check_Type(hex, T_STRING);
660
660
 
661
- error = git_oid_fromstrn(&oid, RSTRING_PTR(hex), RSTRING_LEN(hex));
661
+ error = git_oid_fromstr(&oid, StringValueCStr(hex));
662
662
  rugged_exception_check(error);
663
663
 
664
664
  error = git_repository_odb(&odb, repo);
665
665
  rugged_exception_check(error);
666
666
 
667
- error = git_odb_exists_prefix(NULL, odb, &oid, RSTRING_LEN(hex));
667
+ rb_result = git_odb_exists(odb, &oid) ? Qtrue : Qfalse;
668
668
  git_odb_free(odb);
669
669
 
670
- if (error == 0 || error == GIT_EAMBIGUOUS)
671
- return Qtrue;
672
-
673
- return Qfalse;
670
+ return rb_result;
674
671
  }
675
672
 
676
673
  /*
@@ -739,107 +736,6 @@ static VALUE rb_git_repo_read_header(VALUE self, VALUE hex)
739
736
  return rb_hash;
740
737
  }
741
738
 
742
- /**
743
- * call-seq:
744
- * repo.expand_oids([oid..], object_type = :any) -> hash
745
- *
746
- * Expand a list of short oids to their full value, assuming they exist
747
- * in the repository. If `object_type` is passed, OIDs are expected to be
748
- * of the given type.
749
- *
750
- * Returns a hash of `{ short_oid => full_oid }` for the short OIDs which
751
- * exist in the repository and match the expected object type. Missing OIDs
752
- * will not appear in the resulting hash.
753
- */
754
- static VALUE rb_git_repo_expand_oids(int argc, VALUE *argv, VALUE self)
755
- {
756
- VALUE rb_result, rb_oids, rb_expected_type;
757
-
758
- git_otype expected_type = GIT_OBJ_ANY;
759
-
760
- git_repository *repo;
761
- git_oid oid;
762
- git_odb *odb;
763
- int i, error;
764
-
765
- Data_Get_Struct(self, git_repository, repo);
766
-
767
- rb_scan_args(argc, argv, "11", &rb_oids, &rb_expected_type);
768
-
769
- Check_Type(rb_oids, T_ARRAY);
770
- expected_type = rugged_otype_get(rb_expected_type);
771
-
772
- error = git_repository_odb(&odb, repo);
773
- rugged_exception_check(error);
774
-
775
- rb_result = rb_hash_new();
776
-
777
- for (i = 0; i < RARRAY_LEN(rb_oids); ++i) {
778
- VALUE hex_oid = rb_ary_entry(rb_oids, i);
779
- git_oid found_oid;
780
-
781
- if (TYPE(hex_oid) != T_STRING) {
782
- git_odb_free(odb);
783
- rb_raise(rb_eTypeError, "Expected a SHA1 OID");
784
- }
785
-
786
- error = git_oid_fromstrn(&oid, RSTRING_PTR(hex_oid), RSTRING_LEN(hex_oid));
787
- if (error < 0) {
788
- git_odb_free(odb);
789
- rugged_exception_check(error);
790
- }
791
-
792
- error = git_odb_exists_prefix(&found_oid, odb, &oid, RSTRING_LEN(hex_oid));
793
-
794
- if (!error) {
795
- if (expected_type != GIT_OBJ_ANY) {
796
- size_t found_size;
797
- git_otype found_type;
798
-
799
- if (git_odb_read_header(&found_size, &found_type, odb, &found_oid) < 0)
800
- continue;
801
-
802
- if (found_type != expected_type)
803
- continue;
804
- }
805
-
806
- rb_hash_aset(rb_result, hex_oid, rugged_create_oid(&found_oid));
807
- }
808
- }
809
-
810
- git_odb_free(odb);
811
- return rb_result;
812
- }
813
-
814
- /*
815
- * call-seq:
816
- * repo.descendant_of?(commit, ancestor) -> true or false
817
- *
818
- * +commit+ and +ancestor+ must be String commit OIDs or instances of Rugged::Commit.
819
- *
820
- * Returns true if +commit+ is a descendant of +ancestor+, or false if not.
821
- */
822
- static VALUE rb_git_repo_descendant_of(VALUE self, VALUE rb_commit, VALUE rb_ancestor)
823
- {
824
- int result;
825
- int error;
826
- git_repository *repo;
827
- git_oid commit, ancestor;
828
-
829
- Data_Get_Struct(self, git_repository, repo);
830
-
831
- error = rugged_oid_get(&commit, repo, rb_commit);
832
- rugged_exception_check(error);
833
-
834
- error = rugged_oid_get(&ancestor, repo, rb_ancestor);
835
- rugged_exception_check(error);
836
-
837
- result = git_graph_descendant_of(repo, &commit, &ancestor);
838
- rugged_exception_check(result);
839
-
840
- return result ? Qtrue : Qfalse;
841
- }
842
-
843
739
  /*
844
740
  * call-seq:
845
741
  * Repository.hash_data(str, type) -> oid
@@ -2028,179 +1924,6 @@ static VALUE rb_git_repo_is_path_ignored(VALUE self, VALUE rb_path) {
2028
1924
  return ignored ? Qtrue : Qfalse;
2029
1925
  }
2030
1926
 
2031
- static void rugged_parse_cherrypick_options(git_cherrypick_options *opts, VALUE rb_options)
2032
- {
2033
- VALUE rb_value;
2034
-
2035
- if (NIL_P(rb_options))
2036
- return;
2037
-
2038
- Check_Type(rb_options, T_HASH);
2039
-
2040
- rb_value = rb_hash_aref(rb_options, CSTR2SYM("mainline"));
2041
- if (!NIL_P(rb_value)) {
2042
- opts->mainline = FIX2UINT(rb_value);
2043
- }
2044
- }
2045
-
2046
- static VALUE rugged_create_attr(const char *attr)
2047
- {
2048
- switch (git_attr_value(attr)) {
2049
- case GIT_ATTR_TRUE_T:
2050
- return Qtrue;
2051
-
2052
- case GIT_ATTR_FALSE_T:
2053
- return Qfalse;
2054
-
2055
- case GIT_ATTR_VALUE_T:
2056
- return rb_str_new2(attr);
2057
-
2058
- case GIT_ATTR_UNSPECIFIED_T:
2059
- default:
2060
- return Qnil;
2061
- }
2062
- }
2063
-
2064
- static int foreach_attr_hash(const char *name, const char *value, void *payload)
2065
- {
2066
- VALUE rb_hash = (VALUE)payload;
2067
- rb_hash_aset(rb_hash, rb_str_new2(name), rugged_create_attr(value));
2068
- return 0;
2069
- }
2070
-
2071
- static VALUE rb_git_repo_attributes(int argc, VALUE *argv, VALUE self)
2072
- {
2073
- VALUE rb_path, rb_names, rb_options;
2074
-
2075
- git_repository *repo;
2076
- int error, options = 0;
2077
-
2078
- rb_scan_args(argc, argv, "12", &rb_path, &rb_names, &rb_options);
2079
-
2080
- Data_Get_Struct(self, git_repository, repo);
2081
- Check_Type(rb_path, T_STRING);
2082
-
2083
- if (!NIL_P(rb_options)) {
2084
- Check_Type(rb_options, T_FIXNUM);
2085
- options = FIX2INT(rb_options);
2086
- }
2087
-
2088
- switch (TYPE(rb_names)) {
2089
- case T_ARRAY:
2090
- {
2091
- VALUE rb_result;
2092
- const char **values;
2093
- const char **names;
2094
- int i, num_attr = RARRAY_LEN(rb_names);
2095
-
2096
- if (num_attr > 32)
2097
- rb_raise(rb_eRuntimeError, "Too many attributes requested");
2098
-
2099
- values = alloca(num_attr * sizeof(const char *));
2100
- names = alloca(num_attr * sizeof(const char *));
2101
-
2102
- for (i = 0; i < num_attr; ++i) {
2103
- VALUE attr = rb_ary_entry(rb_names, i);
2104
- Check_Type(attr, T_STRING);
2105
- names[i] = StringValueCStr(attr);
2106
- }
2107
-
2108
- error = git_attr_get_many(
2109
- values, repo, options,
2110
- StringValueCStr(rb_path),
2111
- (size_t)num_attr, names);
2112
-
2113
- rugged_exception_check(error);
2114
-
2115
- rb_result = rb_hash_new();
2116
- for (i = 0; i < num_attr; ++i) {
2117
- VALUE attr = rb_ary_entry(rb_names, i);
2118
- rb_hash_aset(rb_result, attr, rugged_create_attr(values[i]));
2119
- }
2120
- return rb_result;
2121
- }
2122
-
2123
- case T_STRING:
2124
- {
2125
- const char *value;
2126
-
2127
- error = git_attr_get(
2128
- &value, repo, options,
2129
- StringValueCStr(rb_path),
2130
- StringValueCStr(rb_names));
2131
-
2132
- rugged_exception_check(error);
2133
-
2134
- return rugged_create_attr(value);
2135
- }
2136
-
2137
- case T_NIL:
2138
- {
2139
- VALUE rb_result = rb_hash_new();
2140
-
2141
- error = git_attr_foreach(
2142
- repo, options,
2143
- StringValueCStr(rb_path),
2144
- &foreach_attr_hash,
2145
- (void *)rb_result);
2146
-
2147
- rugged_exception_check(error);
2148
- return rb_result;
2149
- }
2150
-
2151
- default:
2152
- rb_raise(rb_eTypeError,
2153
- "Invalid attribute name (expected String or Array)");
2154
- }
2155
- }
2156
-
2157
- /*
2158
- * call-seq:
2159
- * repo.cherrypick(commit[, options]) -> nil
2160
- *
2161
- * Cherry-pick the given commit and update the index and working
2162
- * directory accordingly.
2163
- *
2164
- * `commit` can be either a string containing a commit id or a
2165
- * `Rugged::Commit` object.
2166
- *
2167
- * The following options can be passed in the +options+ Hash:
2168
- *
2169
- * :mainline ::
2170
- * When cherry-picking a merge, you need to specify the parent number
2171
- * (starting from 1) which should be considered the mainline.
2172
- */
2173
- static VALUE rb_git_repo_cherrypick(int argc, VALUE *argv, VALUE self)
2174
- {
2175
- VALUE rb_options, rb_commit;
2176
-
2177
- git_repository *repo;
2178
- git_commit *commit;
2179
- git_cherrypick_options opts = GIT_CHERRYPICK_OPTIONS_INIT;
2180
-
2181
- int error;
2182
-
2183
- rb_scan_args(argc, argv, "10:", &rb_commit, &rb_options);
2184
-
2185
- if (TYPE(rb_commit) == T_STRING) {
2186
- rb_commit = rugged_object_rev_parse(self, rb_commit, 1);
2187
- }
2188
-
2189
- if (!rb_obj_is_kind_of(rb_commit, rb_cRuggedCommit)) {
2190
- rb_raise(rb_eArgError, "Expected a Rugged::Commit.");
2191
- }
2192
-
2193
- Data_Get_Struct(self, git_repository, repo);
2194
- Data_Get_Struct(rb_commit, git_commit, commit);
2195
-
2196
- rugged_parse_cherrypick_options(&opts, rb_options);
2197
-
2198
- error = git_cherrypick(repo, commit, &opts);
2199
- rugged_exception_check(error);
2200
-
2201
- return Qnil;
2202
- }
2203
-
2204
1927
  void Init_rugged_repo(void)
2205
1928
  {
2206
1929
  id_call = rb_intern("call");
@@ -2219,8 +1942,6 @@ void Init_rugged_repo(void)
2219
1942
 
2220
1943
  rb_define_method(rb_cRuggedRepo, "exists?", rb_git_repo_exists, 1);
2221
1944
  rb_define_method(rb_cRuggedRepo, "include?", rb_git_repo_exists, 1);
2222
- rb_define_method(rb_cRuggedRepo, "expand_oids", rb_git_repo_expand_oids, -1);
2223
- rb_define_method(rb_cRuggedRepo, "descendant_of?", rb_git_repo_descendant_of, 2);
2224
1945
 
2225
1946
  rb_define_method(rb_cRuggedRepo, "read", rb_git_repo_read, 1);
2226
1947
  rb_define_method(rb_cRuggedRepo, "read_header", rb_git_repo_read_header, 1);
@@ -2265,9 +1986,6 @@ void Init_rugged_repo(void)
2265
1986
  rb_define_method(rb_cRuggedRepo, "checkout_tree", rb_git_checkout_tree, -1);
2266
1987
  rb_define_method(rb_cRuggedRepo, "checkout_head", rb_git_checkout_head, -1);
2267
1988
 
2268
- rb_define_method(rb_cRuggedRepo, "cherrypick", rb_git_repo_cherrypick, -1);
2269
- rb_define_method(rb_cRuggedRepo, "fetch_attributes", rb_git_repo_attributes, -1);
2270
-
2271
1989
  rb_cRuggedOdbObject = rb_define_class_under(rb_mRugged, "OdbObject", rb_cObject);
2272
1990
  rb_define_method(rb_cRuggedOdbObject, "data", rb_git_odbobj_data, 0);
2273
1991
  rb_define_method(rb_cRuggedOdbObject, "len", rb_git_odbobj_size, 0);