rugged 1.7.2 → 1.9.0

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 (361) 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 +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -13,6 +13,7 @@
13
13
  #include "odb.h"
14
14
  #include "oid.h"
15
15
  #include "oidarray.h"
16
+ #include "hashmap_oid.h"
16
17
 
17
18
  /* Option to bypass checking existence of '.keep' files */
18
19
  bool git_disable_pack_keep_file_checks = false;
@@ -41,6 +42,12 @@ static int pack_entry_find_offset(
41
42
  const git_oid *short_oid,
42
43
  size_t len);
43
44
 
45
+ #define off64_hash(key) (uint32_t)((key)>>33^(key)^(key)<<11)
46
+ #define off64_equal(a, b) ((a) == (b))
47
+
48
+ GIT_HASHMAP_FUNCTIONS(git_pack_offsetmap, GIT_HASHMAP_INLINE, off64_t, git_pack_cache_entry *, off64_hash, off64_equal);
49
+ GIT_HASHMAP_OID_FUNCTIONS(git_pack_oidmap, , struct git_pack_entry *);
50
+
44
51
  static int packfile_error(const char *message)
45
52
  {
46
53
  git_error_set(GIT_ERROR_ODB, "invalid pack file - %s", message);
@@ -75,31 +82,21 @@ static void free_cache_object(void *o)
75
82
 
76
83
  static void cache_free(git_pack_cache *cache)
77
84
  {
85
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
78
86
  git_pack_cache_entry *entry;
79
87
 
80
- if (cache->entries) {
81
- git_offmap_foreach_value(cache->entries, entry, {
82
- free_cache_object(entry);
83
- });
88
+ while (git_pack_offsetmap_iterate(&iter, NULL, &entry, &cache->entries) == 0)
89
+ free_cache_object(entry);
84
90
 
85
- git_offmap_free(cache->entries);
86
- cache->entries = NULL;
87
- }
91
+ git_pack_offsetmap_dispose(&cache->entries);
88
92
  }
89
93
 
90
94
  static int cache_init(git_pack_cache *cache)
91
95
  {
92
- if (git_offmap_new(&cache->entries) < 0)
93
- return -1;
94
-
95
96
  cache->memory_limit = GIT_PACK_CACHE_MEMORY_LIMIT;
96
97
 
97
98
  if (git_mutex_init(&cache->lock)) {
98
99
  git_error_set(GIT_ERROR_OS, "failed to initialize pack cache mutex");
99
-
100
- git__free(cache->entries);
101
- cache->entries = NULL;
102
-
103
100
  return -1;
104
101
  }
105
102
 
@@ -108,15 +105,16 @@ static int cache_init(git_pack_cache *cache)
108
105
 
109
106
  static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
110
107
  {
111
- git_pack_cache_entry *entry;
108
+ git_pack_cache_entry *entry = NULL;
112
109
 
113
110
  if (git_mutex_lock(&cache->lock) < 0)
114
111
  return NULL;
115
112
 
116
- if ((entry = git_offmap_get(cache->entries, offset)) != NULL) {
113
+ if (git_pack_offsetmap_get(&entry, &cache->entries, offset) == 0) {
117
114
  git_atomic32_inc(&entry->refcount);
118
115
  entry->last_usage = cache->use_ctr++;
119
116
  }
117
+
120
118
  git_mutex_unlock(&cache->lock);
121
119
 
122
120
  return entry;
@@ -125,16 +123,17 @@ static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
125
123
  /* Run with the cache lock held */
126
124
  static void free_lowest_entry(git_pack_cache *cache)
127
125
  {
128
- off64_t offset;
126
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
129
127
  git_pack_cache_entry *entry;
128
+ off64_t offset;
130
129
 
131
- git_offmap_foreach(cache->entries, offset, entry, {
130
+ while (git_pack_offsetmap_iterate(&iter, &offset, &entry, &cache->entries) == 0) {
132
131
  if (entry && git_atomic32_get(&entry->refcount) == 0) {
133
132
  cache->memory_used -= entry->raw.len;
134
- git_offmap_delete(cache->entries, offset);
133
+ git_pack_offsetmap_remove(&cache->entries, offset);
135
134
  free_cache_object(entry);
136
135
  }
137
- });
136
+ }
138
137
  }
139
138
 
140
139
  static int cache_add(
@@ -157,12 +156,12 @@ static int cache_add(
157
156
  return -1;
158
157
  }
159
158
  /* Add it to the cache if nobody else has */
160
- exists = git_offmap_exists(cache->entries, offset);
159
+ exists = git_pack_offsetmap_contains(&cache->entries, offset);
161
160
  if (!exists) {
162
161
  while (cache->memory_used + base->len > cache->memory_limit)
163
162
  free_lowest_entry(cache);
164
163
 
165
- git_offmap_set(cache->entries, offset, entry);
164
+ git_pack_offsetmap_put(&cache->entries, offset, entry);
166
165
  cache->memory_used += entry->raw.len;
167
166
 
168
167
  *cached_out = entry;
@@ -1009,7 +1008,7 @@ int get_delta_base(
1009
1008
  if (p->has_cache) {
1010
1009
  struct git_pack_entry *entry;
1011
1010
 
1012
- if ((entry = git_oidmap_get(p->idx_cache, &base_oid)) != NULL) {
1011
+ if (git_pack_oidmap_get(&entry, &p->idx_cache, &base_oid) == 0) {
1013
1012
  if (entry->offset == 0)
1014
1013
  return packfile_error("delta offset is zero");
1015
1014
 
@@ -1351,7 +1350,7 @@ int git_pack_foreach_entry(
1351
1350
  git_vector_insert(&oids, (void*)&current[4]);
1352
1351
  }
1353
1352
 
1354
- git_vector_free(&offsets);
1353
+ git_vector_dispose(&offsets);
1355
1354
  p->ids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
1356
1355
  }
1357
1356
 
@@ -1499,6 +1498,7 @@ static int pack_entry_find_offset(
1499
1498
  size_t len)
1500
1499
  {
1501
1500
  const uint32_t *level1_ofs;
1501
+ size_t ofs_delta = 0;
1502
1502
  const unsigned char *index;
1503
1503
  unsigned hi, lo, stride;
1504
1504
  int pos, found = 0;
@@ -1524,9 +1524,15 @@ static int pack_entry_find_offset(
1524
1524
 
1525
1525
  if (p->index_version > 1) {
1526
1526
  level1_ofs += 2;
1527
+ ofs_delta = 2;
1527
1528
  index += 8;
1528
1529
  }
1529
1530
 
1531
+ if ((size_t)short_oid->id[0] + ofs_delta >= p->index_map.len) {
1532
+ git_error_set(GIT_ERROR_INTERNAL, "internal error: p->short_oid->[0] out of bounds");
1533
+ goto cleanup;
1534
+ }
1535
+
1530
1536
  index += 4 * 256;
1531
1537
  hi = ntohl(level1_ofs[(int)short_oid->id[0]]);
1532
1538
  lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(level1_ofs[(int)short_oid->id[0] - 1]));
@@ -16,10 +16,9 @@
16
16
  #include "map.h"
17
17
  #include "mwindow.h"
18
18
  #include "odb.h"
19
- #include "offmap.h"
20
- #include "oidmap.h"
21
19
  #include "zstream.h"
22
20
  #include "oid.h"
21
+ #include "hashmap_oid.h"
23
22
 
24
23
  /**
25
24
  * Function type for callbacks from git_pack_foreach_entry_offset.
@@ -83,12 +82,23 @@ typedef git_array_t(struct pack_chain_elem) git_dependency_chain;
83
82
  #define GIT_PACK_CACHE_MEMORY_LIMIT 16 * 1024 * 1024
84
83
  #define GIT_PACK_CACHE_SIZE_LIMIT 1024 * 1024 /* don't bother caching anything over 1MB */
85
84
 
85
+ struct git_pack_entry {
86
+ off64_t offset;
87
+ git_oid id;
88
+ struct git_pack_file *p;
89
+ };
90
+
91
+ GIT_HASHMAP_STRUCT(git_pack_offsetmap, off64_t, git_pack_cache_entry *);
92
+
93
+ GIT_HASHMAP_OID_STRUCT(git_pack_oidmap, struct git_pack_entry *);
94
+ GIT_HASHMAP_OID_PROTOTYPES(git_pack_oidmap, struct git_pack_entry *);
95
+
86
96
  typedef struct {
87
97
  size_t memory_used;
88
98
  size_t memory_limit;
89
99
  size_t use_ctr;
90
100
  git_mutex lock;
91
- git_offmap *entries;
101
+ git_pack_offsetmap entries;
92
102
  } git_pack_cache;
93
103
 
94
104
  struct git_pack_file {
@@ -110,7 +120,8 @@ struct git_pack_file {
110
120
 
111
121
  int index_version;
112
122
  git_time_t mtime;
113
- git_oidmap *idx_cache;
123
+
124
+ git_pack_oidmap idx_cache;
114
125
  unsigned char **ids;
115
126
 
116
127
  git_pack_cache bases; /* delta base cache */
@@ -139,12 +150,6 @@ int git_pack__lookup_id(
139
150
  const unsigned char *id_prefix,
140
151
  const git_oid_t oid_type);
141
152
 
142
- struct git_pack_entry {
143
- off64_t offset;
144
- git_oid id;
145
- struct git_pack_file *p;
146
- };
147
-
148
153
  typedef struct git_packfile_stream {
149
154
  off64_t curpos;
150
155
  int done;
@@ -562,9 +562,9 @@ fail:
562
562
 
563
563
  static int eof_for_origin(int origin) {
564
564
  if (origin == GIT_DIFF_LINE_ADDITION)
565
- return GIT_DIFF_LINE_ADD_EOFNL;
566
- if (origin == GIT_DIFF_LINE_DELETION)
567
565
  return GIT_DIFF_LINE_DEL_EOFNL;
566
+ if (origin == GIT_DIFF_LINE_DELETION)
567
+ return GIT_DIFF_LINE_ADD_EOFNL;
568
568
  return GIT_DIFF_LINE_CONTEXT_EOFNL;
569
569
  }
570
570
 
@@ -202,7 +202,7 @@ GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *
202
202
  {
203
203
  size_t count = 0;
204
204
 
205
- while (len > 0 && tolower(*str) == tolower(*prefix)) {
205
+ while (len > 0 && git__tolower(*str) == git__tolower(*prefix)) {
206
206
  count++;
207
207
  str++;
208
208
  prefix++;
@@ -105,7 +105,7 @@ int git_pathspec__vinit(
105
105
  /* free data from the pathspec vector */
106
106
  void git_pathspec__vfree(git_vector *vspec)
107
107
  {
108
- git_vector_free_deep(vspec);
108
+ git_vector_dispose_deep(vspec);
109
109
  }
110
110
 
111
111
  struct pathspec_match_context {
@@ -56,14 +56,22 @@ int git_push_new(git_push **out, git_remote *remote, const git_push_options *opt
56
56
  }
57
57
 
58
58
  if (git_vector_init(&p->status, 0, push_status_ref_cmp) < 0) {
59
- git_vector_free(&p->specs);
59
+ git_vector_dispose(&p->specs);
60
60
  git__free(p);
61
61
  return -1;
62
62
  }
63
63
 
64
64
  if (git_vector_init(&p->updates, 0, NULL) < 0) {
65
- git_vector_free(&p->status);
66
- git_vector_free(&p->specs);
65
+ git_vector_dispose(&p->status);
66
+ git_vector_dispose(&p->specs);
67
+ git__free(p);
68
+ return -1;
69
+ }
70
+
71
+ if (git_vector_init(&p->remote_push_options, 0, git__strcmp_cb) < 0) {
72
+ git_vector_dispose(&p->status);
73
+ git_vector_dispose(&p->specs);
74
+ git_vector_dispose(&p->updates);
67
75
  git__free(p);
68
76
  return -1;
69
77
  }
@@ -213,12 +221,25 @@ int git_push_update_tips(git_push *push, const git_remote_callbacks *callbacks)
213
221
  fire_callback = 0;
214
222
  }
215
223
 
216
- if (fire_callback && callbacks && callbacks->update_tips) {
217
- error = callbacks->update_tips(git_str_cstr(&remote_ref_name),
218
- &push_spec->roid, &push_spec->loid, callbacks->payload);
224
+ if (!fire_callback || !callbacks)
225
+ continue;
219
226
 
220
- if (error < 0)
221
- goto on_error;
227
+ if (callbacks->update_refs)
228
+ error = callbacks->update_refs(
229
+ git_str_cstr(&remote_ref_name),
230
+ &push_spec->roid, &push_spec->loid,
231
+ &push_spec->refspec, callbacks->payload);
232
+ #ifndef GIT_DEPRECATE_HARD
233
+ else if (callbacks->update_tips)
234
+ error = callbacks->update_tips(
235
+ git_str_cstr(&remote_ref_name),
236
+ &push_spec->roid, &push_spec->loid,
237
+ callbacks->payload);
238
+ #endif
239
+
240
+ if (error < 0) {
241
+ git_error_set_after_callback_function(error, "git_remote_push");
242
+ goto on_error;
222
243
  }
223
244
  }
224
245
 
@@ -275,6 +296,7 @@ static int queue_objects(git_push *push)
275
296
 
276
297
  git_vector_foreach(&push->specs, i, spec) {
277
298
  git_object_t type;
299
+ git_oid id;
278
300
  size_t size;
279
301
 
280
302
  if (git_oid_is_zero(&spec->loid))
@@ -296,20 +318,20 @@ static int queue_objects(git_push *push)
296
318
  if ((error = enqueue_tag(&target, push, &spec->loid)) < 0)
297
319
  goto on_error;
298
320
 
299
- if (git_object_type(target) == GIT_OBJECT_COMMIT) {
300
- if ((error = git_revwalk_push(rw, git_object_id(target))) < 0) {
301
- git_object_free(target);
302
- goto on_error;
303
- }
304
- } else {
305
- if ((error = git_packbuilder_insert(
306
- push->pb, git_object_id(target), NULL)) < 0) {
307
- git_object_free(target);
308
- goto on_error;
309
- }
310
- }
321
+ type = git_object_type(target);
322
+ git_oid_cpy(&id, git_object_id(target));
323
+
311
324
  git_object_free(target);
312
- } else if ((error = git_revwalk_push(rw, &spec->loid)) < 0)
325
+ } else {
326
+ git_oid_cpy(&id, &spec->loid);
327
+ }
328
+
329
+ if (type == GIT_OBJECT_COMMIT)
330
+ error = git_revwalk_push(rw, &id);
331
+ else
332
+ error = git_packbuilder_insert(push->pb, &id, NULL);
333
+
334
+ if (error < 0)
313
335
  goto on_error;
314
336
 
315
337
  if (!spec->refspec.force) {
@@ -444,10 +466,21 @@ static int do_push(git_push *push)
444
466
  if ((error = calculate_work(push)) < 0)
445
467
  goto on_error;
446
468
 
447
- if (callbacks && callbacks->push_negotiation &&
448
- (error = callbacks->push_negotiation((const git_push_update **) push->updates.contents,
449
- push->updates.length, callbacks->payload)) < 0)
450
- goto on_error;
469
+ if (callbacks && callbacks->push_negotiation) {
470
+ git_error_clear();
471
+
472
+ error = callbacks->push_negotiation(
473
+ (const git_push_update **) push->updates.contents,
474
+ push->updates.length, callbacks->payload);
475
+
476
+ if (error < 0) {
477
+ git_error_set_after_callback_function(error,
478
+ "push_negotiation");
479
+ goto on_error;
480
+ }
481
+
482
+ error = 0;
483
+ }
451
484
 
452
485
  if ((error = queue_objects(push)) < 0 ||
453
486
  (error = transport->push(transport, push)) < 0)
@@ -479,12 +512,24 @@ static int filter_refs(git_remote *remote)
479
512
  int git_push_finish(git_push *push)
480
513
  {
481
514
  int error;
515
+ unsigned int remote_caps;
482
516
 
483
517
  if (!git_remote_connected(push->remote)) {
484
518
  git_error_set(GIT_ERROR_NET, "remote is disconnected");
485
519
  return -1;
486
520
  }
487
521
 
522
+ if ((error = git_remote_capabilities(&remote_caps, push->remote)) < 0) {
523
+ git_error_set(GIT_ERROR_INVALID, "remote capabilities not available");
524
+ return -1;
525
+ }
526
+
527
+ if (git_vector_length(&push->remote_push_options) > 0 &&
528
+ !(remote_caps & GIT_REMOTE_CAPABILITY_PUSH_OPTIONS)) {
529
+ git_error_set(GIT_ERROR_INVALID, "push-options not supported by remote");
530
+ return -1;
531
+ }
532
+
488
533
  if ((error = filter_refs(push->remote)) < 0 ||
489
534
  (error = do_push(push)) < 0)
490
535
  return error;
@@ -528,6 +573,7 @@ void git_push_free(git_push *push)
528
573
  push_spec *spec;
529
574
  push_status *status;
530
575
  git_push_update *update;
576
+ char *option;
531
577
  unsigned int i;
532
578
 
533
579
  if (push == NULL)
@@ -536,19 +582,24 @@ void git_push_free(git_push *push)
536
582
  git_vector_foreach(&push->specs, i, spec) {
537
583
  free_refspec(spec);
538
584
  }
539
- git_vector_free(&push->specs);
585
+ git_vector_dispose(&push->specs);
540
586
 
541
587
  git_vector_foreach(&push->status, i, status) {
542
588
  git_push_status_free(status);
543
589
  }
544
- git_vector_free(&push->status);
590
+ git_vector_dispose(&push->status);
545
591
 
546
592
  git_vector_foreach(&push->updates, i, update) {
547
593
  git__free(update->src_refname);
548
594
  git__free(update->dst_refname);
549
595
  git__free(update);
550
596
  }
551
- git_vector_free(&push->updates);
597
+ git_vector_dispose(&push->updates);
598
+
599
+ git_vector_foreach(&push->remote_push_options, i, option) {
600
+ git__free(option);
601
+ }
602
+ git_vector_dispose(&push->remote_push_options);
552
603
 
553
604
  git__free(push);
554
605
  }
@@ -34,6 +34,7 @@ struct git_push {
34
34
  git_vector specs;
35
35
  git_vector updates;
36
36
  bool report_status;
37
+ git_vector remote_push_options;
37
38
 
38
39
  /* report-status */
39
40
  bool unpack_ok;
@@ -26,7 +26,6 @@
26
26
  #include <git2/branch.h>
27
27
  #include <git2/sys/refdb_backend.h>
28
28
  #include <git2/sys/refs.h>
29
- #include <git2/sys/reflog.h>
30
29
 
31
30
  #define DEFAULT_NESTING_LEVEL 5
32
31
  #define MAX_NESTING_LEVEL 10
@@ -62,8 +61,8 @@ typedef struct refdb_fs_backend {
62
61
 
63
62
  git_oid_t oid_type;
64
63
 
65
- int fsync : 1,
66
- sorted : 1;
64
+ unsigned int fsync : 1,
65
+ sorted : 1;
67
66
  int peeling_mode;
68
67
  git_iterator_flag_t iterator_flags;
69
68
  uint32_t direach_flags;
@@ -410,7 +409,9 @@ static const char *loose_parse_symbolic(git_str *file_content)
410
409
  static bool is_per_worktree_ref(const char *ref_name)
411
410
  {
412
411
  return git__prefixcmp(ref_name, "refs/") != 0 ||
413
- git__prefixcmp(ref_name, "refs/bisect/") == 0;
412
+ git__prefixcmp(ref_name, "refs/bisect/") == 0 ||
413
+ git__prefixcmp(ref_name, "refs/worktree/") == 0 ||
414
+ git__prefixcmp(ref_name, "refs/rewritten/") == 0;
414
415
  }
415
416
 
416
417
  static int loose_lookup(
@@ -799,89 +800,155 @@ static void refdb_fs_backend__iterator_free(git_reference_iterator *_iter)
799
800
  {
800
801
  refdb_fs_iter *iter = GIT_CONTAINER_OF(_iter, refdb_fs_iter, parent);
801
802
 
802
- git_vector_free(&iter->loose);
803
+ git_vector_dispose(&iter->loose);
803
804
  git_pool_clear(&iter->pool);
804
805
  git_sortedcache_free(iter->cache);
805
806
  git__free(iter);
806
807
  }
807
808
 
808
- static int iter_load_loose_paths(
809
- refdb_fs_backend *backend,
810
- refdb_fs_iter *iter)
809
+ struct iter_load_context {
810
+ refdb_fs_backend *backend;
811
+ refdb_fs_iter *iter;
812
+
813
+ /*
814
+ * If we have a glob with a prefix (eg `refs/heads/ *`) then we can
815
+ * optimize our prefix to avoid walking refs that we know won't
816
+ * match. This is that prefix.
817
+ */
818
+ const char *ref_prefix;
819
+ size_t ref_prefix_len;
820
+
821
+ /* Temporary variables to avoid unnecessary allocations */
822
+ git_str ref_name;
823
+ git_str path;
824
+ };
825
+
826
+ static void iter_load_optimize_prefix(struct iter_load_context *ctx)
811
827
  {
812
- int error = 0;
813
- git_str path = GIT_STR_INIT;
814
- git_iterator *fsit = NULL;
815
- git_iterator_options fsit_opts = GIT_ITERATOR_OPTIONS_INIT;
816
- const git_index_entry *entry = NULL;
817
- const char *ref_prefix = GIT_REFS_DIR;
818
- size_t ref_prefix_len = strlen(ref_prefix);
828
+ const char *pos, *last_sep = NULL;
819
829
 
820
- if (!backend->commonpath) /* do nothing if no commonpath for loose refs */
821
- return 0;
830
+ if (!ctx->iter->glob)
831
+ return;
822
832
 
823
- fsit_opts.flags = backend->iterator_flags;
824
- fsit_opts.oid_type = backend->oid_type;
825
-
826
- if (iter->glob) {
827
- const char *last_sep = NULL;
828
- const char *pos;
829
- for (pos = iter->glob; *pos; ++pos) {
830
- switch (*pos) {
831
- case '?':
832
- case '*':
833
- case '[':
834
- case '\\':
835
- break;
836
- case '/':
837
- last_sep = pos;
838
- /* FALLTHROUGH */
839
- default:
840
- continue;
841
- }
833
+ for (pos = ctx->iter->glob; *pos; pos++) {
834
+ switch (*pos) {
835
+ case '?':
836
+ case '*':
837
+ case '[':
838
+ case '\\':
842
839
  break;
840
+ case '/':
841
+ last_sep = pos;
842
+ /* FALLTHROUGH */
843
+ default:
844
+ continue;
843
845
  }
844
- if (last_sep) {
845
- ref_prefix = iter->glob;
846
- ref_prefix_len = (last_sep - ref_prefix) + 1;
847
- }
846
+ break;
848
847
  }
849
848
 
850
- if ((error = git_str_puts(&path, backend->commonpath)) < 0 ||
851
- (error = git_str_put(&path, ref_prefix, ref_prefix_len)) < 0) {
852
- git_str_dispose(&path);
853
- return error;
849
+ if (last_sep) {
850
+ ctx->ref_prefix = ctx->iter->glob;
851
+ ctx->ref_prefix_len = (last_sep - ctx->ref_prefix) + 1;
854
852
  }
853
+ }
854
+
855
+ static int iter_load_paths(
856
+ struct iter_load_context *ctx,
857
+ const char *root_path,
858
+ bool worktree)
859
+ {
860
+ git_iterator *fsit = NULL;
861
+ git_iterator_options fsit_opts = GIT_ITERATOR_OPTIONS_INIT;
862
+ const git_index_entry *entry;
863
+ int error = 0;
864
+
865
+ fsit_opts.flags = ctx->backend->iterator_flags;
866
+
867
+ git_str_clear(&ctx->path);
868
+ git_str_puts(&ctx->path, root_path);
869
+ git_str_put(&ctx->path, ctx->ref_prefix, ctx->ref_prefix_len);
870
+
871
+ fsit_opts.flags = ctx->backend->iterator_flags;
872
+ fsit_opts.oid_type = ctx->backend->oid_type;
873
+
874
+ if ((error = git_iterator_for_filesystem(&fsit, ctx->path.ptr, &fsit_opts)) < 0) {
875
+ /*
876
+ * Subdirectories - either glob provided or per-worktree refs - need
877
+ * not exist.
878
+ */
879
+ if ((worktree || ctx->iter->glob) && error == GIT_ENOTFOUND)
880
+ error = 0;
855
881
 
856
- if ((error = git_iterator_for_filesystem(&fsit, path.ptr, &fsit_opts)) < 0) {
857
- git_str_dispose(&path);
858
- return (iter->glob && error == GIT_ENOTFOUND)? 0 : error;
882
+ goto done;
859
883
  }
860
884
 
861
- error = git_str_sets(&path, ref_prefix);
885
+ git_str_clear(&ctx->ref_name);
886
+ git_str_put(&ctx->ref_name, ctx->ref_prefix, ctx->ref_prefix_len);
862
887
 
863
- while (!error && !git_iterator_advance(&entry, fsit)) {
864
- const char *ref_name;
888
+ while (git_iterator_advance(&entry, fsit) == 0) {
865
889
  char *ref_dup;
866
890
 
867
- git_str_truncate(&path, ref_prefix_len);
868
- git_str_puts(&path, entry->path);
869
- ref_name = git_str_cstr(&path);
891
+ git_str_truncate(&ctx->ref_name, ctx->ref_prefix_len);
892
+ git_str_puts(&ctx->ref_name, entry->path);
870
893
 
871
- if (git__suffixcmp(ref_name, ".lock") == 0 ||
872
- (iter->glob && wildmatch(iter->glob, ref_name, 0) != 0))
894
+ if (worktree) {
895
+ if (!is_per_worktree_ref(ctx->ref_name.ptr))
896
+ continue;
897
+ } else {
898
+ if (git_repository_is_worktree(ctx->backend->repo) &&
899
+ is_per_worktree_ref(ctx->ref_name.ptr))
900
+ continue;
901
+ }
902
+
903
+ if (git__suffixcmp(ctx->ref_name.ptr, ".lock") == 0)
873
904
  continue;
874
905
 
875
- ref_dup = git_pool_strdup(&iter->pool, ref_name);
876
- if (!ref_dup)
877
- error = -1;
878
- else
879
- error = git_vector_insert(&iter->loose, ref_dup);
906
+ if (ctx->iter->glob && wildmatch(ctx->iter->glob, ctx->ref_name.ptr, 0))
907
+ continue;
908
+
909
+ ref_dup = git_pool_strdup(&ctx->iter->pool, ctx->ref_name.ptr);
910
+ GIT_ERROR_CHECK_ALLOC(ref_dup);
911
+
912
+ if ((error = git_vector_insert(&ctx->iter->loose, ref_dup)) < 0)
913
+ goto done;
880
914
  }
881
915
 
916
+ done:
882
917
  git_iterator_free(fsit);
883
- git_str_dispose(&path);
918
+ return error;
919
+ }
884
920
 
921
+ #define iter_load_context_init(b, i) { b, i, GIT_REFS_DIR, CONST_STRLEN(GIT_REFS_DIR) }
922
+ #define iter_load_context_dispose(ctx) do { \
923
+ git_str_dispose(&((ctx)->path)); \
924
+ git_str_dispose(&((ctx)->ref_name)); \
925
+ } while(0)
926
+
927
+ static int iter_load_loose_paths(
928
+ refdb_fs_backend *backend,
929
+ refdb_fs_iter *iter)
930
+ {
931
+ struct iter_load_context ctx = iter_load_context_init(backend, iter);
932
+
933
+ int error = 0;
934
+
935
+ if (!backend->commonpath)
936
+ return 0;
937
+
938
+ iter_load_optimize_prefix(&ctx);
939
+
940
+ if ((error = iter_load_paths(&ctx,
941
+ backend->commonpath, false)) < 0)
942
+ goto done;
943
+
944
+ if (git_repository_is_worktree(backend->repo)) {
945
+ if ((error = iter_load_paths(&ctx,
946
+ backend->gitpath, true)) < 0)
947
+ goto done;
948
+ }
949
+
950
+ done:
951
+ iter_load_context_dispose(&ctx);
885
952
  return error;
886
953
  }
887
954
 
@@ -13,7 +13,6 @@
13
13
  #include "refdb.h"
14
14
 
15
15
  #include "git2/sys/refdb_backend.h"
16
- #include "git2/sys/reflog.h"
17
16
 
18
17
  void git_reflog_entry__free(git_reflog_entry *entry)
19
18
  {
@@ -40,7 +39,7 @@ void git_reflog_free(git_reflog *reflog)
40
39
  git_reflog_entry__free(entry);
41
40
  }
42
41
 
43
- git_vector_free(&reflog->entries);
42
+ git_vector_dispose(&reflog->entries);
44
43
  git__free(reflog->ref_name);
45
44
  git__free(reflog);
46
45
  }