rugged 0.27.7 → 0.27.10

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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -8,10 +8,10 @@
8
8
  #define INCLUDE_integer_h__
9
9
 
10
10
  /** @return true if p fits into the range of a size_t */
11
- GIT_INLINE(int) git__is_sizet(git_off_t p)
11
+ GIT_INLINE(int) git__is_sizet(int64_t p)
12
12
  {
13
13
  size_t r = (size_t)p;
14
- return p == (git_off_t)r;
14
+ return p == (int64_t)r;
15
15
  }
16
16
 
17
17
  /** @return true if p fits into the range of an ssize_t */
@@ -21,6 +21,13 @@ GIT_INLINE(int) git__is_ssizet(size_t p)
21
21
  return p == (size_t)r;
22
22
  }
23
23
 
24
+ /** @return true if p fits into the range of a uint16_t */
25
+ GIT_INLINE(int) git__is_uint16(size_t p)
26
+ {
27
+ uint16_t r = (uint16_t)p;
28
+ return p == (size_t)r;
29
+ }
30
+
24
31
  /** @return true if p fits into the range of a uint32_t */
25
32
  GIT_INLINE(int) git__is_uint32(size_t p)
26
33
  {
@@ -29,10 +36,10 @@ GIT_INLINE(int) git__is_uint32(size_t p)
29
36
  }
30
37
 
31
38
  /** @return true if p fits into the range of an unsigned long */
32
- GIT_INLINE(int) git__is_ulong(git_off_t p)
39
+ GIT_INLINE(int) git__is_ulong(int64_t p)
33
40
  {
34
41
  unsigned long r = (unsigned long)p;
35
- return p == (git_off_t)r;
42
+ return p == (int64_t)r;
36
43
  }
37
44
 
38
45
  /** @return true if p fits into the range of an int */
@@ -42,34 +49,54 @@ GIT_INLINE(int) git__is_int(long long p)
42
49
  return p == (long long)r;
43
50
  }
44
51
 
45
- /**
46
- * Sets `one + two` into `out`, unless the arithmetic would overflow.
47
- * @return true if the result fits in a `uint64_t`, false on overflow.
48
- */
49
- GIT_INLINE(bool) git__add_uint64_overflow(uint64_t *out, uint64_t one, uint64_t two)
50
- {
51
- if (UINT64_MAX - one < two)
52
- return true;
53
- *out = one + two;
54
- return false;
55
- }
56
-
57
52
  /* Use clang/gcc compiler intrinsics whenever possible */
58
- #if (SIZE_MAX == ULONG_MAX) && __has_builtin(__builtin_uaddl_overflow)
59
- # define git__add_sizet_overflow(out, one, two) \
60
- __builtin_uaddl_overflow(one, two, out)
61
- # define git__multiply_sizet_overflow(out, one, two) \
62
- __builtin_umull_overflow(one, two, out)
63
- #elif (SIZE_MAX == UINT_MAX) && __has_builtin(__builtin_uadd_overflow)
53
+ #if (__has_builtin(__builtin_add_overflow) || \
54
+ (defined(__GNUC__) && (__GNUC__ >= 5)))
55
+
56
+ # if (SIZE_MAX == UINT_MAX)
57
+ # define git__add_sizet_overflow(out, one, two) \
58
+ __builtin_uadd_overflow(one, two, out)
59
+ # define git__multiply_sizet_overflow(out, one, two) \
60
+ __builtin_umul_overflow(one, two, out)
61
+ # elif (SIZE_MAX == ULONG_MAX)
62
+ # define git__add_sizet_overflow(out, one, two) \
63
+ __builtin_uaddl_overflow(one, two, out)
64
+ # define git__multiply_sizet_overflow(out, one, two) \
65
+ __builtin_umull_overflow(one, two, out)
66
+ # elif (SIZE_MAX == ULLONG_MAX)
67
+ # define git__add_sizet_overflow(out, one, two) \
68
+ __builtin_uaddll_overflow(one, two, out)
69
+ # define git__multiply_sizet_overflow(out, one, two) \
70
+ __builtin_umulll_overflow(one, two, out)
71
+ # else
72
+ # error compiler has add with overflow intrinsics but SIZE_MAX is unknown
73
+ # endif
74
+
75
+ # define git__add_int_overflow(out, one, two) \
76
+ __builtin_sadd_overflow(one, two, out)
77
+ # define git__sub_int_overflow(out, one, two) \
78
+ __builtin_ssub_overflow(one, two, out)
79
+
80
+ /* Use Microsoft's safe integer handling functions where available */
81
+ #elif defined(_MSC_VER)
82
+
83
+ # define ENABLE_INTSAFE_SIGNED_FUNCTIONS
84
+ # include <intsafe.h>
85
+
64
86
  # define git__add_sizet_overflow(out, one, two) \
65
- __builtin_uadd_overflow(one, two, out)
87
+ (SizeTAdd(one, two, out) != S_OK)
66
88
  # define git__multiply_sizet_overflow(out, one, two) \
67
- __builtin_umul_overflow(one, two, out)
89
+ (SizeTMult(one, two, out) != S_OK)
90
+ #define git__add_int_overflow(out, one, two) \
91
+ (IntAdd(one, two, out) != S_OK)
92
+ #define git__sub_int_overflow(out, one, two) \
93
+ (IntSub(one, two, out) != S_OK)
94
+
68
95
  #else
69
96
 
70
97
  /**
71
98
  * Sets `one + two` into `out`, unless the arithmetic would overflow.
72
- * @return true if the result fits in a `size_t`, false on overflow.
99
+ * @return false if the result fits in a `size_t`, true on overflow.
73
100
  */
74
101
  GIT_INLINE(bool) git__add_sizet_overflow(size_t *out, size_t one, size_t two)
75
102
  {
@@ -81,7 +108,7 @@ GIT_INLINE(bool) git__add_sizet_overflow(size_t *out, size_t one, size_t two)
81
108
 
82
109
  /**
83
110
  * Sets `one * two` into `out`, unless the arithmetic would overflow.
84
- * @return true if the result fits in a `size_t`, false on overflow.
111
+ * @return false if the result fits in a `size_t`, true on overflow.
85
112
  */
86
113
  GIT_INLINE(bool) git__multiply_sizet_overflow(size_t *out, size_t one, size_t two)
87
114
  {
@@ -91,6 +118,24 @@ GIT_INLINE(bool) git__multiply_sizet_overflow(size_t *out, size_t one, size_t tw
91
118
  return false;
92
119
  }
93
120
 
121
+ GIT_INLINE(bool) git__add_int_overflow(int *out, int one, int two)
122
+ {
123
+ if ((two > 0 && one > (INT_MAX - two)) ||
124
+ (two < 0 && one < (INT_MIN - two)))
125
+ return true;
126
+ *out = one + two;
127
+ return false;
128
+ }
129
+
130
+ GIT_INLINE(bool) git__sub_int_overflow(int *out, int one, int two)
131
+ {
132
+ if ((two > 0 && one < (INT_MIN + two)) ||
133
+ (two < 0 && one > (INT_MAX + two)))
134
+ return true;
135
+ *out = one - two;
136
+ return false;
137
+ }
138
+
94
139
  #endif
95
140
 
96
141
  #endif
@@ -46,14 +46,14 @@ static int iterator_range_init(
46
46
  {
47
47
  if (start && *start) {
48
48
  iter->start = git__strdup(start);
49
- GITERR_CHECK_ALLOC(iter->start);
49
+ GIT_ERROR_CHECK_ALLOC(iter->start);
50
50
 
51
51
  iter->start_len = strlen(iter->start);
52
52
  }
53
53
 
54
54
  if (end && *end) {
55
55
  iter->end = git__strdup(end);
56
- GITERR_CHECK_ALLOC(iter->end);
56
+ GIT_ERROR_CHECK_ALLOC(iter->end);
57
57
 
58
58
  iter->end_len = strlen(iter->end);
59
59
  }
@@ -145,8 +145,8 @@ static int iterator_init_common(
145
145
  (iter->flags & GIT_ITERATOR_PRECOMPOSE_UNICODE) == 0 &&
146
146
  (iter->flags & GIT_ITERATOR_DONT_PRECOMPOSE_UNICODE) == 0) {
147
147
 
148
- if (git_repository__cvar(&precompose, repo, GIT_CVAR_PRECOMPOSE) < 0)
149
- giterr_clear();
148
+ if (git_repository__configmap_lookup(&precompose, repo, GIT_CONFIGMAP_PRECOMPOSE) < 0)
149
+ git_error_clear();
150
150
  else if (precompose)
151
151
  iter->flags |= GIT_ITERATOR_PRECOMPOSE_UNICODE;
152
152
  }
@@ -403,7 +403,7 @@ int git_iterator_for_nothing(
403
403
  *out = NULL;
404
404
 
405
405
  iter = git__calloc(1, sizeof(empty_iterator));
406
- GITERR_CHECK_ALLOC(iter);
406
+ GIT_ERROR_CHECK_ALLOC(iter);
407
407
 
408
408
  iter->base.type = GIT_ITERATOR_TYPE_EMPTY;
409
409
  iter->base.cb = &callbacks;
@@ -478,14 +478,6 @@ GIT_INLINE(int) tree_entry_cmp(
478
478
  icase ? git__strncasecmp : git__strncmp);
479
479
  }
480
480
 
481
- GIT_INLINE(int) tree_iterator_entry_cmp(const void *ptr_a, const void *ptr_b)
482
- {
483
- const tree_iterator_entry *a = (const tree_iterator_entry *)ptr_a;
484
- const tree_iterator_entry *b = (const tree_iterator_entry *)ptr_b;
485
-
486
- return tree_entry_cmp(a->tree_entry, b->tree_entry, false);
487
- }
488
-
489
481
  GIT_INLINE(int) tree_iterator_entry_cmp_icase(
490
482
  const void *ptr_a, const void *ptr_b)
491
483
  {
@@ -549,9 +541,7 @@ static int tree_iterator_frame_init(
549
541
  int error = 0;
550
542
 
551
543
  new_frame = git_array_alloc(iter->frames);
552
- GITERR_CHECK_ALLOC(new_frame);
553
-
554
- memset(new_frame, 0, sizeof(tree_iterator_frame));
544
+ GIT_ERROR_CHECK_ALLOC(new_frame);
555
545
 
556
546
  if ((error = git_tree_dup(&dup, tree)) < 0)
557
547
  goto done;
@@ -560,19 +550,22 @@ static int tree_iterator_frame_init(
560
550
  new_frame->tree = dup;
561
551
 
562
552
  if (frame_entry &&
563
- (error = tree_iterator_compute_path(&new_frame->path, frame_entry)) < 0)
553
+ (error = tree_iterator_compute_path(&new_frame->path, frame_entry)) < 0)
564
554
  goto done;
565
555
 
566
556
  cmp = iterator__ignore_case(&iter->base) ?
567
557
  tree_iterator_entry_sort_icase : NULL;
568
558
 
569
- if ((error = git_vector_init(
570
- &new_frame->entries, dup->entries.size, cmp)) < 0)
559
+ if ((error = git_vector_init(&new_frame->entries,
560
+ dup->entries.size, cmp)) < 0)
571
561
  goto done;
572
562
 
573
563
  git_array_foreach(dup->entries, i, tree_entry) {
574
- new_entry = git_pool_malloc(&iter->entry_pool, 1);
575
- GITERR_CHECK_ALLOC(new_entry);
564
+ if ((new_entry = git_pool_malloc(&iter->entry_pool, 1)) == NULL) {
565
+ git_error_set_oom();
566
+ error = -1;
567
+ goto done;
568
+ }
576
569
 
577
570
  new_entry->tree_entry = tree_entry;
578
571
  new_entry->parent_path = new_frame->path.ptr;
@@ -626,20 +619,20 @@ GIT_INLINE(int) tree_iterator_frame_push_neighbors(
626
619
  break;
627
620
 
628
621
  path = git_array_alloc(parent_frame->similar_paths);
629
- GITERR_CHECK_ALLOC(path);
622
+ GIT_ERROR_CHECK_ALLOC(path);
630
623
 
631
624
  memset(path, 0, sizeof(git_buf));
632
625
 
633
626
  if ((error = tree_iterator_compute_path(path, entry)) < 0)
634
627
  break;
635
628
 
636
- GITERR_CHECK_ALLOC_ADD(&new_size,
629
+ GIT_ERROR_CHECK_ALLOC_ADD(&new_size,
637
630
  frame->entries.length, tree->entries.size);
638
631
  git_vector_size_hint(&frame->entries, new_size);
639
632
 
640
633
  git_array_foreach(tree->entries, i, tree_entry) {
641
634
  new_entry = git_pool_malloc(&iter->entry_pool, 1);
642
- GITERR_CHECK_ALLOC(new_entry);
635
+ GIT_ERROR_CHECK_ALLOC(new_entry);
643
636
 
644
637
  new_entry->tree_entry = tree_entry;
645
638
  new_entry->parent_path = path->ptr;
@@ -955,7 +948,7 @@ int git_iterator_for_tree(
955
948
  return git_iterator_for_nothing(out, options);
956
949
 
957
950
  iter = git__calloc(1, sizeof(tree_iterator));
958
- GITERR_CHECK_ALLOC(iter);
951
+ GIT_ERROR_CHECK_ALLOC(iter);
959
952
 
960
953
  iter->base.type = GIT_ITERATOR_TYPE_TREE;
961
954
  iter->base.cb = &callbacks;
@@ -1015,6 +1008,7 @@ typedef struct {
1015
1008
  struct stat st;
1016
1009
  size_t path_len;
1017
1010
  iterator_pathlist_search_t match;
1011
+ git_oid id;
1018
1012
  char path[GIT_FLEX_ARRAY];
1019
1013
  } filesystem_iterator_entry;
1020
1014
 
@@ -1150,7 +1144,7 @@ static void filesystem_iterator_frame_push_ignores(
1150
1144
 
1151
1145
  if (git_ignore__lookup(&new_frame->is_ignored,
1152
1146
  &iter->ignores, path, GIT_DIR_FLAG_TRUE) < 0) {
1153
- giterr_clear();
1147
+ git_error_clear();
1154
1148
  new_frame->is_ignored = GIT_IGNORE_NOTFOUND;
1155
1149
  }
1156
1150
 
@@ -1265,7 +1259,32 @@ GIT_INLINE(bool) filesystem_iterator_is_dot_git(
1265
1259
  return (len == 4 || path[len - 5] == '/');
1266
1260
  }
1267
1261
 
1268
- static filesystem_iterator_entry *filesystem_iterator_entry_init(
1262
+ static int filesystem_iterator_entry_hash(
1263
+ filesystem_iterator *iter,
1264
+ filesystem_iterator_entry *entry)
1265
+ {
1266
+ git_buf fullpath = GIT_BUF_INIT;
1267
+ int error;
1268
+
1269
+ if (S_ISDIR(entry->st.st_mode)) {
1270
+ memset(&entry->id, 0, GIT_OID_RAWSZ);
1271
+ return 0;
1272
+ }
1273
+
1274
+ if (iter->base.type == GIT_ITERATOR_TYPE_WORKDIR)
1275
+ return git_repository_hashfile(&entry->id,
1276
+ iter->base.repo, entry->path, GIT_OBJECT_BLOB, NULL);
1277
+
1278
+ if (!(error = git_buf_joinpath(&fullpath, iter->root, entry->path)))
1279
+ error = git_odb_hashfile(&entry->id, fullpath.ptr, GIT_OBJECT_BLOB);
1280
+
1281
+ git_buf_dispose(&fullpath);
1282
+ return error;
1283
+ }
1284
+
1285
+ static int filesystem_iterator_entry_init(
1286
+ filesystem_iterator_entry **out,
1287
+ filesystem_iterator *iter,
1269
1288
  filesystem_iterator_frame *frame,
1270
1289
  const char *path,
1271
1290
  size_t path_len,
@@ -1274,15 +1293,19 @@ static filesystem_iterator_entry *filesystem_iterator_entry_init(
1274
1293
  {
1275
1294
  filesystem_iterator_entry *entry;
1276
1295
  size_t entry_size;
1296
+ int error = 0;
1297
+
1298
+ *out = NULL;
1277
1299
 
1278
1300
  /* Make sure to append two bytes, one for the path's null
1279
1301
  * termination, one for a possible trailing '/' for folders.
1280
1302
  */
1281
- if (GIT_ADD_SIZET_OVERFLOW(&entry_size,
1282
- sizeof(filesystem_iterator_entry), path_len) ||
1283
- GIT_ADD_SIZET_OVERFLOW(&entry_size, entry_size, 2) ||
1284
- (entry = git_pool_malloc(&frame->entry_pool, entry_size)) == NULL)
1285
- return NULL;
1303
+ GIT_ERROR_CHECK_ALLOC_ADD(&entry_size,
1304
+ sizeof(filesystem_iterator_entry), path_len);
1305
+ GIT_ERROR_CHECK_ALLOC_ADD(&entry_size, entry_size, 2);
1306
+
1307
+ entry = git_pool_malloc(&frame->entry_pool, entry_size);
1308
+ GIT_ERROR_CHECK_ALLOC(entry);
1286
1309
 
1287
1310
  entry->path_len = path_len;
1288
1311
  entry->match = pathlist_match;
@@ -1295,7 +1318,13 @@ static filesystem_iterator_entry *filesystem_iterator_entry_init(
1295
1318
 
1296
1319
  entry->path[entry->path_len] = '\0';
1297
1320
 
1298
- return entry;
1321
+ if (iter->base.flags & GIT_ITERATOR_INCLUDE_HASH)
1322
+ error = filesystem_iterator_entry_hash(iter, entry);
1323
+
1324
+ if (!error)
1325
+ *out = entry;
1326
+
1327
+ return error;
1299
1328
  }
1300
1329
 
1301
1330
  static int filesystem_iterator_frame_push(
@@ -1312,13 +1341,13 @@ static int filesystem_iterator_frame_push(
1312
1341
  int error;
1313
1342
 
1314
1343
  if (iter->frames.size == FILESYSTEM_MAX_DEPTH) {
1315
- giterr_set(GITERR_REPOSITORY,
1344
+ git_error_set(GIT_ERROR_REPOSITORY,
1316
1345
  "directory nesting too deep (%"PRIuZ")", iter->frames.size);
1317
1346
  return -1;
1318
1347
  }
1319
1348
 
1320
1349
  new_frame = git_array_alloc(iter->frames);
1321
- GITERR_CHECK_ALLOC(new_frame);
1350
+ GIT_ERROR_CHECK_ALLOC(new_frame);
1322
1351
 
1323
1352
  memset(new_frame, 0, sizeof(filesystem_iterator_frame));
1324
1353
 
@@ -1418,9 +1447,9 @@ static int filesystem_iterator_frame_push(
1418
1447
  else if (dir_expected)
1419
1448
  continue;
1420
1449
 
1421
- entry = filesystem_iterator_entry_init(new_frame,
1422
- path, path_len, &statbuf, pathlist_match);
1423
- GITERR_CHECK_ALLOC(entry);
1450
+ if ((error = filesystem_iterator_entry_init(&entry,
1451
+ iter, new_frame, path, path_len, &statbuf, pathlist_match)) < 0)
1452
+ goto done;
1424
1453
 
1425
1454
  git_vector_insert(&new_frame->entries, entry);
1426
1455
  }
@@ -1457,10 +1486,17 @@ static void filesystem_iterator_set_current(
1457
1486
  filesystem_iterator *iter,
1458
1487
  filesystem_iterator_entry *entry)
1459
1488
  {
1460
- iter->entry.ctime.seconds = entry->st.st_ctime;
1461
- iter->entry.mtime.seconds = entry->st.st_mtime;
1489
+ /*
1490
+ * Index entries are limited to 32 bit timestamps. We can safely
1491
+ * cast this since workdir times are only used in the cache; any
1492
+ * mismatch will cause a hash recomputation which is unfortunate
1493
+ * but affects only people who set their filetimes to 2038.
1494
+ * (Same with the file size.)
1495
+ */
1496
+ iter->entry.ctime.seconds = (int32_t)entry->st.st_ctime;
1497
+ iter->entry.mtime.seconds = (int32_t)entry->st.st_mtime;
1462
1498
 
1463
- #if defined(GIT_USE_NSEC)
1499
+ #if defined(GIT_USE_NSEC)
1464
1500
  iter->entry.ctime.nanoseconds = entry->st.st_ctime_nsec;
1465
1501
  iter->entry.mtime.nanoseconds = entry->st.st_mtime_nsec;
1466
1502
  #else
@@ -1473,7 +1509,10 @@ static void filesystem_iterator_set_current(
1473
1509
  iter->entry.mode = git_futils_canonical_mode(entry->st.st_mode);
1474
1510
  iter->entry.uid = entry->st.st_uid;
1475
1511
  iter->entry.gid = entry->st.st_gid;
1476
- iter->entry.file_size = entry->st.st_size;
1512
+ iter->entry.file_size = (uint32_t)entry->st.st_size;
1513
+
1514
+ if (iter->base.flags & GIT_ITERATOR_INCLUDE_HASH)
1515
+ git_oid_cpy(&iter->entry.id, &entry->id);
1477
1516
 
1478
1517
  iter->entry.path = entry->path;
1479
1518
 
@@ -1483,7 +1522,7 @@ static void filesystem_iterator_set_current(
1483
1522
  static int filesystem_iterator_current(
1484
1523
  const git_index_entry **out, git_iterator *i)
1485
1524
  {
1486
- filesystem_iterator *iter = (filesystem_iterator *)i;
1525
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1487
1526
 
1488
1527
  if (!iterator__has_been_accessed(i))
1489
1528
  return iter->base.cb->advance(out, i);
@@ -1530,7 +1569,7 @@ done:
1530
1569
  static int filesystem_iterator_advance(
1531
1570
  const git_index_entry **out, git_iterator *i)
1532
1571
  {
1533
- filesystem_iterator *iter = (filesystem_iterator *)i;
1572
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1534
1573
  bool is_dir;
1535
1574
  int error = 0;
1536
1575
 
@@ -1589,7 +1628,7 @@ static int filesystem_iterator_advance(
1589
1628
  static int filesystem_iterator_advance_into(
1590
1629
  const git_index_entry **out, git_iterator *i)
1591
1630
  {
1592
- filesystem_iterator *iter = (filesystem_iterator *)i;
1631
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1593
1632
  filesystem_iterator_frame *frame;
1594
1633
  filesystem_iterator_entry *prev_entry;
1595
1634
  int error;
@@ -1626,7 +1665,7 @@ static int filesystem_iterator_advance_into(
1626
1665
 
1627
1666
  int git_iterator_current_workdir_path(git_buf **out, git_iterator *i)
1628
1667
  {
1629
- filesystem_iterator *iter = (filesystem_iterator *)i;
1668
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1630
1669
  const git_index_entry *entry;
1631
1670
 
1632
1671
  if (i->type != GIT_ITERATOR_TYPE_FS &&
@@ -1664,7 +1703,7 @@ static void filesystem_iterator_update_ignored(filesystem_iterator *iter)
1664
1703
 
1665
1704
  if (git_ignore__lookup(&iter->current_is_ignored,
1666
1705
  &iter->ignores, iter->entry.path, dir_flag) < 0) {
1667
- giterr_clear();
1706
+ git_error_clear();
1668
1707
  iter->current_is_ignored = GIT_IGNORE_NOTFOUND;
1669
1708
  }
1670
1709
 
@@ -1686,15 +1725,19 @@ GIT_INLINE(bool) filesystem_iterator_current_is_ignored(
1686
1725
 
1687
1726
  bool git_iterator_current_is_ignored(git_iterator *i)
1688
1727
  {
1728
+ filesystem_iterator *iter = NULL;
1729
+
1689
1730
  if (i->type != GIT_ITERATOR_TYPE_WORKDIR)
1690
1731
  return false;
1691
1732
 
1692
- return filesystem_iterator_current_is_ignored((filesystem_iterator *)i);
1733
+ iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1734
+
1735
+ return filesystem_iterator_current_is_ignored(iter);
1693
1736
  }
1694
1737
 
1695
1738
  bool git_iterator_current_tree_is_ignored(git_iterator *i)
1696
1739
  {
1697
- filesystem_iterator *iter = (filesystem_iterator *)i;
1740
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1698
1741
  filesystem_iterator_frame *frame;
1699
1742
 
1700
1743
  if (i->type != GIT_ITERATOR_TYPE_WORKDIR)
@@ -1709,7 +1752,7 @@ static int filesystem_iterator_advance_over(
1709
1752
  git_iterator_status_t *status,
1710
1753
  git_iterator *i)
1711
1754
  {
1712
- filesystem_iterator *iter = (filesystem_iterator *)i;
1755
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1713
1756
  filesystem_iterator_frame *current_frame;
1714
1757
  filesystem_iterator_entry *current_entry;
1715
1758
  const git_index_entry *entry = NULL;
@@ -1828,7 +1871,7 @@ static int filesystem_iterator_init(filesystem_iterator *iter)
1828
1871
 
1829
1872
  static int filesystem_iterator_reset(git_iterator *i)
1830
1873
  {
1831
- filesystem_iterator *iter = (filesystem_iterator *)i;
1874
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1832
1875
 
1833
1876
  filesystem_iterator_clear(iter);
1834
1877
  return filesystem_iterator_init(iter);
@@ -1836,7 +1879,7 @@ static int filesystem_iterator_reset(git_iterator *i)
1836
1879
 
1837
1880
  static void filesystem_iterator_free(git_iterator *i)
1838
1881
  {
1839
- filesystem_iterator *iter = (filesystem_iterator *)i;
1882
+ filesystem_iterator *iter = GIT_CONTAINER_OF(i, filesystem_iterator, base);
1840
1883
  git__free(iter->root);
1841
1884
  git_buf_dispose(&iter->current_path);
1842
1885
  git_tree_free(iter->tree);
@@ -1873,7 +1916,7 @@ static int iterator_for_filesystem(
1873
1916
  return git_iterator_for_nothing(out, options);
1874
1917
 
1875
1918
  iter = git__calloc(1, sizeof(filesystem_iterator));
1876
- GITERR_CHECK_ALLOC(iter);
1919
+ GIT_ERROR_CHECK_ALLOC(iter);
1877
1920
 
1878
1921
  iter->base.type = type;
1879
1922
  iter->base.cb = &callbacks;
@@ -1881,7 +1924,7 @@ static int iterator_for_filesystem(
1881
1924
  root_len = strlen(root);
1882
1925
 
1883
1926
  iter->root = git__malloc(root_len+2);
1884
- GITERR_CHECK_ALLOC(iter->root);
1927
+ GIT_ERROR_CHECK_ALLOC(iter->root);
1885
1928
 
1886
1929
  memcpy(iter->root, root, root_len);
1887
1930
 
@@ -2045,7 +2088,7 @@ static int index_iterator_skip_pseudotree(index_iterator *iter)
2045
2088
  static int index_iterator_advance(
2046
2089
  const git_index_entry **out, git_iterator *i)
2047
2090
  {
2048
- index_iterator *iter = (index_iterator *)i;
2091
+ index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
2049
2092
  const git_index_entry *entry = NULL;
2050
2093
  bool is_submodule;
2051
2094
  int error = 0;
@@ -2118,7 +2161,7 @@ static int index_iterator_advance(
2118
2161
  static int index_iterator_advance_into(
2119
2162
  const git_index_entry **out, git_iterator *i)
2120
2163
  {
2121
- index_iterator *iter = (index_iterator *)i;
2164
+ index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
2122
2165
 
2123
2166
  if (! S_ISDIR(iter->tree_entry.mode)) {
2124
2167
  if (out)
@@ -2136,7 +2179,7 @@ static int index_iterator_advance_over(
2136
2179
  git_iterator_status_t *status,
2137
2180
  git_iterator *i)
2138
2181
  {
2139
- index_iterator *iter = (index_iterator *)i;
2182
+ index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
2140
2183
  const git_index_entry *entry;
2141
2184
  int error;
2142
2185
 
@@ -2165,7 +2208,7 @@ static int index_iterator_init(index_iterator *iter)
2165
2208
 
2166
2209
  static int index_iterator_reset(git_iterator *i)
2167
2210
  {
2168
- index_iterator *iter = (index_iterator *)i;
2211
+ index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
2169
2212
 
2170
2213
  index_iterator_clear(iter);
2171
2214
  return index_iterator_init(iter);
@@ -2173,7 +2216,7 @@ static int index_iterator_reset(git_iterator *i)
2173
2216
 
2174
2217
  static void index_iterator_free(git_iterator *i)
2175
2218
  {
2176
- index_iterator *iter = (index_iterator *)i;
2219
+ index_iterator *iter = GIT_CONTAINER_OF(i, index_iterator, base);
2177
2220
 
2178
2221
  git_index_snapshot_release(&iter->entries, iter->base.index);
2179
2222
  git_buf_dispose(&iter->tree_buf);
@@ -2203,7 +2246,7 @@ int git_iterator_for_index(
2203
2246
  return git_iterator_for_nothing(out, options);
2204
2247
 
2205
2248
  iter = git__calloc(1, sizeof(index_iterator));
2206
- GITERR_CHECK_ALLOC(iter);
2249
+ GIT_ERROR_CHECK_ALLOC(iter);
2207
2250
 
2208
2251
  iter->base.type = GIT_ITERATOR_TYPE_INDEX;
2209
2252
  iter->base.cb = &callbacks;
@@ -2259,6 +2302,35 @@ void git_iterator_free(git_iterator *iter)
2259
2302
  git__free(iter);
2260
2303
  }
2261
2304
 
2305
+ int git_iterator_foreach(
2306
+ git_iterator *iterator,
2307
+ git_iterator_foreach_cb cb,
2308
+ void *data)
2309
+ {
2310
+ const git_index_entry *iterator_item;
2311
+ int error = 0;
2312
+
2313
+ if ((error = git_iterator_current(&iterator_item, iterator)) < 0)
2314
+ goto done;
2315
+
2316
+ if ((error = cb(iterator_item, data)) != 0)
2317
+ goto done;
2318
+
2319
+ while (true) {
2320
+ if ((error = git_iterator_advance(&iterator_item, iterator)) < 0)
2321
+ goto done;
2322
+
2323
+ if ((error = cb(iterator_item, data)) != 0)
2324
+ goto done;
2325
+ }
2326
+
2327
+ done:
2328
+ if (error == GIT_ITEROVER)
2329
+ error = 0;
2330
+
2331
+ return error;
2332
+ }
2333
+
2262
2334
  int git_iterator_walk(
2263
2335
  git_iterator **iterators,
2264
2336
  size_t cnt,
@@ -2274,8 +2346,8 @@ int git_iterator_walk(
2274
2346
  iterator_item = git__calloc(cnt, sizeof(git_index_entry *));
2275
2347
  cur_items = git__calloc(cnt, sizeof(git_index_entry *));
2276
2348
 
2277
- GITERR_CHECK_ALLOC(iterator_item);
2278
- GITERR_CHECK_ALLOC(cur_items);
2349
+ GIT_ERROR_CHECK_ALLOC(iterator_item);
2350
+ GIT_ERROR_CHECK_ALLOC(cur_items);
2279
2351
 
2280
2352
  /* Set up the iterators */
2281
2353
  for (i = 0; i < cnt; i++) {
@@ -41,6 +41,8 @@ typedef enum {
41
41
  GIT_ITERATOR_INCLUDE_CONFLICTS = (1u << 6),
42
42
  /** descend into symlinked directories */
43
43
  GIT_ITERATOR_DESCEND_SYMLINKS = (1u << 7),
44
+ /** hash files in workdir or filesystem iterators */
45
+ GIT_ITERATOR_INCLUDE_HASH = (1u << 8),
44
46
  } git_iterator_flag_t;
45
47
 
46
48
  typedef enum {
@@ -289,6 +291,19 @@ extern int git_iterator_current_workdir_path(
289
291
  */
290
292
  extern git_index *git_iterator_index(git_iterator *iter);
291
293
 
294
+ typedef int (*git_iterator_foreach_cb)(
295
+ const git_index_entry *entry,
296
+ void *data);
297
+
298
+ /**
299
+ * Walk the given iterator and invoke the callback for each path
300
+ * contained in the iterator.
301
+ */
302
+ extern int git_iterator_foreach(
303
+ git_iterator *iterator,
304
+ git_iterator_foreach_cb cb,
305
+ void *data);
306
+
292
307
  typedef int (*git_iterator_walk_cb)(
293
308
  const git_index_entry **entries,
294
309
  void *data);