rugged 1.3.2.3 → 1.4.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 (329) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +1 -1
  3. data/ext/rugged/rugged_config.c +7 -2
  4. data/ext/rugged/rugged_remote.c +17 -0
  5. data/lib/rugged/version.rb +1 -1
  6. data/vendor/libgit2/CMakeLists.txt +103 -276
  7. data/vendor/libgit2/COPYING +36 -19
  8. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  9. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  10. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  11. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  12. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  13. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  14. data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
  15. data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
  16. data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
  17. data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
  18. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  19. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  20. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  21. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  22. data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
  23. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  24. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  25. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  26. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  27. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  28. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
  29. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
  30. data/vendor/libgit2/cmake/SelectHashes.cmake +39 -49
  31. data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
  32. data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
  33. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
  34. data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
  35. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
  36. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +31 -31
  37. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -1
  38. data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
  39. data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
  40. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
  42. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  43. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  44. data/vendor/libgit2/deps/zlib/crc32.c +288 -975
  45. data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
  46. data/vendor/libgit2/deps/zlib/deflate.c +31 -83
  47. data/vendor/libgit2/deps/zlib/deflate.h +15 -12
  48. data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
  49. data/vendor/libgit2/deps/zlib/infback.c +1 -2
  50. data/vendor/libgit2/deps/zlib/inffast.c +14 -14
  51. data/vendor/libgit2/deps/zlib/inflate.c +8 -39
  52. data/vendor/libgit2/deps/zlib/inflate.h +2 -3
  53. data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
  54. data/vendor/libgit2/deps/zlib/trees.c +48 -27
  55. data/vendor/libgit2/deps/zlib/zlib.h +100 -126
  56. data/vendor/libgit2/deps/zlib/zutil.c +2 -2
  57. data/vendor/libgit2/deps/zlib/zutil.h +9 -12
  58. data/vendor/libgit2/include/git2/apply.h +16 -2
  59. data/vendor/libgit2/include/git2/attr.h +11 -2
  60. data/vendor/libgit2/include/git2/blame.h +4 -1
  61. data/vendor/libgit2/include/git2/blob.h +14 -1
  62. data/vendor/libgit2/include/git2/branch.h +2 -0
  63. data/vendor/libgit2/include/git2/buffer.h +18 -78
  64. data/vendor/libgit2/include/git2/cert.h +2 -2
  65. data/vendor/libgit2/include/git2/checkout.h +5 -2
  66. data/vendor/libgit2/include/git2/clone.h +3 -3
  67. data/vendor/libgit2/include/git2/commit.h +2 -0
  68. data/vendor/libgit2/include/git2/common.h +5 -12
  69. data/vendor/libgit2/include/git2/config.h +19 -3
  70. data/vendor/libgit2/include/git2/credential.h +2 -1
  71. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  72. data/vendor/libgit2/include/git2/deprecated.h +1 -1
  73. data/vendor/libgit2/include/git2/describe.h +7 -2
  74. data/vendor/libgit2/include/git2/diff.h +17 -9
  75. data/vendor/libgit2/include/git2/email.h +1 -1
  76. data/vendor/libgit2/include/git2/errors.h +1 -2
  77. data/vendor/libgit2/include/git2/filter.h +7 -2
  78. data/vendor/libgit2/include/git2/graph.h +1 -0
  79. data/vendor/libgit2/include/git2/ignore.h +1 -1
  80. data/vendor/libgit2/include/git2/index.h +11 -5
  81. data/vendor/libgit2/include/git2/indexer.h +19 -0
  82. data/vendor/libgit2/include/git2/merge.h +23 -3
  83. data/vendor/libgit2/include/git2/message.h +2 -0
  84. data/vendor/libgit2/include/git2/object.h +23 -0
  85. data/vendor/libgit2/include/git2/odb.h +37 -7
  86. data/vendor/libgit2/include/git2/odb_backend.h +1 -1
  87. data/vendor/libgit2/include/git2/pack.h +24 -8
  88. data/vendor/libgit2/include/git2/patch.h +8 -0
  89. data/vendor/libgit2/include/git2/pathspec.h +1 -1
  90. data/vendor/libgit2/include/git2/proxy.h +1 -1
  91. data/vendor/libgit2/include/git2/rebase.h +9 -1
  92. data/vendor/libgit2/include/git2/refdb.h +3 -0
  93. data/vendor/libgit2/include/git2/reflog.h +1 -1
  94. data/vendor/libgit2/include/git2/refs.h +2 -2
  95. data/vendor/libgit2/include/git2/remote.h +184 -37
  96. data/vendor/libgit2/include/git2/repository.h +14 -9
  97. data/vendor/libgit2/include/git2/reset.h +2 -2
  98. data/vendor/libgit2/include/git2/revparse.h +1 -1
  99. data/vendor/libgit2/include/git2/revwalk.h +4 -1
  100. data/vendor/libgit2/include/git2/signature.h +1 -1
  101. data/vendor/libgit2/include/git2/stash.h +3 -3
  102. data/vendor/libgit2/include/git2/status.h +9 -3
  103. data/vendor/libgit2/include/git2/submodule.h +7 -2
  104. data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
  105. data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -5
  106. data/vendor/libgit2/include/git2/sys/remote.h +31 -0
  107. data/vendor/libgit2/include/git2/sys/stream.h +1 -1
  108. data/vendor/libgit2/include/git2/sys/transport.h +25 -34
  109. data/vendor/libgit2/include/git2/tag.h +1 -0
  110. data/vendor/libgit2/include/git2/tree.h +4 -3
  111. data/vendor/libgit2/include/git2/types.h +7 -7
  112. data/vendor/libgit2/include/git2/version.h +3 -3
  113. data/vendor/libgit2/include/git2/worktree.h +12 -2
  114. data/vendor/libgit2/src/CMakeLists.txt +189 -315
  115. data/vendor/libgit2/src/annotated_commit.h +1 -1
  116. data/vendor/libgit2/src/apply.c +18 -18
  117. data/vendor/libgit2/src/apply.h +2 -2
  118. data/vendor/libgit2/src/attr.c +18 -18
  119. data/vendor/libgit2/src/attr_file.c +17 -17
  120. data/vendor/libgit2/src/attr_file.h +4 -4
  121. data/vendor/libgit2/src/attrcache.c +17 -12
  122. data/vendor/libgit2/src/blame_git.c +1 -1
  123. data/vendor/libgit2/src/blob.c +33 -26
  124. data/vendor/libgit2/src/blob.h +1 -1
  125. data/vendor/libgit2/src/branch.c +150 -109
  126. data/vendor/libgit2/src/branch.h +15 -3
  127. data/vendor/libgit2/src/buf.c +126 -0
  128. data/vendor/libgit2/src/buf.h +50 -0
  129. data/vendor/libgit2/src/cc-compat.h +1 -1
  130. data/vendor/libgit2/src/checkout.c +74 -68
  131. data/vendor/libgit2/src/cherrypick.c +10 -10
  132. data/vendor/libgit2/src/clone.c +66 -66
  133. data/vendor/libgit2/src/commit.c +128 -58
  134. data/vendor/libgit2/src/commit.h +24 -1
  135. data/vendor/libgit2/src/commit_graph.c +68 -53
  136. data/vendor/libgit2/src/commit_graph.h +10 -3
  137. data/vendor/libgit2/src/commit_list.c +2 -3
  138. data/vendor/libgit2/src/common.h +10 -3
  139. data/vendor/libgit2/src/config.c +99 -77
  140. data/vendor/libgit2/src/config.h +15 -2
  141. data/vendor/libgit2/src/config_file.c +103 -91
  142. data/vendor/libgit2/src/config_mem.c +9 -9
  143. data/vendor/libgit2/src/config_parse.c +27 -23
  144. data/vendor/libgit2/src/crlf.c +24 -21
  145. data/vendor/libgit2/src/date.c +10 -17
  146. data/vendor/libgit2/src/date.h +33 -0
  147. data/vendor/libgit2/src/describe.c +27 -19
  148. data/vendor/libgit2/src/diff.c +25 -8
  149. data/vendor/libgit2/src/diff.h +2 -4
  150. data/vendor/libgit2/src/diff_driver.c +34 -36
  151. data/vendor/libgit2/src/diff_driver.h +3 -3
  152. data/vendor/libgit2/src/diff_file.c +29 -20
  153. data/vendor/libgit2/src/diff_generate.c +30 -6
  154. data/vendor/libgit2/src/diff_generate.h +5 -3
  155. data/vendor/libgit2/src/diff_print.c +102 -95
  156. data/vendor/libgit2/src/diff_stats.c +40 -29
  157. data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
  158. data/vendor/libgit2/src/diff_tform.c +9 -8
  159. data/vendor/libgit2/src/diff_xdiff.c +3 -8
  160. data/vendor/libgit2/src/email.c +54 -38
  161. data/vendor/libgit2/src/email.h +1 -1
  162. data/vendor/libgit2/src/errors.c +18 -18
  163. data/vendor/libgit2/src/features.h.in +6 -1
  164. data/vendor/libgit2/src/fetch.c +69 -24
  165. data/vendor/libgit2/src/fetch.h +1 -1
  166. data/vendor/libgit2/src/fetchhead.c +19 -19
  167. data/vendor/libgit2/src/filebuf.c +28 -28
  168. data/vendor/libgit2/src/filebuf.h +1 -1
  169. data/vendor/libgit2/src/filter.c +96 -52
  170. data/vendor/libgit2/src/filter.h +26 -5
  171. data/vendor/libgit2/src/fs_path.c +1912 -0
  172. data/vendor/libgit2/src/fs_path.h +752 -0
  173. data/vendor/libgit2/src/futils.c +91 -85
  174. data/vendor/libgit2/src/futils.h +26 -14
  175. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
  176. data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
  177. data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
  178. data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
  179. data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
  180. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
  181. data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
  182. data/vendor/libgit2/src/hash/sha1.h +3 -1
  183. data/vendor/libgit2/src/hash.c +67 -35
  184. data/vendor/libgit2/src/hash.h +12 -12
  185. data/vendor/libgit2/src/ident.c +18 -18
  186. data/vendor/libgit2/src/ignore.c +35 -34
  187. data/vendor/libgit2/src/ignore.h +2 -2
  188. data/vendor/libgit2/src/index.c +79 -80
  189. data/vendor/libgit2/src/index.h +6 -3
  190. data/vendor/libgit2/src/indexer.c +75 -57
  191. data/vendor/libgit2/src/iterator.c +64 -56
  192. data/vendor/libgit2/src/iterator.h +5 -5
  193. data/vendor/libgit2/src/khash.h +1 -1
  194. data/vendor/libgit2/src/libgit2.c +22 -19
  195. data/vendor/libgit2/src/mailmap.c +38 -36
  196. data/vendor/libgit2/src/merge.c +27 -27
  197. data/vendor/libgit2/src/merge.h +1 -14
  198. data/vendor/libgit2/src/merge_driver.c +2 -2
  199. data/vendor/libgit2/src/merge_file.c +13 -3
  200. data/vendor/libgit2/src/message.c +21 -10
  201. data/vendor/libgit2/src/midx.c +83 -66
  202. data/vendor/libgit2/src/midx.h +3 -3
  203. data/vendor/libgit2/src/mwindow.c +1 -1
  204. data/vendor/libgit2/src/net.c +278 -68
  205. data/vendor/libgit2/src/net.h +10 -3
  206. data/vendor/libgit2/src/netops.c +1 -1
  207. data/vendor/libgit2/src/netops.h +1 -1
  208. data/vendor/libgit2/src/notes.c +20 -29
  209. data/vendor/libgit2/src/object.c +49 -9
  210. data/vendor/libgit2/src/object.h +1 -1
  211. data/vendor/libgit2/src/odb.c +35 -32
  212. data/vendor/libgit2/src/odb.h +1 -1
  213. data/vendor/libgit2/src/odb_loose.c +68 -68
  214. data/vendor/libgit2/src/odb_mempack.c +18 -5
  215. data/vendor/libgit2/src/odb_pack.c +43 -43
  216. data/vendor/libgit2/src/oid.c +11 -4
  217. data/vendor/libgit2/src/oid.h +15 -0
  218. data/vendor/libgit2/src/pack-objects.c +41 -26
  219. data/vendor/libgit2/src/pack-objects.h +11 -6
  220. data/vendor/libgit2/src/pack.c +10 -10
  221. data/vendor/libgit2/src/patch.c +3 -3
  222. data/vendor/libgit2/src/patch.h +1 -0
  223. data/vendor/libgit2/src/patch_generate.c +27 -11
  224. data/vendor/libgit2/src/patch_generate.h +5 -5
  225. data/vendor/libgit2/src/patch_parse.c +24 -24
  226. data/vendor/libgit2/src/path.c +76 -1951
  227. data/vendor/libgit2/src/path.h +34 -741
  228. data/vendor/libgit2/src/pathspec.c +6 -6
  229. data/vendor/libgit2/src/pathspec.h +2 -2
  230. data/vendor/libgit2/src/posix.c +3 -3
  231. data/vendor/libgit2/src/posix.h +1 -0
  232. data/vendor/libgit2/src/pqueue.h +1 -1
  233. data/vendor/libgit2/src/proxy.c +4 -1
  234. data/vendor/libgit2/src/proxy.h +1 -1
  235. data/vendor/libgit2/src/push.c +30 -35
  236. data/vendor/libgit2/src/push.h +4 -16
  237. data/vendor/libgit2/src/rand.c +226 -0
  238. data/vendor/libgit2/src/rand.h +37 -0
  239. data/vendor/libgit2/src/reader.c +8 -8
  240. data/vendor/libgit2/src/reader.h +2 -2
  241. data/vendor/libgit2/src/rebase.c +89 -88
  242. data/vendor/libgit2/src/refdb_fs.c +447 -173
  243. data/vendor/libgit2/src/refs.c +32 -32
  244. data/vendor/libgit2/src/refs.h +2 -2
  245. data/vendor/libgit2/src/refspec.c +32 -37
  246. data/vendor/libgit2/src/refspec.h +5 -2
  247. data/vendor/libgit2/src/regexp.c +1 -1
  248. data/vendor/libgit2/src/remote.c +713 -419
  249. data/vendor/libgit2/src/remote.h +15 -10
  250. data/vendor/libgit2/src/repository.c +350 -467
  251. data/vendor/libgit2/src/repository.h +11 -10
  252. data/vendor/libgit2/src/reset.c +8 -5
  253. data/vendor/libgit2/src/revert.c +10 -10
  254. data/vendor/libgit2/src/revparse.c +48 -35
  255. data/vendor/libgit2/src/revwalk.c +7 -7
  256. data/vendor/libgit2/src/signature.c +12 -6
  257. data/vendor/libgit2/src/signature.h +1 -1
  258. data/vendor/libgit2/src/sortedcache.c +1 -1
  259. data/vendor/libgit2/src/sortedcache.h +1 -1
  260. data/vendor/libgit2/src/stash.c +36 -37
  261. data/vendor/libgit2/src/status.c +4 -1
  262. data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
  263. data/vendor/libgit2/src/str.h +357 -0
  264. data/vendor/libgit2/src/streams/mbedtls.c +8 -6
  265. data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
  266. data/vendor/libgit2/src/submodule.c +171 -159
  267. data/vendor/libgit2/src/submodule.h +1 -1
  268. data/vendor/libgit2/src/sysdir.c +68 -52
  269. data/vendor/libgit2/src/sysdir.h +15 -10
  270. data/vendor/libgit2/src/tag.c +29 -27
  271. data/vendor/libgit2/src/thread.h +3 -3
  272. data/vendor/libgit2/src/threadstate.c +3 -3
  273. data/vendor/libgit2/src/threadstate.h +1 -1
  274. data/vendor/libgit2/src/trace.c +1 -14
  275. data/vendor/libgit2/src/trace.h +5 -22
  276. data/vendor/libgit2/src/trailer.c +1 -1
  277. data/vendor/libgit2/src/transaction.c +1 -1
  278. data/vendor/libgit2/src/transport.c +10 -10
  279. data/vendor/libgit2/src/transports/auth.c +7 -9
  280. data/vendor/libgit2/src/transports/auth.h +2 -3
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
  283. data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
  284. data/vendor/libgit2/src/transports/git.c +9 -11
  285. data/vendor/libgit2/src/transports/http.c +37 -17
  286. data/vendor/libgit2/src/transports/http.h +2 -3
  287. data/vendor/libgit2/src/transports/httpclient.c +65 -65
  288. data/vendor/libgit2/src/transports/local.c +124 -116
  289. data/vendor/libgit2/src/transports/smart.c +51 -139
  290. data/vendor/libgit2/src/transports/smart.h +25 -31
  291. data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
  292. data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
  293. data/vendor/libgit2/src/transports/ssh.c +47 -112
  294. data/vendor/libgit2/src/transports/winhttp.c +50 -56
  295. data/vendor/libgit2/src/tree-cache.c +5 -5
  296. data/vendor/libgit2/src/tree-cache.h +2 -2
  297. data/vendor/libgit2/src/tree.c +59 -48
  298. data/vendor/libgit2/src/tree.h +1 -1
  299. data/vendor/libgit2/src/unix/map.c +0 -2
  300. data/vendor/libgit2/src/unix/posix.h +1 -4
  301. data/vendor/libgit2/src/unix/realpath.c +0 -2
  302. data/vendor/libgit2/src/util.c +14 -14
  303. data/vendor/libgit2/src/util.h +2 -28
  304. data/vendor/libgit2/src/vector.h +1 -1
  305. data/vendor/libgit2/src/win32/findfile.c +172 -116
  306. data/vendor/libgit2/src/win32/findfile.h +7 -4
  307. data/vendor/libgit2/src/win32/path_w32.c +140 -9
  308. data/vendor/libgit2/src/win32/path_w32.h +2 -0
  309. data/vendor/libgit2/src/win32/posix.h +0 -1
  310. data/vendor/libgit2/src/win32/posix_w32.c +11 -27
  311. data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
  312. data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
  313. data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
  314. data/vendor/libgit2/src/worktree.c +116 -94
  315. data/vendor/libgit2/src/worktree.h +1 -1
  316. data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
  317. data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
  318. data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
  319. data/vendor/libgit2/src/xdiff/xemit.c +23 -7
  320. data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
  321. data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
  322. data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
  323. data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
  324. data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
  325. data/vendor/libgit2/src/xdiff/xutils.c +18 -7
  326. data/vendor/libgit2/src/zstream.c +5 -5
  327. data/vendor/libgit2/src/zstream.h +4 -4
  328. metadata +25 -10
  329. data/vendor/libgit2/src/buffer.h +0 -374
@@ -11,6 +11,7 @@
11
11
  #include "git2/refs.h"
12
12
  #include "git2/revwalk.h"
13
13
  #include "git2/transport.h"
14
+ #include "git2/sys/remote.h"
14
15
 
15
16
  #include "remote.h"
16
17
  #include "refspec.h"
@@ -19,7 +20,7 @@
19
20
  #include "repository.h"
20
21
  #include "refs.h"
21
22
 
22
- static int maybe_want(git_remote *remote, git_remote_head *head, git_odb *odb, git_refspec *tagspec, git_remote_autotag_option_t tagopt)
23
+ static int maybe_want(git_remote *remote, git_remote_head *head, git_refspec *tagspec, git_remote_autotag_option_t tagopt)
23
24
  {
24
25
  int match = 0, valid;
25
26
 
@@ -44,23 +45,57 @@ static int maybe_want(git_remote *remote, git_remote_head *head, git_odb *odb, g
44
45
  if (!match)
45
46
  return 0;
46
47
 
47
- /* If we have the object, mark it so we don't ask for it */
48
- if (git_odb_exists(odb, &head->oid)) {
49
- head->local = 1;
48
+ return git_vector_insert(&remote->refs, head);
49
+ }
50
+
51
+ static int mark_local(git_remote *remote)
52
+ {
53
+ git_remote_head *head;
54
+ git_odb *odb;
55
+ size_t i;
56
+
57
+ if (git_repository_odb__weakptr(&odb, remote->repo) < 0)
58
+ return -1;
59
+
60
+ git_vector_foreach(&remote->refs, i, head) {
61
+ /* If we have the object, mark it so we don't ask for it */
62
+ if (git_odb_exists(odb, &head->oid))
63
+ head->local = 1;
64
+ else
65
+ remote->need_pack = 1;
50
66
  }
51
- else
52
- remote->need_pack = 1;
53
67
 
54
- return git_vector_insert(&remote->refs, head);
68
+ return 0;
69
+ }
70
+
71
+ static int maybe_want_oid(git_remote *remote, git_refspec *spec)
72
+ {
73
+ git_remote_head *oid_head;
74
+
75
+ oid_head = git__calloc(1, sizeof(git_remote_head));
76
+ GIT_ERROR_CHECK_ALLOC(oid_head);
77
+
78
+ git_oid_fromstr(&oid_head->oid, spec->src);
79
+ oid_head->name = git__strdup(spec->dst);
80
+ GIT_ERROR_CHECK_ALLOC(oid_head->name);
81
+
82
+ if (git_vector_insert(&remote->local_heads, oid_head) < 0 ||
83
+ git_vector_insert(&remote->refs, oid_head) < 0)
84
+ return -1;
85
+
86
+ return 0;
55
87
  }
56
88
 
57
89
  static int filter_wants(git_remote *remote, const git_fetch_options *opts)
58
90
  {
59
91
  git_remote_head **heads;
60
- git_refspec tagspec, head;
92
+ git_refspec tagspec, head, *spec;
61
93
  int error = 0;
62
94
  git_odb *odb;
63
95
  size_t i, heads_len;
96
+ unsigned int remote_caps;
97
+ unsigned int oid_mask = GIT_REMOTE_CAPABILITY_TIP_OID |
98
+ GIT_REMOTE_CAPABILITY_REACHABLE_OID;
64
99
  git_remote_autotag_option_t tagopt = remote->download_tags;
65
100
 
66
101
  if (opts && opts->download_tags != GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED)
@@ -87,17 +122,36 @@ static int filter_wants(git_remote *remote, const git_fetch_options *opts)
87
122
  goto cleanup;
88
123
  }
89
124
 
90
- if (git_repository_odb__weakptr(&odb, remote->repo) < 0)
125
+ if ((error = git_repository_odb__weakptr(&odb, remote->repo)) < 0)
91
126
  goto cleanup;
92
127
 
93
- if (git_remote_ls((const git_remote_head ***)&heads, &heads_len, remote) < 0)
128
+ if ((error = git_remote_ls((const git_remote_head ***)&heads, &heads_len, remote)) < 0 ||
129
+ (error = git_remote_capabilities(&remote_caps, remote)) < 0)
94
130
  goto cleanup;
95
131
 
132
+ /* Handle remote heads */
96
133
  for (i = 0; i < heads_len; i++) {
97
- if ((error = maybe_want(remote, heads[i], odb, &tagspec, tagopt)) < 0)
98
- break;
134
+ if ((error = maybe_want(remote, heads[i], &tagspec, tagopt)) < 0)
135
+ goto cleanup;
136
+ }
137
+
138
+ /* Handle explicitly specified OID specs */
139
+ git_vector_foreach(&remote->active_refspecs, i, spec) {
140
+ if (!git_oid__is_hexstr(spec->src))
141
+ continue;
142
+
143
+ if (!(remote_caps & oid_mask)) {
144
+ git_error_set(GIT_ERROR_INVALID, "cannot fetch a specific object from the remote repository");
145
+ error = -1;
146
+ goto cleanup;
147
+ }
148
+
149
+ if ((error = maybe_want_oid(remote, spec)) < 0)
150
+ goto cleanup;
99
151
  }
100
152
 
153
+ error = mark_local(remote);
154
+
101
155
  cleanup:
102
156
  git_refspec__dispose(&tagspec);
103
157
 
@@ -115,10 +169,8 @@ int git_fetch_negotiate(git_remote *remote, const git_fetch_options *opts)
115
169
 
116
170
  remote->need_pack = 0;
117
171
 
118
- if (filter_wants(remote, opts) < 0) {
119
- git_error_set(GIT_ERROR_NET, "failed to filter the reference list for wants");
172
+ if (filter_wants(remote, opts) < 0)
120
173
  return -1;
121
- }
122
174
 
123
175
  /* Don't try to negotiate when we don't want anything */
124
176
  if (!remote->need_pack)
@@ -134,21 +186,14 @@ int git_fetch_negotiate(git_remote *remote, const git_fetch_options *opts)
134
186
  remote->refs.length);
135
187
  }
136
188
 
137
- int git_fetch_download_pack(git_remote *remote, const git_remote_callbacks *callbacks)
189
+ int git_fetch_download_pack(git_remote *remote)
138
190
  {
139
191
  git_transport *t = remote->transport;
140
- git_indexer_progress_cb progress = NULL;
141
- void *payload = NULL;
142
192
 
143
193
  if (!remote->need_pack)
144
194
  return 0;
145
195
 
146
- if (callbacks) {
147
- progress = callbacks->transfer_progress;
148
- payload = callbacks->payload;
149
- }
150
-
151
- return t->download_pack(t, remote->repo, &remote->stats, progress, payload);
196
+ return t->download_pack(t, remote->repo, &remote->stats);
152
197
  }
153
198
 
154
199
  int git_fetch_options_init(git_fetch_options *opts, unsigned int version)
@@ -15,7 +15,7 @@
15
15
 
16
16
  int git_fetch_negotiate(git_remote *remote, const git_fetch_options *opts);
17
17
 
18
- int git_fetch_download_pack(git_remote *remote, const git_remote_callbacks *callbacks);
18
+ int git_fetch_download_pack(git_remote *remote);
19
19
 
20
20
  int git_fetch_setup_walk(git_revwalk **out, git_repository *repo);
21
21
 
@@ -10,7 +10,7 @@
10
10
  #include "git2/types.h"
11
11
  #include "git2/oid.h"
12
12
 
13
- #include "buffer.h"
13
+ #include "str.h"
14
14
  #include "futils.h"
15
15
  #include "filebuf.h"
16
16
  #include "refs.h"
@@ -44,7 +44,7 @@ static char *sanitized_remote_url(const char *remote_url)
44
44
  int error;
45
45
 
46
46
  if (git_net_url_parse(&url, remote_url) == 0) {
47
- git_buf buf = GIT_BUF_INIT;
47
+ git_str buf = GIT_STR_INIT;
48
48
 
49
49
  git__free(url.username);
50
50
  git__free(url.password);
@@ -53,7 +53,7 @@ static char *sanitized_remote_url(const char *remote_url)
53
53
  if ((error = git_net_url_fmt(&buf, &url)) < 0)
54
54
  goto fallback;
55
55
 
56
- sanitized = git_buf_detach(&buf);
56
+ sanitized = git_str_detach(&buf);
57
57
  }
58
58
 
59
59
  fallback:
@@ -143,22 +143,22 @@ static int fetchhead_ref_write(
143
143
  int git_fetchhead_write(git_repository *repo, git_vector *fetchhead_refs)
144
144
  {
145
145
  git_filebuf file = GIT_FILEBUF_INIT;
146
- git_buf path = GIT_BUF_INIT;
146
+ git_str path = GIT_STR_INIT;
147
147
  unsigned int i;
148
148
  git_fetchhead_ref *fetchhead_ref;
149
149
 
150
150
  GIT_ASSERT_ARG(repo);
151
151
  GIT_ASSERT_ARG(fetchhead_refs);
152
152
 
153
- if (git_buf_joinpath(&path, repo->gitdir, GIT_FETCH_HEAD_FILE) < 0)
153
+ if (git_str_joinpath(&path, repo->gitdir, GIT_FETCH_HEAD_FILE) < 0)
154
154
  return -1;
155
155
 
156
156
  if (git_filebuf_open(&file, path.ptr, GIT_FILEBUF_APPEND, GIT_REFS_FILE_MODE) < 0) {
157
- git_buf_dispose(&path);
157
+ git_str_dispose(&path);
158
158
  return -1;
159
159
  }
160
160
 
161
- git_buf_dispose(&path);
161
+ git_str_dispose(&path);
162
162
 
163
163
  git_vector_sort(fetchhead_refs);
164
164
 
@@ -171,7 +171,7 @@ int git_fetchhead_write(git_repository *repo, git_vector *fetchhead_refs)
171
171
  static int fetchhead_ref_parse(
172
172
  git_oid *oid,
173
173
  unsigned int *is_merge,
174
- git_buf *ref_name,
174
+ git_str *ref_name,
175
175
  const char **remote_url,
176
176
  char *line,
177
177
  size_t line_num)
@@ -259,12 +259,12 @@ static int fetchhead_ref_parse(
259
259
  *remote_url = desc;
260
260
  }
261
261
 
262
- git_buf_clear(ref_name);
262
+ git_str_clear(ref_name);
263
263
 
264
264
  if (type)
265
- git_buf_join(ref_name, '/', type, name);
265
+ git_str_join(ref_name, '/', type, name);
266
266
  else if(name)
267
- git_buf_puts(ref_name, name);
267
+ git_str_puts(ref_name, name);
268
268
 
269
269
  return error;
270
270
  }
@@ -273,7 +273,7 @@ int git_repository_fetchhead_foreach(git_repository *repo,
273
273
  git_repository_fetchhead_foreach_cb cb,
274
274
  void *payload)
275
275
  {
276
- git_buf path = GIT_BUF_INIT, file = GIT_BUF_INIT, name = GIT_BUF_INIT;
276
+ git_str path = GIT_STR_INIT, file = GIT_STR_INIT, name = GIT_STR_INIT;
277
277
  const char *ref_name;
278
278
  git_oid oid;
279
279
  const char *remote_url;
@@ -285,10 +285,10 @@ int git_repository_fetchhead_foreach(git_repository *repo,
285
285
  GIT_ASSERT_ARG(repo);
286
286
  GIT_ASSERT_ARG(cb);
287
287
 
288
- if (git_buf_joinpath(&path, repo->gitdir, GIT_FETCH_HEAD_FILE) < 0)
288
+ if (git_str_joinpath(&path, repo->gitdir, GIT_FETCH_HEAD_FILE) < 0)
289
289
  return -1;
290
290
 
291
- if ((error = git_futils_readbuffer(&file, git_buf_cstr(&path))) < 0)
291
+ if ((error = git_futils_readbuffer(&file, git_str_cstr(&path))) < 0)
292
292
  goto done;
293
293
 
294
294
  buffer = file.ptr;
@@ -300,8 +300,8 @@ int git_repository_fetchhead_foreach(git_repository *repo,
300
300
  &oid, &is_merge, &name, &remote_url, line, line_num)) < 0)
301
301
  goto done;
302
302
 
303
- if (git_buf_len(&name) > 0)
304
- ref_name = git_buf_cstr(&name);
303
+ if (git_str_len(&name) > 0)
304
+ ref_name = git_str_cstr(&name);
305
305
  else
306
306
  ref_name = NULL;
307
307
 
@@ -319,9 +319,9 @@ int git_repository_fetchhead_foreach(git_repository *repo,
319
319
  }
320
320
 
321
321
  done:
322
- git_buf_dispose(&file);
323
- git_buf_dispose(&path);
324
- git_buf_dispose(&name);
322
+ git_str_dispose(&file);
323
+ git_str_dispose(&path);
324
+ git_str_dispose(&name);
325
325
 
326
326
  return error;
327
327
  }
@@ -43,7 +43,7 @@ static int verify_last_error(git_filebuf *file)
43
43
 
44
44
  static int lock_file(git_filebuf *file, int flags, mode_t mode)
45
45
  {
46
- if (git_path_exists(file->path_lock) == true) {
46
+ if (git_fs_path_exists(file->path_lock) == true) {
47
47
  git_error_clear(); /* actual OS error code just confuses */
48
48
  git_error_set(GIT_ERROR_OS,
49
49
  "failed to lock file '%s' for writing", file->path_lock);
@@ -63,7 +63,7 @@ static int lock_file(git_filebuf *file, int flags, mode_t mode)
63
63
 
64
64
  file->fd_is_open = true;
65
65
 
66
- if ((flags & GIT_FILEBUF_APPEND) && git_path_exists(file->path_original) == true) {
66
+ if ((flags & GIT_FILEBUF_APPEND) && git_fs_path_exists(file->path_original) == true) {
67
67
  git_file source;
68
68
  char buffer[FILEIO_BUFSIZE];
69
69
  ssize_t read_bytes;
@@ -103,7 +103,7 @@ void git_filebuf_cleanup(git_filebuf *file)
103
103
  if (file->fd_is_open && file->fd >= 0)
104
104
  p_close(file->fd);
105
105
 
106
- if (file->created_lock && !file->did_rename && file->path_lock && git_path_exists(file->path_lock))
106
+ if (file->created_lock && !file->did_rename && file->path_lock && git_fs_path_exists(file->path_lock))
107
107
  p_unlink(file->path_lock);
108
108
 
109
109
  if (file->compute_digest) {
@@ -195,21 +195,21 @@ static int write_deflate(git_filebuf *file, void *source, size_t len)
195
195
 
196
196
  #define MAX_SYMLINK_DEPTH 5
197
197
 
198
- static int resolve_symlink(git_buf *out, const char *path)
198
+ static int resolve_symlink(git_str *out, const char *path)
199
199
  {
200
200
  int i, error, root;
201
201
  ssize_t ret;
202
202
  struct stat st;
203
- git_buf curpath = GIT_BUF_INIT, target = GIT_BUF_INIT;
203
+ git_str curpath = GIT_STR_INIT, target = GIT_STR_INIT;
204
204
 
205
- if ((error = git_buf_grow(&target, GIT_PATH_MAX + 1)) < 0 ||
206
- (error = git_buf_puts(&curpath, path)) < 0)
205
+ if ((error = git_str_grow(&target, GIT_PATH_MAX + 1)) < 0 ||
206
+ (error = git_str_puts(&curpath, path)) < 0)
207
207
  return error;
208
208
 
209
209
  for (i = 0; i < MAX_SYMLINK_DEPTH; i++) {
210
210
  error = p_lstat(curpath.ptr, &st);
211
211
  if (error < 0 && errno == ENOENT) {
212
- error = git_buf_puts(out, curpath.ptr);
212
+ error = git_str_puts(out, curpath.ptr);
213
213
  goto cleanup;
214
214
  }
215
215
 
@@ -220,7 +220,7 @@ static int resolve_symlink(git_buf *out, const char *path)
220
220
  }
221
221
 
222
222
  if (!S_ISLNK(st.st_mode)) {
223
- error = git_buf_puts(out, curpath.ptr);
223
+ error = git_str_puts(out, curpath.ptr);
224
224
  goto cleanup;
225
225
  }
226
226
 
@@ -241,20 +241,20 @@ static int resolve_symlink(git_buf *out, const char *path)
241
241
  target.ptr[ret] = '\0';
242
242
  target.size = ret;
243
243
 
244
- root = git_path_root(target.ptr);
244
+ root = git_fs_path_root(target.ptr);
245
245
  if (root >= 0) {
246
- if ((error = git_buf_sets(&curpath, target.ptr)) < 0)
246
+ if ((error = git_str_sets(&curpath, target.ptr)) < 0)
247
247
  goto cleanup;
248
248
  } else {
249
- git_buf dir = GIT_BUF_INIT;
249
+ git_str dir = GIT_STR_INIT;
250
250
 
251
- if ((error = git_path_dirname_r(&dir, curpath.ptr)) < 0)
251
+ if ((error = git_fs_path_dirname_r(&dir, curpath.ptr)) < 0)
252
252
  goto cleanup;
253
253
 
254
- git_buf_swap(&curpath, &dir);
255
- git_buf_dispose(&dir);
254
+ git_str_swap(&curpath, &dir);
255
+ git_str_dispose(&dir);
256
256
 
257
- if ((error = git_path_apply_relative(&curpath, target.ptr)) < 0)
257
+ if ((error = git_fs_path_apply_relative(&curpath, target.ptr)) < 0)
258
258
  goto cleanup;
259
259
  }
260
260
  }
@@ -263,8 +263,8 @@ static int resolve_symlink(git_buf *out, const char *path)
263
263
  error = -1;
264
264
 
265
265
  cleanup:
266
- git_buf_dispose(&curpath);
267
- git_buf_dispose(&target);
266
+ git_str_dispose(&curpath);
267
+ git_str_dispose(&target);
268
268
  return error;
269
269
  }
270
270
 
@@ -305,7 +305,7 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
305
305
  if (flags & GIT_FILEBUF_HASH_CONTENTS) {
306
306
  file->compute_digest = 1;
307
307
 
308
- if (git_hash_ctx_init(&file->digest) < 0)
308
+ if (git_hash_ctx_init(&file->digest, GIT_HASH_ALGORITHM_SHA1) < 0)
309
309
  goto cleanup;
310
310
  }
311
311
 
@@ -332,13 +332,13 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
332
332
 
333
333
  /* If we are writing to a temp file */
334
334
  if (flags & GIT_FILEBUF_TEMPORARY) {
335
- git_buf tmp_path = GIT_BUF_INIT;
335
+ git_str tmp_path = GIT_STR_INIT;
336
336
 
337
337
  /* Open the file as temporary for locking */
338
338
  file->fd = git_futils_mktmp(&tmp_path, path, mode);
339
339
 
340
340
  if (file->fd < 0) {
341
- git_buf_dispose(&tmp_path);
341
+ git_str_dispose(&tmp_path);
342
342
  goto cleanup;
343
343
  }
344
344
  file->fd_is_open = true;
@@ -346,17 +346,17 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
346
346
 
347
347
  /* No original path */
348
348
  file->path_original = NULL;
349
- file->path_lock = git_buf_detach(&tmp_path);
349
+ file->path_lock = git_str_detach(&tmp_path);
350
350
  GIT_ERROR_CHECK_ALLOC(file->path_lock);
351
351
  } else {
352
- git_buf resolved_path = GIT_BUF_INIT;
352
+ git_str resolved_path = GIT_STR_INIT;
353
353
 
354
354
  if ((error = resolve_symlink(&resolved_path, path)) < 0)
355
355
  goto cleanup;
356
356
 
357
357
  /* Save the original path of the file */
358
358
  path_len = resolved_path.size;
359
- file->path_original = git_buf_detach(&resolved_path);
359
+ file->path_original = git_str_detach(&resolved_path);
360
360
 
361
361
  /* create the locking path by appending ".lock" to the original */
362
362
  GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, path_len, GIT_FILELOCK_EXTLENGTH);
@@ -366,7 +366,7 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
366
366
  memcpy(file->path_lock, file->path_original, path_len);
367
367
  memcpy(file->path_lock + path_len, GIT_FILELOCK_EXTENSION, GIT_FILELOCK_EXTLENGTH);
368
368
 
369
- if (git_path_isdir(file->path_original)) {
369
+ if (git_fs_path_isdir(file->path_original)) {
370
370
  git_error_set(GIT_ERROR_FILESYSTEM, "path '%s' is a directory", file->path_original);
371
371
  error = GIT_EDIRECTORY;
372
372
  goto cleanup;
@@ -386,9 +386,9 @@ cleanup:
386
386
  return error;
387
387
  }
388
388
 
389
- int git_filebuf_hash(git_oid *oid, git_filebuf *file)
389
+ int git_filebuf_hash(unsigned char *out, git_filebuf *file)
390
390
  {
391
- GIT_ASSERT_ARG(oid);
391
+ GIT_ASSERT_ARG(out);
392
392
  GIT_ASSERT_ARG(file);
393
393
  GIT_ASSERT_ARG(file->compute_digest);
394
394
 
@@ -397,7 +397,7 @@ int git_filebuf_hash(git_oid *oid, git_filebuf *file)
397
397
  if (verify_last_error(file) < 0)
398
398
  return -1;
399
399
 
400
- git_hash_final(oid, &file->digest);
400
+ git_hash_final(out, &file->digest);
401
401
  git_hash_ctx_cleanup(&file->digest);
402
402
  file->compute_digest = 0;
403
403
 
@@ -87,7 +87,7 @@ int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mo
87
87
  int git_filebuf_commit(git_filebuf *lock);
88
88
  int git_filebuf_commit_at(git_filebuf *lock, const char *path);
89
89
  void git_filebuf_cleanup(git_filebuf *lock);
90
- int git_filebuf_hash(git_oid *oid, git_filebuf *file);
90
+ int git_filebuf_hash(unsigned char *out, git_filebuf *file);
91
91
  int git_filebuf_flush(git_filebuf *file);
92
92
  int git_filebuf_stats(time_t *mtime, size_t *size, git_filebuf *file);
93
93