rugged 0.17.0b2 → 0.17.0.b6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (374) hide show
  1. data/Rakefile +10 -11
  2. data/ext/rugged/extconf.rb +5 -13
  3. data/ext/rugged/rugged_commit.c +2 -5
  4. data/ext/rugged/rugged_reference.c +29 -28
  5. data/ext/rugged/rugged_remote.c +1 -1
  6. data/ext/rugged/rugged_repo.c +4 -1
  7. data/ext/rugged/rugged_tree.c +20 -19
  8. data/lib/rugged/commit.rb +5 -1
  9. data/lib/rugged/repository.rb +6 -4
  10. data/lib/rugged/version.rb +1 -1
  11. data/test/config_test.rb +1 -1
  12. data/test/index_test.rb +4 -2
  13. data/test/object_test.rb +3 -3
  14. data/test/reference_test.rb +66 -1
  15. data/test/repo_test.rb +4 -4
  16. data/test/tree_test.rb +1 -1
  17. data/test/walker_test.rb +1 -1
  18. data/vendor/libgit2/Makefile.embed +42 -0
  19. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/http-parser/http_parser.c +0 -0
  20. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/http-parser/http_parser.h +0 -0
  21. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/config.h +0 -0
  22. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regcomp.c +0 -0
  23. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regex.c +0 -0
  24. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regex.h +0 -0
  25. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regex_internal.c +0 -0
  26. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regex_internal.h +0 -0
  27. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/regex/regexec.c +0 -0
  28. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/adler32.c +0 -0
  29. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/crc32.c +0 -0
  30. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/crc32.h +0 -0
  31. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/deflate.c +0 -0
  32. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/deflate.h +0 -0
  33. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inffast.c +0 -0
  34. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inffast.h +0 -0
  35. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inffixed.h +0 -0
  36. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inflate.c +0 -0
  37. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inflate.h +0 -0
  38. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inftrees.c +0 -0
  39. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/inftrees.h +0 -0
  40. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/trees.c +0 -0
  41. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/trees.h +0 -0
  42. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/zconf.h +0 -0
  43. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/zlib.h +0 -0
  44. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/zutil.c +0 -0
  45. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/deps/zlib/zutil.h +0 -0
  46. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2.h +6 -0
  47. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/attr.h +35 -20
  48. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/blob.h +1 -1
  49. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/branch.h +62 -24
  50. data/vendor/libgit2/include/git2/checkout.h +66 -0
  51. data/vendor/libgit2/include/git2/clone.h +59 -0
  52. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/commit.h +22 -3
  53. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/common.h +27 -0
  54. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/config.h +22 -4
  55. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/diff.h +20 -1
  56. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/errors.h +2 -37
  57. data/vendor/libgit2/include/git2/ignore.h +74 -0
  58. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/index.h +37 -5
  59. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/indexer.h +2 -2
  60. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/inttypes.h +0 -0
  61. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/merge.h +10 -0
  62. data/vendor/libgit2/include/git2/message.h +43 -0
  63. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/net.h +0 -0
  64. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/notes.h +24 -20
  65. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/object.h +18 -1
  66. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/odb.h +16 -1
  67. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/odb_backend.h +8 -1
  68. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/oid.h +26 -2
  69. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/reflog.h +39 -9
  70. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/refs.h +55 -3
  71. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/refspec.h +0 -0
  72. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/remote.h +68 -2
  73. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/repository.h +39 -1
  74. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/reset.h +0 -0
  75. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/revparse.h +0 -0
  76. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/revwalk.h +2 -2
  77. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/signature.h +3 -0
  78. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/status.h +5 -2
  79. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/stdint.h +0 -0
  80. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/submodule.h +0 -0
  81. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/tag.h +3 -3
  82. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/threads.h +0 -0
  83. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/tree.h +77 -20
  84. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/types.h +14 -0
  85. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/version.h +0 -0
  86. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/include/git2/windows.h +0 -0
  87. data/vendor/libgit2/src/amiga/map.c +51 -0
  88. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/attr.c +39 -6
  89. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/attr.h +1 -0
  90. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/attr_file.c +2 -16
  91. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/attr_file.h +4 -0
  92. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/blob.c +0 -0
  93. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/blob.h +0 -0
  94. data/vendor/libgit2/src/branch.c +294 -0
  95. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/bswap.h +0 -0
  96. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/buffer.c +40 -0
  97. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/buffer.h +22 -0
  98. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/cache.c +1 -0
  99. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/cache.h +0 -0
  100. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/cc-compat.h +0 -0
  101. data/vendor/libgit2/src/checkout.c +230 -0
  102. data/vendor/libgit2/src/clone.c +254 -0
  103. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/commit.c +42 -16
  104. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/commit.h +0 -0
  105. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/common.h +3 -9
  106. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/compat/fnmatch.c +0 -0
  107. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/compat/fnmatch.h +0 -0
  108. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/config.c +15 -5
  109. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/config.h +0 -0
  110. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/config_cache.c +0 -0
  111. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/config_file.c +86 -19
  112. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/config_file.h +16 -1
  113. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/crlf.c +92 -4
  114. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/date.c +20 -20
  115. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/delta-apply.c +0 -0
  116. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/delta-apply.h +0 -0
  117. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/diff.c +45 -18
  118. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/diff.h +0 -0
  119. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/diff_output.c +63 -46
  120. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/errors.c +0 -0
  121. data/vendor/libgit2/src/fetch.c +380 -0
  122. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/fetch.h +1 -2
  123. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/filebuf.c +7 -2
  124. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/filebuf.h +0 -0
  125. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/fileops.c +16 -1
  126. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/fileops.h +10 -0
  127. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/filter.c +38 -2
  128. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/filter.h +15 -0
  129. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/global.c +5 -0
  130. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/global.h +2 -6
  131. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/hash.c +0 -0
  132. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/hash.h +0 -0
  133. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/ignore.c +50 -1
  134. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/ignore.h +0 -0
  135. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/index.c +95 -28
  136. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/index.h +5 -0
  137. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/indexer.c +27 -25
  138. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/iterator.c +0 -0
  139. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/iterator.h +0 -0
  140. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/khash.h +6 -4
  141. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/map.h +4 -0
  142. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/message.c +27 -2
  143. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/message.h +2 -1
  144. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/mwindow.c +54 -10
  145. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/mwindow.h +1 -1
  146. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/netops.c +48 -38
  147. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/netops.h +7 -4
  148. data/vendor/libgit2/src/notes.c +610 -0
  149. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/notes.h +0 -0
  150. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/object.c +73 -2
  151. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/odb.c +20 -1
  152. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/odb.h +0 -0
  153. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/odb_loose.c +89 -3
  154. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/odb_pack.c +61 -3
  155. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/oid.c +1 -6
  156. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/oidmap.h +1 -6
  157. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pack.c +49 -4
  158. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pack.h +5 -1
  159. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/path.c +144 -21
  160. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/path.h +46 -0
  161. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pkt.c +30 -8
  162. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pkt.h +0 -0
  163. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pool.c +7 -0
  164. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pool.h +7 -0
  165. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/posix.c +92 -1
  166. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/posix.h +36 -1
  167. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/ppc/sha1.c +0 -0
  168. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/ppc/sha1.h +0 -0
  169. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pqueue.c +0 -0
  170. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/pqueue.h +0 -0
  171. data/vendor/libgit2/src/protocol.c +88 -0
  172. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/protocol.h +3 -9
  173. data/vendor/libgit2/src/reflog.c +489 -0
  174. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/reflog.h +3 -0
  175. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/refs.c +95 -52
  176. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/refs.h +0 -0
  177. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/refspec.c +0 -0
  178. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/refspec.h +0 -0
  179. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/remote.c +130 -8
  180. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/remote.h +6 -0
  181. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/repository.c +167 -42
  182. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/repository.h +7 -0
  183. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/reset.c +1 -1
  184. data/vendor/libgit2/src/revparse.c +830 -0
  185. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/revwalk.c +83 -15
  186. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/sha1.c +0 -0
  187. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/sha1.h +5 -0
  188. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/sha1_lookup.c +0 -0
  189. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/sha1_lookup.h +0 -0
  190. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/signature.c +19 -5
  191. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/signature.h +0 -0
  192. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/status.c +24 -18
  193. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/strmap.h +1 -1
  194. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/submodule.c +3 -3
  195. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tag.c +2 -9
  196. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tag.h +0 -0
  197. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/thread-utils.c +0 -0
  198. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/thread-utils.h +0 -0
  199. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/transport.c +0 -0
  200. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/transport.h +13 -9
  201. data/vendor/libgit2/src/transports/git.c +245 -0
  202. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/transports/http.c +93 -336
  203. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/transports/local.c +35 -32
  204. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tree-cache.c +0 -0
  205. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tree-cache.h +0 -0
  206. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tree.c +214 -124
  207. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tree.h +7 -3
  208. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/tsort.c +0 -0
  209. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/unix/map.c +2 -0
  210. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/unix/posix.h +2 -1
  211. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/util.c +30 -0
  212. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/util.h +13 -6
  213. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/vector.c +1 -1
  214. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/vector.h +5 -5
  215. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/dir.c +0 -0
  216. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/dir.h +0 -0
  217. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/map.c +0 -0
  218. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/mingw-compat.h +0 -0
  219. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/msvc-compat.h +0 -0
  220. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/posix.h +1 -0
  221. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/posix_w32.c +17 -1
  222. data/vendor/libgit2/src/win32/precompiled.c +1 -0
  223. data/vendor/libgit2/src/win32/precompiled.h +19 -0
  224. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/pthread.c +0 -0
  225. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/pthread.h +0 -0
  226. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/utf-conv.c +0 -0
  227. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/win32/utf-conv.h +0 -0
  228. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xdiff.h +0 -0
  229. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xdiffi.c +0 -0
  230. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xdiffi.h +0 -0
  231. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xemit.c +0 -0
  232. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xemit.h +0 -0
  233. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xhistogram.c +0 -0
  234. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xinclude.h +0 -0
  235. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xmacros.h +0 -0
  236. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xmerge.c +0 -0
  237. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xpatience.c +0 -0
  238. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xprepare.c +0 -0
  239. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xprepare.h +0 -0
  240. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xtypes.h +0 -0
  241. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xutils.c +0 -0
  242. data/{ext/rugged/vendor/libgit2-dist → vendor/libgit2}/src/xdiff/xutils.h +0 -0
  243. metadata +265 -348
  244. data/ext/rugged/vendor/libgit2-dist.tar.gz +0 -0
  245. data/ext/rugged/vendor/libgit2-dist/examples/diff.c +0 -238
  246. data/ext/rugged/vendor/libgit2-dist/examples/general.c +0 -451
  247. data/ext/rugged/vendor/libgit2-dist/examples/network/common.h +0 -14
  248. data/ext/rugged/vendor/libgit2-dist/examples/network/fetch.c +0 -113
  249. data/ext/rugged/vendor/libgit2-dist/examples/network/git2.c +0 -62
  250. data/ext/rugged/vendor/libgit2-dist/examples/network/index-pack.c +0 -102
  251. data/ext/rugged/vendor/libgit2-dist/examples/network/ls-remote.c +0 -76
  252. data/ext/rugged/vendor/libgit2-dist/examples/showindex.c +0 -43
  253. data/ext/rugged/vendor/libgit2-dist/src/branch.c +0 -208
  254. data/ext/rugged/vendor/libgit2-dist/src/branch.h +0 -17
  255. data/ext/rugged/vendor/libgit2-dist/src/fetch.c +0 -200
  256. data/ext/rugged/vendor/libgit2-dist/src/notes.c +0 -548
  257. data/ext/rugged/vendor/libgit2-dist/src/protocol.c +0 -58
  258. data/ext/rugged/vendor/libgit2-dist/src/reflog.c +0 -340
  259. data/ext/rugged/vendor/libgit2-dist/src/revparse.c +0 -748
  260. data/ext/rugged/vendor/libgit2-dist/src/transports/git.c +0 -477
  261. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/attr_expect.h +0 -43
  262. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/file.c +0 -226
  263. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/flags.c +0 -108
  264. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/lookup.c +0 -262
  265. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/repo.c +0 -273
  266. data/ext/rugged/vendor/libgit2-dist/tests-clar/buf/basic.c +0 -29
  267. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_helpers.c +0 -181
  268. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_libgit2.h +0 -55
  269. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/commit.c +0 -44
  270. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/parse.c +0 -350
  271. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/signature.c +0 -65
  272. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/write.c +0 -140
  273. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/add.c +0 -37
  274. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/multivar.c +0 -151
  275. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/new.c +0 -36
  276. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/read.c +0 -221
  277. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/stress.c +0 -61
  278. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/write.c +0 -92
  279. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/buffer.c +0 -613
  280. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/dirent.c +0 -235
  281. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/env.c +0 -115
  282. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/errors.c +0 -60
  283. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/filebuf.c +0 -92
  284. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/hex.c +0 -22
  285. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/oid.c +0 -18
  286. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/path.c +0 -420
  287. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/pool.c +0 -85
  288. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/rmdir.c +0 -68
  289. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/string.c +0 -28
  290. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/strmap.c +0 -102
  291. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/strtol.c +0 -37
  292. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/vector.c +0 -191
  293. data/ext/rugged/vendor/libgit2-dist/tests-clar/date/date.c +0 -15
  294. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/blob.c +0 -254
  295. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.c +0 -104
  296. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.h +0 -47
  297. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/index.c +0 -92
  298. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/iterator.c +0 -572
  299. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/patch.c +0 -99
  300. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/tree.c +0 -210
  301. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/workdir.c +0 -543
  302. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/read_tree.c +0 -46
  303. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/rename.c +0 -50
  304. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/tests.c +0 -246
  305. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/createremotethenload.c +0 -33
  306. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotelocal.c +0 -137
  307. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotes.c +0 -183
  308. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notes.c +0 -133
  309. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notesref.c +0 -57
  310. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/filter.c +0 -125
  311. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/fromchunks.c +0 -87
  312. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/write.c +0 -69
  313. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/commit/commitstagedfile.c +0 -126
  314. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/lookup.c +0 -63
  315. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/message.c +0 -171
  316. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/chars.c +0 -41
  317. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/compare.c +0 -124
  318. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/convert.c +0 -75
  319. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/data.h +0 -323
  320. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/fromstr.c +0 -30
  321. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/hash.c +0 -166
  322. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/short.c +0 -94
  323. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/size.c +0 -13
  324. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/type2string.c +0 -54
  325. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/write.c +0 -455
  326. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/peel.c +0 -56
  327. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/read.c +0 -130
  328. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/write.c +0 -192
  329. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/frompath.c +0 -81
  330. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/read.c +0 -75
  331. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/write.c +0 -84
  332. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/loose.c +0 -84
  333. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/loose_data.h +0 -522
  334. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/mixed.c +0 -24
  335. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/pack_data.h +0 -151
  336. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/packed.c +0 -78
  337. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/sorting.c +0 -71
  338. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/create.c +0 -113
  339. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/delete.c +0 -91
  340. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/listall.c +0 -78
  341. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/move.c +0 -72
  342. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/crashes.c +0 -17
  343. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/create.c +0 -149
  344. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/delete.c +0 -85
  345. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/list.c +0 -53
  346. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/listall.c +0 -36
  347. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/lookup.c +0 -42
  348. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/normalize.c +0 -200
  349. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/overwrite.c +0 -136
  350. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/pack.c +0 -67
  351. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/read.c +0 -194
  352. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/reflog.c +0 -123
  353. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/rename.c +0 -339
  354. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/revparse.c +0 -174
  355. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/unicode.c +0 -42
  356. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/discover.c +0 -142
  357. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/getters.c +0 -86
  358. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/init.c +0 -249
  359. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/open.c +0 -282
  360. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/setters.c +0 -80
  361. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/mixed.c +0 -47
  362. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.c +0 -10
  363. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.h +0 -6
  364. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/soft.c +0 -102
  365. data/ext/rugged/vendor/libgit2-dist/tests-clar/revwalk/basic.c +0 -181
  366. data/ext/rugged/vendor/libgit2-dist/tests-clar/revwalk/mergebase.c +0 -148
  367. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/ignore.c +0 -147
  368. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/single.c +0 -29
  369. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_data.h +0 -202
  370. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.c +0 -49
  371. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.h +0 -33
  372. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/submodules.c +0 -112
  373. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/worktree.c +0 -649
  374. data/ext/rugged/vendor/libgit2-dist/tests-clar/threads/basic.c +0 -20
@@ -17,6 +17,8 @@
17
17
 
18
18
  #define GIT_REFLOG_SIZE_MIN (2*GIT_OID_HEXSZ+2+17)
19
19
 
20
+ #define GIT_OID_HEX_ZERO "0000000000000000000000000000000000000000"
21
+
20
22
  struct git_reflog_entry {
21
23
  git_oid oid_old;
22
24
  git_oid oid_cur;
@@ -28,6 +30,7 @@ struct git_reflog_entry {
28
30
 
29
31
  struct git_reflog {
30
32
  char *ref_name;
33
+ git_repository *owner;
31
34
  git_vector entries;
32
35
  };
33
36
 
@@ -14,6 +14,7 @@
14
14
 
15
15
  #include <git2/tag.h>
16
16
  #include <git2/object.h>
17
+ #include <git2/oid.h>
17
18
 
18
19
  GIT__USE_STRMAP;
19
20
 
@@ -128,6 +129,7 @@ static int reference_read(
128
129
 
129
130
  result = git_futils_readbuffer_updated(file_content, path.ptr, mtime, updated);
130
131
  git_buf_free(&path);
132
+
131
133
  return result;
132
134
  }
133
135
 
@@ -135,12 +137,13 @@ static int loose_parse_symbolic(git_reference *ref, git_buf *file_content)
135
137
  {
136
138
  const unsigned int header_len = (unsigned int)strlen(GIT_SYMREF);
137
139
  const char *refname_start;
138
- char *eol;
139
140
 
140
141
  refname_start = (const char *)file_content->ptr;
141
142
 
142
- if (git_buf_len(file_content) < header_len + 1)
143
- goto corrupt;
143
+ if (git_buf_len(file_content) < header_len + 1) {
144
+ giterr_set(GITERR_REFERENCE, "Corrupted loose reference file");
145
+ return -1;
146
+ }
144
147
 
145
148
  /*
146
149
  * Assume we have already checked for the header
@@ -151,45 +154,16 @@ static int loose_parse_symbolic(git_reference *ref, git_buf *file_content)
151
154
  ref->target.symbolic = git__strdup(refname_start);
152
155
  GITERR_CHECK_ALLOC(ref->target.symbolic);
153
156
 
154
- /* remove newline at the end of file */
155
- eol = strchr(ref->target.symbolic, '\n');
156
- if (eol == NULL)
157
- goto corrupt;
158
-
159
- *eol = '\0';
160
- if (eol[-1] == '\r')
161
- eol[-1] = '\0';
162
-
163
157
  return 0;
164
-
165
- corrupt:
166
- giterr_set(GITERR_REFERENCE, "Corrupted loose reference file");
167
- return -1;
168
158
  }
169
159
 
170
160
  static int loose_parse_oid(git_oid *oid, git_buf *file_content)
171
161
  {
172
- char *buffer;
173
-
174
- buffer = (char *)file_content->ptr;
175
-
176
- /* File format: 40 chars (OID) + newline */
177
- if (git_buf_len(file_content) < GIT_OID_HEXSZ + 1)
178
- goto corrupt;
179
-
180
- if (git_oid_fromstr(oid, buffer) < 0)
181
- goto corrupt;
182
-
183
- buffer = buffer + GIT_OID_HEXSZ;
184
- if (*buffer == '\r')
185
- buffer++;
186
-
187
- if (*buffer != '\n')
188
- goto corrupt;
189
-
190
- return 0;
162
+ /* File format: 40 chars (OID) */
163
+ if (git_buf_len(file_content) == GIT_OID_HEXSZ &&
164
+ git_oid_fromstr(oid, git_buf_cstr(file_content)) == 0)
165
+ return 0;
191
166
 
192
- corrupt:
193
167
  giterr_set(GITERR_REFERENCE, "Corrupted loose reference file");
194
168
  return -1;
195
169
  }
@@ -226,6 +200,8 @@ static int loose_lookup(git_reference *ref)
226
200
  if (!updated)
227
201
  return 0;
228
202
 
203
+ git_buf_rtrim(&ref_file);
204
+
229
205
  if (ref->flags & GIT_REF_SYMBOLIC) {
230
206
  git__free(ref->target.symbolic);
231
207
  ref->target.symbolic = NULL;
@@ -259,6 +235,8 @@ static int loose_lookup_to_packfile(
259
235
  if (reference_read(&ref_file, NULL, repo->path_repository, name, NULL) < 0)
260
236
  return -1;
261
237
 
238
+ git_buf_rtrim(&ref_file);
239
+
262
240
  name_len = strlen(name);
263
241
  ref = git__malloc(sizeof(struct packref) + name_len + 1);
264
242
  GITERR_CHECK_ALLOC(ref);
@@ -500,6 +478,7 @@ struct dirent_list_data {
500
478
 
501
479
  int (*callback)(const char *, void *);
502
480
  void *callback_payload;
481
+ int callback_error;
503
482
  };
504
483
 
505
484
  static int _dirent_loose_listall(void *_data, git_buf *full_path)
@@ -520,7 +499,10 @@ static int _dirent_loose_listall(void *_data, git_buf *full_path)
520
499
  return 0; /* we are filtering out this reference */
521
500
  }
522
501
 
523
- return data->callback(file_path, data->callback_payload);
502
+ if (data->callback(file_path, data->callback_payload))
503
+ data->callback_error = GIT_EUSER;
504
+
505
+ return data->callback_error;
524
506
  }
525
507
 
526
508
  static int _dirent_loose_load(void *data, git_buf *full_path)
@@ -843,15 +825,17 @@ static int reference_path_available(
843
825
  const char *ref,
844
826
  const char* old_ref)
845
827
  {
828
+ int error;
846
829
  struct reference_available_t data;
847
830
 
848
831
  data.new_ref = ref;
849
832
  data.old_ref = old_ref;
850
833
  data.available = 1;
851
834
 
852
- if (git_reference_foreach(repo, GIT_REF_LISTALL,
853
- _reference_available_cb, (void *)&data) < 0)
854
- return -1;
835
+ error = git_reference_foreach(
836
+ repo, GIT_REF_LISTALL, _reference_available_cb, (void *)&data);
837
+ if (error < 0)
838
+ return error;
855
839
 
856
840
  if (!data.available) {
857
841
  giterr_set(GITERR_REFERENCE,
@@ -1396,6 +1380,9 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force)
1396
1380
  head_target = git_reference_target(head);
1397
1381
 
1398
1382
  if (head_target && !strcmp(head_target, ref->name)) {
1383
+ git_reference_free(head);
1384
+ head = NULL;
1385
+
1399
1386
  if (git_reference_create_symbolic(&head, ref->owner, "HEAD", new_name, 1) < 0) {
1400
1387
  giterr_set(GITERR_REFERENCE,
1401
1388
  "Failed to update HEAD after renaming reference");
@@ -1404,18 +1391,11 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force)
1404
1391
  }
1405
1392
 
1406
1393
  /*
1407
- * Rename the reflog file.
1394
+ * Rename the reflog file, if it exists.
1408
1395
  */
1409
- if (git_buf_join_n(&aux_path, '/', 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name) < 0)
1396
+ if ((git_reference_has_log(ref)) && (git_reflog_rename(ref, new_name) < 0))
1410
1397
  goto cleanup;
1411
1398
 
1412
- if (git_path_exists(aux_path.ptr) == true) {
1413
- if (git_reflog_rename(ref, new_name) < 0)
1414
- goto cleanup;
1415
- } else {
1416
- giterr_clear();
1417
- }
1418
-
1419
1399
  /*
1420
1400
  * Change the name of the reference given by the user.
1421
1401
  */
@@ -1490,8 +1470,8 @@ int git_reference_foreach(
1490
1470
  return -1;
1491
1471
 
1492
1472
  git_strmap_foreach(repo->references.packfile, ref_name, ref, {
1493
- if (callback(ref_name, payload) < 0)
1494
- return 0;
1473
+ if (callback(ref_name, payload))
1474
+ return GIT_EUSER;
1495
1475
  });
1496
1476
  }
1497
1477
 
@@ -1503,14 +1483,16 @@ int git_reference_foreach(
1503
1483
  data.repo = repo;
1504
1484
  data.callback = callback;
1505
1485
  data.callback_payload = payload;
1486
+ data.callback_error = 0;
1506
1487
 
1507
1488
  if (git_buf_joinpath(&refs_path, repo->path_repository, GIT_REFS_DIR) < 0)
1508
1489
  return -1;
1509
1490
 
1510
1491
  result = git_path_direach(&refs_path, _dirent_loose_listall, &data);
1492
+
1511
1493
  git_buf_free(&refs_path);
1512
1494
 
1513
- return result;
1495
+ return data.callback_error ? GIT_EUSER : result;
1514
1496
  }
1515
1497
 
1516
1498
  static int cb__reflist_add(const char *ref, void *data)
@@ -1764,3 +1746,64 @@ int git_reference__update(git_repository *repo, const git_oid *oid, const char *
1764
1746
  git_reference_free(ref);
1765
1747
  return res;
1766
1748
  }
1749
+
1750
+ struct glob_cb_data {
1751
+ const char *glob;
1752
+ int (*callback)(const char *, void *);
1753
+ void *payload;
1754
+ };
1755
+
1756
+ static int fromglob_cb(const char *reference_name, void *payload)
1757
+ {
1758
+ struct glob_cb_data *data = (struct glob_cb_data *)payload;
1759
+
1760
+ if (!p_fnmatch(data->glob, reference_name, 0))
1761
+ return data->callback(reference_name, data->payload);
1762
+
1763
+ return 0;
1764
+ }
1765
+
1766
+ int git_reference_foreach_glob(
1767
+ git_repository *repo,
1768
+ const char *glob,
1769
+ unsigned int list_flags,
1770
+ int (*callback)(
1771
+ const char *reference_name,
1772
+ void *payload),
1773
+ void *payload)
1774
+ {
1775
+ struct glob_cb_data data;
1776
+
1777
+ assert(repo && glob && callback);
1778
+
1779
+ data.glob = glob;
1780
+ data.callback = callback;
1781
+ data.payload = payload;
1782
+
1783
+ return git_reference_foreach(
1784
+ repo, list_flags, fromglob_cb, &data);
1785
+ }
1786
+
1787
+ int git_reference_has_log(
1788
+ git_reference *ref)
1789
+ {
1790
+ git_buf path = GIT_BUF_INIT;
1791
+ int result;
1792
+
1793
+ assert(ref);
1794
+
1795
+ if (git_buf_join_n(&path, '/', 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name) < 0)
1796
+ return -1;
1797
+
1798
+ result = git_path_isfile(git_buf_cstr(&path));
1799
+ git_buf_free(&path);
1800
+
1801
+ return result;
1802
+ }
1803
+
1804
+ int git_reference_is_branch(git_reference *ref)
1805
+ {
1806
+ assert(ref);
1807
+
1808
+ return git__prefixcmp(ref->name, GIT_REFS_HEADS_DIR) == 0;
1809
+ }
@@ -5,15 +5,16 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
 
8
- #include "git2/remote.h"
9
8
  #include "git2/config.h"
10
9
  #include "git2/types.h"
10
+ #include "git2/oid.h"
11
11
 
12
12
  #include "config.h"
13
13
  #include "repository.h"
14
14
  #include "remote.h"
15
15
  #include "fetch.h"
16
16
  #include "refs.h"
17
+ #include "pkt.h"
17
18
 
18
19
  #include <regex.h>
19
20
 
@@ -130,6 +131,26 @@ int git_remote_load(git_remote **out, git_repository *repo, const char *name)
130
131
  remote->url = git__strdup(val);
131
132
  GITERR_CHECK_ALLOC(remote->url);
132
133
 
134
+ git_buf_clear(&buf);
135
+ if (git_buf_printf(&buf, "remote.%s.pushurl", name) < 0) {
136
+ error = -1;
137
+ goto cleanup;
138
+ }
139
+
140
+ error = git_config_get_string(&val, config, git_buf_cstr(&buf));
141
+ if (error == GIT_ENOTFOUND)
142
+ error = 0;
143
+
144
+ if (error < 0) {
145
+ error = -1;
146
+ goto cleanup;
147
+ }
148
+
149
+ if (val) {
150
+ remote->pushurl = git__strdup(val);
151
+ GITERR_CHECK_ALLOC(remote->pushurl);
152
+ }
153
+
133
154
  git_buf_clear(&buf);
134
155
  if (git_buf_printf(&buf, "remote.%s.fetch", name) < 0) {
135
156
  error = -1;
@@ -179,7 +200,7 @@ int git_remote_save(const git_remote *remote)
179
200
  if (git_repository_config__weakptr(&config, remote->repo) < 0)
180
201
  return -1;
181
202
 
182
- if (git_buf_printf(&buf, "remote.%s.%s", remote->name, "url") < 0)
203
+ if (git_buf_printf(&buf, "remote.%s.url", remote->name) < 0)
183
204
  return -1;
184
205
 
185
206
  if (git_config_set_string(config, git_buf_cstr(&buf), remote->url) < 0) {
@@ -187,6 +208,26 @@ int git_remote_save(const git_remote *remote)
187
208
  return -1;
188
209
  }
189
210
 
211
+ git_buf_clear(&buf);
212
+ if (git_buf_printf(&buf, "remote.%s.pushurl", remote->name) < 0)
213
+ return -1;
214
+
215
+ if (remote->pushurl) {
216
+ if (git_config_set_string(config, git_buf_cstr(&buf), remote->pushurl) < 0) {
217
+ git_buf_free(&buf);
218
+ return -1;
219
+ }
220
+ } else {
221
+ int error = git_config_delete(config, git_buf_cstr(&buf));
222
+ if (error == GIT_ENOTFOUND) {
223
+ error = 0;
224
+ }
225
+ if (error < 0) {
226
+ git_buf_free(&buf);
227
+ return -1;
228
+ }
229
+ }
230
+
190
231
  if (remote->fetch.src != NULL && remote->fetch.dst != NULL) {
191
232
  git_buf_clear(&buf);
192
233
  git_buf_clear(&value);
@@ -238,6 +279,38 @@ const char *git_remote_url(git_remote *remote)
238
279
  return remote->url;
239
280
  }
240
281
 
282
+ int git_remote_set_url(git_remote *remote, const char* url)
283
+ {
284
+ assert(remote);
285
+ assert(url);
286
+
287
+ git__free(remote->url);
288
+ remote->url = git__strdup(url);
289
+ GITERR_CHECK_ALLOC(remote->url);
290
+
291
+ return 0;
292
+ }
293
+
294
+ const char *git_remote_pushurl(git_remote *remote)
295
+ {
296
+ assert(remote);
297
+ return remote->pushurl;
298
+ }
299
+
300
+ int git_remote_set_pushurl(git_remote *remote, const char* url)
301
+ {
302
+ assert(remote);
303
+
304
+ git__free(remote->pushurl);
305
+ if (url) {
306
+ remote->pushurl = git__strdup(url);
307
+ GITERR_CHECK_ALLOC(remote->pushurl);
308
+ } else {
309
+ remote->pushurl = NULL;
310
+ }
311
+ return 0;
312
+ }
313
+
241
314
  int git_remote_set_fetchspec(git_remote *remote, const char *spec)
242
315
  {
243
316
  git_refspec refspec;
@@ -284,13 +357,33 @@ const git_refspec *git_remote_pushspec(git_remote *remote)
284
357
  return &remote->push;
285
358
  }
286
359
 
360
+ const char* git_remote__urlfordirection(git_remote *remote, int direction)
361
+ {
362
+ assert(remote);
363
+
364
+ if (direction == GIT_DIR_FETCH) {
365
+ return remote->url;
366
+ }
367
+
368
+ if (direction == GIT_DIR_PUSH) {
369
+ return remote->pushurl ? remote->pushurl : remote->url;
370
+ }
371
+
372
+ return NULL;
373
+ }
374
+
287
375
  int git_remote_connect(git_remote *remote, int direction)
288
376
  {
289
377
  git_transport *t;
378
+ const char *url;
290
379
 
291
380
  assert(remote);
292
381
 
293
- if (git_transport_new(&t, remote->url) < 0)
382
+ url = git_remote__urlfordirection(remote, direction);
383
+ if (url == NULL )
384
+ return -1;
385
+
386
+ if (git_transport_new(&t, url) < 0)
294
387
  return -1;
295
388
 
296
389
  t->check_cert = remote->check_cert;
@@ -309,6 +402,10 @@ on_error:
309
402
 
310
403
  int git_remote_ls(git_remote *remote, git_headlist_cb list_cb, void *payload)
311
404
  {
405
+ git_vector *refs = &remote->transport->refs;
406
+ unsigned int i;
407
+ git_pkt *p = NULL;
408
+
312
409
  assert(remote);
313
410
 
314
411
  if (!remote->transport || !remote->transport->connected) {
@@ -316,7 +413,19 @@ int git_remote_ls(git_remote *remote, git_headlist_cb list_cb, void *payload)
316
413
  return -1;
317
414
  }
318
415
 
319
- return remote->transport->ls(remote->transport, list_cb, payload);
416
+ git_vector_foreach(refs, i, p) {
417
+ git_pkt_ref *pkt = NULL;
418
+
419
+ if (p->type != GIT_PKT_REF)
420
+ continue;
421
+
422
+ pkt = (git_pkt_ref *)p;
423
+
424
+ if (list_cb(&pkt->head, payload))
425
+ return GIT_EUSER;
426
+ }
427
+
428
+ return 0;
320
429
  }
321
430
 
322
431
  int git_remote_download(git_remote *remote, git_off_t *bytes, git_indexer_stats *stats)
@@ -331,7 +440,7 @@ int git_remote_download(git_remote *remote, git_off_t *bytes, git_indexer_stats
331
440
  return git_fetch_download_pack(remote, bytes, stats);
332
441
  }
333
442
 
334
- int git_remote_update_tips(git_remote *remote, int (*cb)(const char *refname, const git_oid *a, const git_oid *b))
443
+ int git_remote_update_tips(git_remote *remote)
335
444
  {
336
445
  int error = 0;
337
446
  unsigned int i = 0;
@@ -377,12 +486,12 @@ int git_remote_update_tips(git_remote *remote, int (*cb)(const char *refname, co
377
486
  continue;
378
487
 
379
488
  if (git_reference_create_oid(&ref, remote->repo, refname.ptr, &head->oid, 1) < 0)
380
- break;
489
+ goto on_error;
381
490
 
382
491
  git_reference_free(ref);
383
492
 
384
- if (cb != NULL) {
385
- if (cb(refname.ptr, &old, &head->oid) < 0)
493
+ if (remote->callbacks.update_tips != NULL) {
494
+ if (remote->callbacks.update_tips(refname.ptr, &old, &head->oid, remote->callbacks.data) < 0)
386
495
  goto on_error;
387
496
  }
388
497
  }
@@ -429,6 +538,7 @@ void git_remote_free(git_remote *remote)
429
538
  git__free(remote->push.src);
430
539
  git__free(remote->push.dst);
431
540
  git__free(remote->url);
541
+ git__free(remote->pushurl);
432
542
  git__free(remote->name);
433
543
  git__free(remote);
434
544
  }
@@ -487,6 +597,11 @@ int git_remote_list(git_strarray *remotes_list, git_repository *repo)
487
597
  }
488
598
 
489
599
  git_vector_free(&list);
600
+
601
+ /* cb error is converted to GIT_EUSER by git_config_foreach */
602
+ if (error == GIT_EUSER)
603
+ error = -1;
604
+
490
605
  return error;
491
606
  }
492
607
 
@@ -525,3 +640,10 @@ void git_remote_check_cert(git_remote *remote, int check)
525
640
 
526
641
  remote->check_cert = check;
527
642
  }
643
+
644
+ void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks)
645
+ {
646
+ assert(remote && callbacks);
647
+
648
+ memcpy(&remote->callbacks, callbacks, sizeof(git_remote_callbacks));
649
+ }