rugged 1.0.0 → 1.2.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 (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -20,6 +20,14 @@
20
20
  #include "oidmap.h"
21
21
  #include "zstream.h"
22
22
 
23
+ /**
24
+ * Function type for callbacks from git_pack_foreach_entry_offset.
25
+ */
26
+ typedef int git_pack_foreach_entry_offset_cb(
27
+ const git_oid *id,
28
+ off64_t offset,
29
+ void *payload);
30
+
23
31
  #define GIT_PACK_FILE_MODE 0444
24
32
 
25
33
  #define PACK_SIGNATURE 0x5041434b /* "PACK" */
@@ -58,7 +66,7 @@ struct git_pack_idx_header {
58
66
 
59
67
  typedef struct git_pack_cache_entry {
60
68
  size_t last_usage; /* enough? */
61
- git_atomic refcount;
69
+ git_atomic32 refcount;
62
70
  git_rawobj raw;
63
71
  } git_pack_cache_entry;
64
72
 
@@ -85,8 +93,8 @@ typedef struct {
85
93
  struct git_pack_file {
86
94
  git_mwindow_file mwf;
87
95
  git_map index_map;
88
- git_mutex lock; /* protect updates to mwf and index_map */
89
- git_atomic refcount;
96
+ git_mutex lock; /* protect updates to index_map */
97
+ git_atomic32 refcount;
90
98
 
91
99
  uint32_t num_objects;
92
100
  uint32_t num_bad_objects;
@@ -106,6 +114,19 @@ struct git_pack_file {
106
114
  char pack_name[GIT_FLEX_ARRAY]; /* more */
107
115
  };
108
116
 
117
+ /**
118
+ * Return the position where an OID (or a prefix) would be inserted within the
119
+ * OID Lookup Table of an .idx file. This performs binary search between the lo
120
+ * and hi indices.
121
+ *
122
+ * The stride parameter is provided because .idx files version 1 store the OIDs
123
+ * interleaved with the 4-byte file offsets of the objects within the .pack
124
+ * file (stride = 24), whereas files with version 2 store them in a contiguous
125
+ * flat array (stride = 20).
126
+ */
127
+ int git_pack__lookup_sha1(const void *oid_lookup_table, size_t stride, unsigned lo,
128
+ unsigned hi, const unsigned char *oid_prefix);
129
+
109
130
  struct git_pack_entry {
110
131
  off64_t offset;
111
132
  git_oid sha1;
@@ -120,14 +141,14 @@ typedef struct git_packfile_stream {
120
141
  git_mwindow *mw;
121
142
  } git_packfile_stream;
122
143
 
123
- size_t git_packfile__object_header(unsigned char *hdr, size_t size, git_object_t type);
144
+ int git_packfile__object_header(size_t *out, unsigned char *hdr, size_t size, git_object_t type);
124
145
 
125
146
  int git_packfile__name(char **out, const char *path);
126
147
 
127
148
  int git_packfile_unpack_header(
128
149
  size_t *size_p,
129
150
  git_object_t *type_p,
130
- git_mwindow_file *mwf,
151
+ struct git_pack_file *p,
131
152
  git_mwindow **w_curs,
132
153
  off64_t *curpos);
133
154
 
@@ -143,12 +164,15 @@ int git_packfile_stream_open(git_packfile_stream *obj, struct git_pack_file *p,
143
164
  ssize_t git_packfile_stream_read(git_packfile_stream *obj, void *buffer, size_t len);
144
165
  void git_packfile_stream_dispose(git_packfile_stream *obj);
145
166
 
146
- off64_t get_delta_base(struct git_pack_file *p, git_mwindow **w_curs,
147
- off64_t *curpos, git_object_t type,
167
+ int get_delta_base(
168
+ off64_t *delta_base_out,
169
+ struct git_pack_file *p,
170
+ git_mwindow **w_curs,
171
+ off64_t *curpos,
172
+ git_object_t type,
148
173
  off64_t delta_obj_offset);
149
174
 
150
- void git_packfile_close(struct git_pack_file *p, bool unlink_packfile);
151
- void git_packfile_free(struct git_pack_file *p);
175
+ void git_packfile_free(struct git_pack_file *p, bool unlink_packfile);
152
176
  int git_packfile_alloc(struct git_pack_file **pack_out, const char *path);
153
177
 
154
178
  int git_pack_entry_find(
@@ -160,5 +184,16 @@ int git_pack_foreach_entry(
160
184
  struct git_pack_file *p,
161
185
  git_odb_foreach_cb cb,
162
186
  void *data);
187
+ /**
188
+ * Similar to git_pack_foreach_entry, but:
189
+ * - It also provides the offset of the object within the
190
+ * packfile.
191
+ * - It does not sort the objects in any order.
192
+ * - It retains the lock while invoking the callback.
193
+ */
194
+ int git_pack_foreach_entry_offset(
195
+ struct git_pack_file *p,
196
+ git_pack_foreach_entry_offset_cb cb,
197
+ void *data);
163
198
 
164
199
  #endif
@@ -65,7 +65,7 @@ size_t git_patch_size(
65
65
  {
66
66
  size_t out;
67
67
 
68
- assert(patch);
68
+ GIT_ASSERT_ARG(patch);
69
69
 
70
70
  out = patch->content_size;
71
71
 
@@ -129,13 +129,13 @@ int git_patch_line_stats(
129
129
 
130
130
  const git_diff_delta *git_patch_get_delta(const git_patch *patch)
131
131
  {
132
- assert(patch);
132
+ GIT_ASSERT_ARG_WITH_RETVAL(patch, NULL);
133
133
  return patch->delta;
134
134
  }
135
135
 
136
136
  size_t git_patch_num_hunks(const git_patch *patch)
137
137
  {
138
- assert(patch);
138
+ GIT_ASSERT_ARG(patch);
139
139
  return git_array_size(patch->hunks);
140
140
  }
141
141
 
@@ -152,7 +152,7 @@ int git_patch_get_hunk(
152
152
  size_t hunk_idx)
153
153
  {
154
154
  git_patch_hunk *hunk;
155
- assert(patch);
155
+ GIT_ASSERT_ARG(patch);
156
156
 
157
157
  hunk = git_array_get(patch->hunks, hunk_idx);
158
158
 
@@ -170,7 +170,7 @@ int git_patch_get_hunk(
170
170
  int git_patch_num_lines_in_hunk(const git_patch *patch, size_t hunk_idx)
171
171
  {
172
172
  git_patch_hunk *hunk;
173
- assert(patch);
173
+ GIT_ASSERT_ARG(patch);
174
174
 
175
175
  if (!(hunk = git_array_get(patch->hunks, hunk_idx)))
176
176
  return patch_error_outofrange("hunk");
@@ -186,7 +186,7 @@ int git_patch_get_line_in_hunk(
186
186
  git_patch_hunk *hunk;
187
187
  git_diff_line *line;
188
188
 
189
- assert(patch);
189
+ GIT_ASSERT_ARG(patch);
190
190
 
191
191
  if (!(hunk = git_array_get(patch->hunks, hunk_idx))) {
192
192
  if (out) *out = NULL;
@@ -204,9 +204,16 @@ int git_patch_get_line_in_hunk(
204
204
  return 0;
205
205
  }
206
206
 
207
+ git_repository *git_patch_owner(const git_patch *patch)
208
+ {
209
+ return patch->repo;
210
+ }
211
+
207
212
  int git_patch_from_diff(git_patch **out, git_diff *diff, size_t idx)
208
213
  {
209
- assert(out && diff && diff->patch_fn);
214
+ GIT_ASSERT_ARG(out);
215
+ GIT_ASSERT_ARG(diff);
216
+ GIT_ASSERT_ARG(diff->patch_fn);
210
217
  return diff->patch_fn(out, diff, idx);
211
218
  }
212
219
 
@@ -209,9 +209,7 @@ static int patch_generated_load(git_patch_generated *patch, git_patch_generated_
209
209
 
210
210
  if ((error = git_diff_file_content__load(
211
211
  &patch->ofile, &patch->base.diff_opts)) < 0 ||
212
- should_skip_binary(patch, patch->ofile.file))
213
- goto cleanup;
214
- if ((error = git_diff_file_content__load(
212
+ (error = git_diff_file_content__load(
215
213
  &patch->nfile, &patch->base.diff_opts)) < 0 ||
216
214
  should_skip_binary(patch, patch->nfile.file))
217
215
  goto cleanup;
@@ -563,7 +561,7 @@ static int patch_from_sources(
563
561
  patch_generated_with_delta *pd;
564
562
  git_xdiff_output xo;
565
563
 
566
- assert(out);
564
+ GIT_ASSERT_ARG(out);
567
565
  *out = NULL;
568
566
 
569
567
  if ((error = patch_generated_with_delta_alloc(
@@ -842,7 +840,7 @@ static int patch_generated_line_cb(
842
840
  GIT_UNUSED(hunk_);
843
841
 
844
842
  hunk = git_array_last(patch->base.hunks);
845
- assert(hunk); /* programmer error if no hunk is available */
843
+ GIT_ASSERT(hunk); /* programmer error if no hunk is available */
846
844
 
847
845
  line = git_array_alloc(patch->base.lines);
848
846
  GIT_ERROR_CHECK_ALLOC(line);
@@ -198,7 +198,7 @@ static int parse_header_git_index(
198
198
  return -1;
199
199
 
200
200
  if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ' ') {
201
- uint16_t mode;
201
+ uint16_t mode = 0;
202
202
 
203
203
  git_parse_advance_chars(&ctx->parse_ctx, 1);
204
204
 
@@ -407,10 +407,12 @@ static const parse_header_transition transitions[] = {
407
407
 
408
408
  { "--- " , STATE_DIFF, STATE_PATH, parse_header_git_oldpath },
409
409
  { "--- " , STATE_INDEX, STATE_PATH, parse_header_git_oldpath },
410
+ { "--- " , STATE_FILEMODE, STATE_PATH, parse_header_git_oldpath },
410
411
  { "+++ " , STATE_PATH, STATE_END, parse_header_git_newpath },
411
412
  { "GIT binary patch" , STATE_INDEX, STATE_END, NULL },
412
413
  { "Binary files " , STATE_INDEX, STATE_END, NULL },
413
414
 
415
+ { "similarity index " , STATE_END, STATE_SIMILARITY, parse_header_similarity },
414
416
  { "similarity index " , STATE_DIFF, STATE_SIMILARITY, parse_header_similarity },
415
417
  { "dissimilarity index ", STATE_DIFF, STATE_SIMILARITY, parse_header_dissimilarity },
416
418
  { "rename from " , STATE_SIMILARITY, STATE_RENAME, parse_header_renamefrom },
@@ -940,7 +942,7 @@ static int parse_patch_body(
940
942
  return parse_patch_hunks(patch, ctx);
941
943
  }
942
944
 
943
- int check_header_names(
945
+ static int check_header_names(
944
946
  const char *one,
945
947
  const char *two,
946
948
  const char *old_or_new,
@@ -1166,7 +1168,8 @@ int git_patch_parse(
1166
1168
  size_t start, used;
1167
1169
  int error = 0;
1168
1170
 
1169
- assert(out && ctx);
1171
+ GIT_ASSERT_ARG(out);
1172
+ GIT_ASSERT_ARG(ctx);
1170
1173
 
1171
1174
  *out = NULL;
1172
1175
 
@@ -274,24 +274,6 @@ size_t git_path_basename_offset(git_buf *buffer)
274
274
  return 0;
275
275
  }
276
276
 
277
- const char *git_path_topdir(const char *path)
278
- {
279
- size_t len;
280
- ssize_t i;
281
-
282
- assert(path);
283
- len = strlen(path);
284
-
285
- if (!len || path[len - 1] != '/')
286
- return NULL;
287
-
288
- for (i = (ssize_t)len - 2; i >= 0; --i)
289
- if (path[i] == '/')
290
- break;
291
-
292
- return &path[i + 1];
293
- }
294
-
295
277
  int git_path_root(const char *path)
296
278
  {
297
279
  int offset = 0, prefix_len;
@@ -322,10 +304,12 @@ int git_path_root(const char *path)
322
304
  return -1; /* Not a real error - signals that path is not rooted */
323
305
  }
324
306
 
325
- void git_path_trim_slashes(git_buf *path)
307
+ static void path_trim_slashes(git_buf *path)
326
308
  {
327
309
  int ceiling = git_path_root(path->ptr) + 1;
328
- assert(ceiling >= 0);
310
+
311
+ if (ceiling < 0)
312
+ return;
329
313
 
330
314
  while (path->size > (size_t)ceiling) {
331
315
  if (path->ptr[path->size-1] != '/')
@@ -341,7 +325,8 @@ int git_path_join_unrooted(
341
325
  {
342
326
  ssize_t root;
343
327
 
344
- assert(path && path_out);
328
+ GIT_ASSERT_ARG(path_out);
329
+ GIT_ASSERT_ARG(path);
345
330
 
346
331
  root = (ssize_t)git_path_root(path);
347
332
 
@@ -389,7 +374,8 @@ int git_path_prettify(git_buf *path_out, const char *path, const char *base)
389
374
  {
390
375
  char buf[GIT_PATH_MAX];
391
376
 
392
- assert(path && path_out);
377
+ GIT_ASSERT_ARG(path_out);
378
+ GIT_ASSERT_ARG(path);
393
379
 
394
380
  /* construct path if needed */
395
381
  if (base != NULL && git_path_root(path) < 0) {
@@ -440,7 +426,9 @@ void git_path_string_to_dir(char* path, size_t size)
440
426
  int git__percent_decode(git_buf *decoded_out, const char *input)
441
427
  {
442
428
  int len, hi, lo, i;
443
- assert(decoded_out && input);
429
+
430
+ GIT_ASSERT_ARG(decoded_out);
431
+ GIT_ASSERT_ARG(input);
444
432
 
445
433
  len = (int)strlen(input);
446
434
  git_buf_clear(decoded_out);
@@ -501,7 +489,8 @@ int git_path_fromurl(git_buf *local_path_out, const char *file_url)
501
489
  {
502
490
  int offset;
503
491
 
504
- assert(local_path_out && file_url);
492
+ GIT_ASSERT_ARG(local_path_out);
493
+ GIT_ASSERT_ARG(file_url);
505
494
 
506
495
  if ((offset = local_file_url_prefixlen(file_url)) < 0 ||
507
496
  file_url[offset] == '\0' || file_url[offset] == '/')
@@ -526,7 +515,8 @@ int git_path_walk_up(
526
515
  ssize_t stop = 0, scan;
527
516
  char oldc = '\0';
528
517
 
529
- assert(path && cb);
518
+ GIT_ASSERT_ARG(path);
519
+ GIT_ASSERT_ARG(cb);
530
520
 
531
521
  if (ceiling != NULL) {
532
522
  if (git__prefixcmp(path->ptr, ceiling) == 0)
@@ -581,7 +571,7 @@ int git_path_walk_up(
581
571
 
582
572
  bool git_path_exists(const char *path)
583
573
  {
584
- assert(path);
574
+ GIT_ASSERT_ARG_WITH_RETVAL(path, false);
585
575
  return p_access(path, F_OK) == 0;
586
576
  }
587
577
 
@@ -598,7 +588,7 @@ bool git_path_isfile(const char *path)
598
588
  {
599
589
  struct stat st;
600
590
 
601
- assert(path);
591
+ GIT_ASSERT_ARG_WITH_RETVAL(path, false);
602
592
  if (p_stat(path, &st) < 0)
603
593
  return false;
604
594
 
@@ -609,7 +599,7 @@ bool git_path_islink(const char *path)
609
599
  {
610
600
  struct stat st;
611
601
 
612
- assert(path);
602
+ GIT_ASSERT_ARG_WITH_RETVAL(path, false);
613
603
  if (p_lstat(path, &st) < 0)
614
604
  return false;
615
605
 
@@ -764,15 +754,13 @@ bool git_path_contains_file(git_buf *base, const char *file)
764
754
  return _check_dir_contents(base, file, &git_path_isfile);
765
755
  }
766
756
 
767
- int git_path_find_dir(git_buf *dir, const char *path, const char *base)
757
+ int git_path_find_dir(git_buf *dir)
768
758
  {
769
- int error = git_path_join_unrooted(dir, path, base, NULL);
759
+ int error = 0;
760
+ char buf[GIT_PATH_MAX];
770
761
 
771
- if (!error) {
772
- char buf[GIT_PATH_MAX];
773
- if (p_realpath(dir->ptr, buf) != NULL)
774
- error = git_buf_sets(dir, buf);
775
- }
762
+ if (p_realpath(dir->ptr, buf) != NULL)
763
+ error = git_buf_sets(dir, buf);
776
764
 
777
765
  /* call dirname if this is not a directory */
778
766
  if (!error) /* && git_path_isdir(dir->ptr) == false) */
@@ -1211,7 +1199,8 @@ int git_path_diriter_init(
1211
1199
  if (is_win7_or_later < 0)
1212
1200
  is_win7_or_later = git_has_win32_version(6, 1, 0);
1213
1201
 
1214
- assert(diriter && path);
1202
+ GIT_ASSERT_ARG(diriter);
1203
+ GIT_ASSERT_ARG(path);
1215
1204
 
1216
1205
  memset(diriter, 0, sizeof(git_path_diriter));
1217
1206
  diriter->handle = INVALID_HANDLE_VALUE;
@@ -1219,7 +1208,7 @@ int git_path_diriter_init(
1219
1208
  if (git_buf_puts(&diriter->path_utf8, path) < 0)
1220
1209
  return -1;
1221
1210
 
1222
- git_path_trim_slashes(&diriter->path_utf8);
1211
+ path_trim_slashes(&diriter->path_utf8);
1223
1212
 
1224
1213
  if (diriter->path_utf8.size == 0) {
1225
1214
  git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
@@ -1311,9 +1300,10 @@ int git_path_diriter_filename(
1311
1300
  size_t *out_len,
1312
1301
  git_path_diriter *diriter)
1313
1302
  {
1314
- assert(out && out_len && diriter);
1315
-
1316
- assert(diriter->path_utf8.size > diriter->parent_utf8_len);
1303
+ GIT_ASSERT_ARG(out);
1304
+ GIT_ASSERT_ARG(out_len);
1305
+ GIT_ASSERT_ARG(diriter);
1306
+ GIT_ASSERT(diriter->path_utf8.size > diriter->parent_utf8_len);
1317
1307
 
1318
1308
  *out = &diriter->path_utf8.ptr[diriter->parent_utf8_len+1];
1319
1309
  *out_len = diriter->path_utf8.size - diriter->parent_utf8_len - 1;
@@ -1325,7 +1315,9 @@ int git_path_diriter_fullpath(
1325
1315
  size_t *out_len,
1326
1316
  git_path_diriter *diriter)
1327
1317
  {
1328
- assert(out && out_len && diriter);
1318
+ GIT_ASSERT_ARG(out);
1319
+ GIT_ASSERT_ARG(out_len);
1320
+ GIT_ASSERT_ARG(diriter);
1329
1321
 
1330
1322
  *out = diriter->path_utf8.ptr;
1331
1323
  *out_len = diriter->path_utf8.size;
@@ -1334,7 +1326,8 @@ int git_path_diriter_fullpath(
1334
1326
 
1335
1327
  int git_path_diriter_stat(struct stat *out, git_path_diriter *diriter)
1336
1328
  {
1337
- assert(out && diriter);
1329
+ GIT_ASSERT_ARG(out);
1330
+ GIT_ASSERT_ARG(diriter);
1338
1331
 
1339
1332
  return git_win32__file_attribute_to_stat(out,
1340
1333
  (WIN32_FILE_ATTRIBUTE_DATA *)&diriter->current,
@@ -1361,14 +1354,15 @@ int git_path_diriter_init(
1361
1354
  const char *path,
1362
1355
  unsigned int flags)
1363
1356
  {
1364
- assert(diriter && path);
1357
+ GIT_ASSERT_ARG(diriter);
1358
+ GIT_ASSERT_ARG(path);
1365
1359
 
1366
1360
  memset(diriter, 0, sizeof(git_path_diriter));
1367
1361
 
1368
1362
  if (git_buf_puts(&diriter->path, path) < 0)
1369
1363
  return -1;
1370
1364
 
1371
- git_path_trim_slashes(&diriter->path);
1365
+ path_trim_slashes(&diriter->path);
1372
1366
 
1373
1367
  if (diriter->path.size == 0) {
1374
1368
  git_error_set(GIT_ERROR_FILESYSTEM, "could not open directory '%s'", path);
@@ -1401,7 +1395,7 @@ int git_path_diriter_next(git_path_diriter *diriter)
1401
1395
  bool skip_dot = !(diriter->flags & GIT_PATH_DIR_INCLUDE_DOT_AND_DOTDOT);
1402
1396
  int error = 0;
1403
1397
 
1404
- assert(diriter);
1398
+ GIT_ASSERT_ARG(diriter);
1405
1399
 
1406
1400
  errno = 0;
1407
1401
 
@@ -1444,9 +1438,10 @@ int git_path_diriter_filename(
1444
1438
  size_t *out_len,
1445
1439
  git_path_diriter *diriter)
1446
1440
  {
1447
- assert(out && out_len && diriter);
1448
-
1449
- assert(diriter->path.size > diriter->parent_len);
1441
+ GIT_ASSERT_ARG(out);
1442
+ GIT_ASSERT_ARG(out_len);
1443
+ GIT_ASSERT_ARG(diriter);
1444
+ GIT_ASSERT(diriter->path.size > diriter->parent_len);
1450
1445
 
1451
1446
  *out = &diriter->path.ptr[diriter->parent_len+1];
1452
1447
  *out_len = diriter->path.size - diriter->parent_len - 1;
@@ -1458,7 +1453,9 @@ int git_path_diriter_fullpath(
1458
1453
  size_t *out_len,
1459
1454
  git_path_diriter *diriter)
1460
1455
  {
1461
- assert(out && out_len && diriter);
1456
+ GIT_ASSERT_ARG(out);
1457
+ GIT_ASSERT_ARG(out_len);
1458
+ GIT_ASSERT_ARG(diriter);
1462
1459
 
1463
1460
  *out = diriter->path.ptr;
1464
1461
  *out_len = diriter->path.size;
@@ -1467,7 +1464,8 @@ int git_path_diriter_fullpath(
1467
1464
 
1468
1465
  int git_path_diriter_stat(struct stat *out, git_path_diriter *diriter)
1469
1466
  {
1470
- assert(out && diriter);
1467
+ GIT_ASSERT_ARG(out);
1468
+ GIT_ASSERT_ARG(diriter);
1471
1469
 
1472
1470
  return git_path_lstat(diriter->path.ptr, out);
1473
1471
  }
@@ -1503,7 +1501,8 @@ int git_path_dirload(
1503
1501
  char *dup;
1504
1502
  int error;
1505
1503
 
1506
- assert(contents && path);
1504
+ GIT_ASSERT_ARG(contents);
1505
+ GIT_ASSERT_ARG(path);
1507
1506
 
1508
1507
  if ((error = git_path_diriter_init(&iter, path, flags)) < 0)
1509
1508
  return error;
@@ -1512,7 +1511,7 @@ int git_path_dirload(
1512
1511
  if ((error = git_path_diriter_fullpath(&name, &name_len, &iter)) < 0)
1513
1512
  break;
1514
1513
 
1515
- assert(name_len > prefix_len);
1514
+ GIT_ASSERT(name_len > prefix_len);
1516
1515
 
1517
1516
  dup = git__strndup(name + prefix_len, name_len - prefix_len);
1518
1517
  GIT_ERROR_CHECK_ALLOC(dup);
@@ -1561,8 +1560,8 @@ GIT_INLINE(bool) verify_dospath(
1561
1560
  static int32_t next_hfs_char(const char **in, size_t *len)
1562
1561
  {
1563
1562
  while (*len) {
1564
- int32_t codepoint;
1565
- int cp_len = git__utf8_iterate((const uint8_t *)(*in), (int)(*len), &codepoint);
1563
+ uint32_t codepoint;
1564
+ int cp_len = git_utf8_iterate(&codepoint, *in, *len);
1566
1565
  if (cp_len < 0)
1567
1566
  return -1;
1568
1567
 
@@ -1594,7 +1593,7 @@ static int32_t next_hfs_char(const char **in, size_t *len)
1594
1593
  * the ASCII range, which is perfectly fine, because the
1595
1594
  * git folder name can only be composed of ascii characters
1596
1595
  */
1597
- return git__tolower(codepoint);
1596
+ return git__tolower((int)codepoint);
1598
1597
  }
1599
1598
  return 0; /* NULL byte -- end of string */
1600
1599
  }
@@ -1876,7 +1875,7 @@ GIT_INLINE(unsigned int) dotgit_flags(
1876
1875
  return flags;
1877
1876
  }
1878
1877
 
1879
- bool git_path_isvalid(
1878
+ bool git_path_validate(
1880
1879
  git_repository *repo,
1881
1880
  const char *path,
1882
1881
  uint16_t mode,
@@ -1903,6 +1902,52 @@ bool git_path_isvalid(
1903
1902
  return verify_component(repo, start, (c - start), mode, flags);
1904
1903
  }
1905
1904
 
1905
+ #ifdef GIT_WIN32
1906
+ GIT_INLINE(bool) should_validate_longpaths(git_repository *repo)
1907
+ {
1908
+ int longpaths = 0;
1909
+
1910
+ if (repo &&
1911
+ git_repository__configmap_lookup(&longpaths, repo, GIT_CONFIGMAP_LONGPATHS) < 0)
1912
+ longpaths = 0;
1913
+
1914
+ return (longpaths == 0);
1915
+ }
1916
+
1917
+ #else
1918
+
1919
+ GIT_INLINE(bool) should_validate_longpaths(git_repository *repo)
1920
+ {
1921
+ GIT_UNUSED(repo);
1922
+
1923
+ return false;
1924
+ }
1925
+ #endif
1926
+
1927
+ int git_path_validate_workdir(git_repository *repo, const char *path)
1928
+ {
1929
+ if (should_validate_longpaths(repo))
1930
+ return git_path_validate_filesystem(path, strlen(path));
1931
+
1932
+ return 0;
1933
+ }
1934
+
1935
+ int git_path_validate_workdir_with_len(
1936
+ git_repository *repo,
1937
+ const char *path,
1938
+ size_t path_len)
1939
+ {
1940
+ if (should_validate_longpaths(repo))
1941
+ return git_path_validate_filesystem(path, path_len);
1942
+
1943
+ return 0;
1944
+ }
1945
+
1946
+ int git_path_validate_workdir_buf(git_repository *repo, git_buf *path)
1947
+ {
1948
+ return git_path_validate_workdir_with_len(repo, path->ptr, path->size);
1949
+ }
1950
+
1906
1951
  int git_path_normalize_slashes(git_buf *out, const char *path)
1907
1952
  {
1908
1953
  int error;
@@ -2045,7 +2090,7 @@ int git_path_validate_system_file_ownership(const char *path)
2045
2090
  git_error_set(GIT_ERROR_INVALID, "programdata configuration file owner is not valid");
2046
2091
  ret = GIT_ERROR;
2047
2092
  }
2048
- free(info);
2093
+ git__free(info);
2049
2094
 
2050
2095
  cleanup:
2051
2096
  if (descriptor)