rugged 1.1.1 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (407) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +1 -1
  4. data/ext/rugged/extconf.rb +2 -2
  5. data/ext/rugged/rugged.c +7 -4
  6. data/ext/rugged/rugged_config.c +7 -2
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +17 -0
  9. data/ext/rugged/rugged_repo.c +3 -3
  10. data/lib/rugged/repository.rb +2 -2
  11. data/lib/rugged/version.rb +1 -1
  12. data/vendor/libgit2/CMakeLists.txt +103 -271
  13. data/vendor/libgit2/COPYING +149 -24
  14. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  15. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  16. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  17. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  18. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  19. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  20. data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
  21. data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
  22. data/vendor/libgit2/cmake/FindLibSSH2.cmake +13 -0
  23. data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
  24. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  25. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  26. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  27. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  30. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  31. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  32. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  33. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  34. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
  35. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -96
  36. data/vendor/libgit2/cmake/SelectHashes.cmake +39 -48
  37. data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
  38. data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
  39. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
  40. data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
  41. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  42. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +32 -20
  43. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  44. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  45. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  46. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  47. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  48. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  49. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  50. data/vendor/libgit2/deps/ntlmclient/ntlm.c +154 -122
  51. data/vendor/libgit2/deps/ntlmclient/ntlm.h +17 -13
  52. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +17 -4
  53. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  55. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  56. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  57. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
  59. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  60. data/vendor/libgit2/include/git2/apply.h +16 -2
  61. data/vendor/libgit2/include/git2/attr.h +106 -2
  62. data/vendor/libgit2/include/git2/blame.h +97 -43
  63. data/vendor/libgit2/include/git2/blob.h +33 -2
  64. data/vendor/libgit2/include/git2/branch.h +27 -0
  65. data/vendor/libgit2/include/git2/buffer.h +18 -78
  66. data/vendor/libgit2/include/git2/cert.h +43 -6
  67. data/vendor/libgit2/include/git2/checkout.h +32 -13
  68. data/vendor/libgit2/include/git2/clone.h +4 -4
  69. data/vendor/libgit2/include/git2/commit.h +37 -19
  70. data/vendor/libgit2/include/git2/common.h +46 -5
  71. data/vendor/libgit2/include/git2/config.h +19 -3
  72. data/vendor/libgit2/include/git2/credential.h +2 -1
  73. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  74. data/vendor/libgit2/include/git2/deprecated.h +326 -6
  75. data/vendor/libgit2/include/git2/describe.h +7 -2
  76. data/vendor/libgit2/include/git2/diff.h +50 -121
  77. data/vendor/libgit2/include/git2/email.h +127 -0
  78. data/vendor/libgit2/include/git2/errors.h +7 -6
  79. data/vendor/libgit2/include/git2/filter.h +69 -18
  80. data/vendor/libgit2/include/git2/graph.h +21 -2
  81. data/vendor/libgit2/include/git2/ignore.h +1 -1
  82. data/vendor/libgit2/include/git2/index.h +13 -7
  83. data/vendor/libgit2/include/git2/indexer.h +19 -0
  84. data/vendor/libgit2/include/git2/merge.h +23 -3
  85. data/vendor/libgit2/include/git2/message.h +2 -0
  86. data/vendor/libgit2/include/git2/notes.h +2 -2
  87. data/vendor/libgit2/include/git2/object.h +23 -0
  88. data/vendor/libgit2/include/git2/odb.h +65 -6
  89. data/vendor/libgit2/include/git2/odb_backend.h +1 -1
  90. data/vendor/libgit2/include/git2/oidarray.h +5 -8
  91. data/vendor/libgit2/include/git2/pack.h +24 -8
  92. data/vendor/libgit2/include/git2/patch.h +16 -0
  93. data/vendor/libgit2/include/git2/pathspec.h +1 -1
  94. data/vendor/libgit2/include/git2/proxy.h +1 -1
  95. data/vendor/libgit2/include/git2/rebase.h +34 -2
  96. data/vendor/libgit2/include/git2/refdb.h +3 -0
  97. data/vendor/libgit2/include/git2/reflog.h +1 -1
  98. data/vendor/libgit2/include/git2/refs.h +8 -4
  99. data/vendor/libgit2/include/git2/remote.h +246 -46
  100. data/vendor/libgit2/include/git2/repository.h +25 -18
  101. data/vendor/libgit2/include/git2/reset.h +2 -2
  102. data/vendor/libgit2/include/git2/revparse.h +5 -5
  103. data/vendor/libgit2/include/git2/revwalk.h +4 -1
  104. data/vendor/libgit2/include/git2/signature.h +1 -1
  105. data/vendor/libgit2/include/git2/stash.h +4 -4
  106. data/vendor/libgit2/include/git2/status.h +124 -62
  107. data/vendor/libgit2/include/git2/stdint.h +3 -3
  108. data/vendor/libgit2/include/git2/submodule.h +16 -2
  109. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  110. data/vendor/libgit2/include/git2/sys/email.h +45 -0
  111. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  112. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  113. data/vendor/libgit2/include/git2/sys/odb_backend.h +9 -5
  114. data/vendor/libgit2/include/git2/sys/remote.h +31 -0
  115. data/vendor/libgit2/include/git2/sys/stream.h +1 -1
  116. data/vendor/libgit2/include/git2/sys/transport.h +26 -34
  117. data/vendor/libgit2/include/git2/tag.h +13 -0
  118. data/vendor/libgit2/include/git2/tree.h +4 -17
  119. data/vendor/libgit2/include/git2/types.h +16 -7
  120. data/vendor/libgit2/include/git2/version.h +4 -4
  121. data/vendor/libgit2/include/git2/worktree.h +13 -2
  122. data/vendor/libgit2/include/git2.h +1 -0
  123. data/vendor/libgit2/src/CMakeLists.txt +192 -290
  124. data/vendor/libgit2/src/alloc.c +21 -8
  125. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  126. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  127. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  128. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  129. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  130. data/vendor/libgit2/src/annotated_commit.c +21 -9
  131. data/vendor/libgit2/src/annotated_commit.h +1 -1
  132. data/vendor/libgit2/src/apply.c +34 -25
  133. data/vendor/libgit2/src/apply.h +2 -2
  134. data/vendor/libgit2/src/array.h +11 -11
  135. data/vendor/libgit2/src/attr.c +204 -82
  136. data/vendor/libgit2/src/attr_file.c +105 -52
  137. data/vendor/libgit2/src/attr_file.h +36 -15
  138. data/vendor/libgit2/src/attrcache.c +55 -45
  139. data/vendor/libgit2/src/attrcache.h +4 -5
  140. data/vendor/libgit2/src/blame.c +15 -9
  141. data/vendor/libgit2/src/blame_git.c +2 -2
  142. data/vendor/libgit2/src/blob.c +76 -52
  143. data/vendor/libgit2/src/blob.h +1 -1
  144. data/vendor/libgit2/src/branch.c +203 -110
  145. data/vendor/libgit2/src/branch.h +15 -3
  146. data/vendor/libgit2/src/buf.c +126 -0
  147. data/vendor/libgit2/src/buf.h +50 -0
  148. data/vendor/libgit2/src/cache.c +2 -2
  149. data/vendor/libgit2/src/cache.h +7 -7
  150. data/vendor/libgit2/src/cc-compat.h +11 -9
  151. data/vendor/libgit2/src/checkout.c +118 -91
  152. data/vendor/libgit2/src/cherrypick.c +16 -12
  153. data/vendor/libgit2/src/clone.c +97 -103
  154. data/vendor/libgit2/src/commit.c +167 -84
  155. data/vendor/libgit2/src/commit.h +24 -1
  156. data/vendor/libgit2/src/commit_graph.c +1224 -0
  157. data/vendor/libgit2/src/commit_graph.h +169 -0
  158. data/vendor/libgit2/src/commit_list.c +48 -3
  159. data/vendor/libgit2/src/commit_list.h +2 -0
  160. data/vendor/libgit2/src/common.h +35 -5
  161. data/vendor/libgit2/src/config.c +119 -64
  162. data/vendor/libgit2/src/config.h +15 -2
  163. data/vendor/libgit2/src/config_cache.c +5 -3
  164. data/vendor/libgit2/src/config_file.c +120 -100
  165. data/vendor/libgit2/src/config_mem.c +9 -9
  166. data/vendor/libgit2/src/config_parse.c +29 -27
  167. data/vendor/libgit2/src/crlf.c +36 -23
  168. data/vendor/libgit2/src/date.c +13 -19
  169. data/vendor/libgit2/src/date.h +33 -0
  170. data/vendor/libgit2/src/delta.c +1 -1
  171. data/vendor/libgit2/src/describe.c +32 -21
  172. data/vendor/libgit2/src/diff.c +71 -183
  173. data/vendor/libgit2/src/diff.h +2 -4
  174. data/vendor/libgit2/src/diff_driver.c +53 -51
  175. data/vendor/libgit2/src/diff_driver.h +3 -3
  176. data/vendor/libgit2/src/diff_file.c +31 -26
  177. data/vendor/libgit2/src/diff_generate.c +76 -23
  178. data/vendor/libgit2/src/diff_generate.h +5 -3
  179. data/vendor/libgit2/src/diff_print.c +120 -95
  180. data/vendor/libgit2/src/diff_stats.c +47 -34
  181. data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
  182. data/vendor/libgit2/src/diff_tform.c +18 -16
  183. data/vendor/libgit2/src/diff_xdiff.c +7 -10
  184. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  185. data/vendor/libgit2/src/email.c +315 -0
  186. data/vendor/libgit2/src/email.h +25 -0
  187. data/vendor/libgit2/src/errors.c +37 -32
  188. data/vendor/libgit2/src/features.h.in +11 -2
  189. data/vendor/libgit2/src/fetch.c +77 -26
  190. data/vendor/libgit2/src/fetch.h +1 -1
  191. data/vendor/libgit2/src/fetchhead.c +27 -23
  192. data/vendor/libgit2/src/filebuf.c +36 -34
  193. data/vendor/libgit2/src/filebuf.h +1 -1
  194. data/vendor/libgit2/src/filter.c +278 -132
  195. data/vendor/libgit2/src/filter.h +46 -6
  196. data/vendor/libgit2/src/fs_path.c +2071 -0
  197. data/vendor/libgit2/src/fs_path.h +772 -0
  198. data/vendor/libgit2/src/futils.c +96 -90
  199. data/vendor/libgit2/src/futils.h +27 -15
  200. data/vendor/libgit2/src/graph.c +64 -9
  201. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +5 -5
  202. data/vendor/libgit2/src/hash/sha1/common_crypto.c +5 -5
  203. data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
  204. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  205. data/vendor/libgit2/src/hash/sha1/mbedtls.c +13 -13
  206. data/vendor/libgit2/src/hash/sha1/openssl.c +5 -5
  207. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +9 -11
  208. data/vendor/libgit2/src/hash/sha1/win32.c +21 -17
  209. data/vendor/libgit2/src/hash/sha1.h +3 -1
  210. data/vendor/libgit2/src/hash.c +71 -36
  211. data/vendor/libgit2/src/hash.h +13 -13
  212. data/vendor/libgit2/src/hashsig.c +23 -10
  213. data/vendor/libgit2/src/ident.c +30 -20
  214. data/vendor/libgit2/src/ignore.c +63 -46
  215. data/vendor/libgit2/src/ignore.h +2 -2
  216. data/vendor/libgit2/src/index.c +184 -149
  217. data/vendor/libgit2/src/index.h +7 -4
  218. data/vendor/libgit2/src/indexer.c +143 -89
  219. data/vendor/libgit2/src/integer.h +64 -2
  220. data/vendor/libgit2/src/iterator.c +93 -73
  221. data/vendor/libgit2/src/iterator.h +6 -6
  222. data/vendor/libgit2/src/khash.h +3 -12
  223. data/vendor/libgit2/src/{settings.c → libgit2.c} +165 -56
  224. data/vendor/libgit2/src/libgit2.h +15 -0
  225. data/vendor/libgit2/src/mailmap.c +60 -45
  226. data/vendor/libgit2/src/map.h +3 -3
  227. data/vendor/libgit2/src/merge.c +104 -61
  228. data/vendor/libgit2/src/merge.h +3 -15
  229. data/vendor/libgit2/src/merge_driver.c +21 -15
  230. data/vendor/libgit2/src/merge_file.c +24 -6
  231. data/vendor/libgit2/src/message.c +21 -8
  232. data/vendor/libgit2/src/midx.c +501 -18
  233. data/vendor/libgit2/src/midx.h +29 -2
  234. data/vendor/libgit2/src/mwindow.c +103 -59
  235. data/vendor/libgit2/src/mwindow.h +3 -3
  236. data/vendor/libgit2/src/net.c +405 -71
  237. data/vendor/libgit2/src/net.h +26 -5
  238. data/vendor/libgit2/src/netops.c +7 -5
  239. data/vendor/libgit2/src/netops.h +3 -3
  240. data/vendor/libgit2/src/notes.c +40 -49
  241. data/vendor/libgit2/src/object.c +68 -20
  242. data/vendor/libgit2/src/object.h +1 -1
  243. data/vendor/libgit2/src/odb.c +320 -80
  244. data/vendor/libgit2/src/odb.h +17 -3
  245. data/vendor/libgit2/src/odb_loose.c +96 -86
  246. data/vendor/libgit2/src/odb_mempack.c +19 -6
  247. data/vendor/libgit2/src/odb_pack.c +402 -125
  248. data/vendor/libgit2/src/oid.c +16 -8
  249. data/vendor/libgit2/src/oid.h +15 -0
  250. data/vendor/libgit2/src/oidarray.c +10 -1
  251. data/vendor/libgit2/src/pack-objects.c +90 -69
  252. data/vendor/libgit2/src/pack-objects.h +11 -6
  253. data/vendor/libgit2/src/pack.c +337 -127
  254. data/vendor/libgit2/src/pack.h +25 -7
  255. data/vendor/libgit2/src/patch.c +17 -10
  256. data/vendor/libgit2/src/patch.h +1 -0
  257. data/vendor/libgit2/src/patch_generate.c +29 -13
  258. data/vendor/libgit2/src/patch_generate.h +5 -5
  259. data/vendor/libgit2/src/patch_parse.c +26 -25
  260. data/vendor/libgit2/src/path.c +86 -1768
  261. data/vendor/libgit2/src/path.h +39 -635
  262. data/vendor/libgit2/src/pathspec.c +12 -12
  263. data/vendor/libgit2/src/pathspec.h +2 -2
  264. data/vendor/libgit2/src/pool.c +13 -7
  265. data/vendor/libgit2/src/posix.c +14 -6
  266. data/vendor/libgit2/src/posix.h +1 -0
  267. data/vendor/libgit2/src/pqueue.h +1 -1
  268. data/vendor/libgit2/src/proxy.c +4 -1
  269. data/vendor/libgit2/src/proxy.h +1 -1
  270. data/vendor/libgit2/src/push.c +30 -35
  271. data/vendor/libgit2/src/push.h +4 -16
  272. data/vendor/libgit2/src/rand.c +226 -0
  273. data/vendor/libgit2/src/rand.h +37 -0
  274. data/vendor/libgit2/src/reader.c +18 -14
  275. data/vendor/libgit2/src/reader.h +2 -2
  276. data/vendor/libgit2/src/rebase.c +177 -132
  277. data/vendor/libgit2/src/refdb.c +30 -13
  278. data/vendor/libgit2/src/refdb_fs.c +548 -222
  279. data/vendor/libgit2/src/reflog.c +19 -14
  280. data/vendor/libgit2/src/refs.c +107 -72
  281. data/vendor/libgit2/src/refs.h +2 -2
  282. data/vendor/libgit2/src/refspec.c +53 -38
  283. data/vendor/libgit2/src/refspec.h +5 -2
  284. data/vendor/libgit2/src/regexp.c +1 -1
  285. data/vendor/libgit2/src/remote.c +960 -486
  286. data/vendor/libgit2/src/remote.h +16 -10
  287. data/vendor/libgit2/src/repository.c +702 -422
  288. data/vendor/libgit2/src/repository.h +26 -8
  289. data/vendor/libgit2/src/reset.c +16 -12
  290. data/vendor/libgit2/src/revert.c +16 -12
  291. data/vendor/libgit2/src/revparse.c +66 -48
  292. data/vendor/libgit2/src/revwalk.c +39 -22
  293. data/vendor/libgit2/src/runtime.c +162 -0
  294. data/vendor/libgit2/src/runtime.h +62 -0
  295. data/vendor/libgit2/src/settings.h +11 -0
  296. data/vendor/libgit2/src/signature.c +18 -11
  297. data/vendor/libgit2/src/signature.h +1 -1
  298. data/vendor/libgit2/src/sortedcache.c +1 -1
  299. data/vendor/libgit2/src/sortedcache.h +10 -8
  300. data/vendor/libgit2/src/stash.c +39 -38
  301. data/vendor/libgit2/src/status.c +11 -5
  302. data/vendor/libgit2/src/{buffer.c → str.c} +459 -136
  303. data/vendor/libgit2/src/str.h +357 -0
  304. data/vendor/libgit2/src/strarray.c +2 -1
  305. data/vendor/libgit2/src/streams/mbedtls.c +22 -23
  306. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  307. data/vendor/libgit2/src/streams/openssl.c +101 -201
  308. data/vendor/libgit2/src/streams/openssl.h +9 -1
  309. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  310. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  311. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  312. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  313. data/vendor/libgit2/src/streams/registry.c +5 -6
  314. data/vendor/libgit2/src/streams/socket.c +6 -2
  315. data/vendor/libgit2/src/streams/stransport.c +6 -3
  316. data/vendor/libgit2/src/streams/tls.c +5 -3
  317. data/vendor/libgit2/src/submodule.c +290 -212
  318. data/vendor/libgit2/src/submodule.h +10 -10
  319. data/vendor/libgit2/src/sysdir.c +70 -56
  320. data/vendor/libgit2/src/sysdir.h +15 -10
  321. data/vendor/libgit2/src/tag.c +72 -34
  322. data/vendor/libgit2/src/thread.c +140 -0
  323. data/vendor/libgit2/src/thread.h +479 -0
  324. data/vendor/libgit2/src/threadstate.c +84 -0
  325. data/vendor/libgit2/src/threadstate.h +24 -0
  326. data/vendor/libgit2/src/trace.c +3 -16
  327. data/vendor/libgit2/src/trace.h +17 -30
  328. data/vendor/libgit2/src/trailer.c +2 -2
  329. data/vendor/libgit2/src/transaction.c +20 -9
  330. data/vendor/libgit2/src/transport.c +13 -13
  331. data/vendor/libgit2/src/transports/auth.c +8 -10
  332. data/vendor/libgit2/src/transports/auth.h +2 -3
  333. data/vendor/libgit2/src/transports/auth_negotiate.c +23 -17
  334. data/vendor/libgit2/src/transports/auth_ntlm.c +20 -16
  335. data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
  336. data/vendor/libgit2/src/transports/credential.c +15 -7
  337. data/vendor/libgit2/src/transports/git.c +10 -14
  338. data/vendor/libgit2/src/transports/http.c +56 -34
  339. data/vendor/libgit2/src/transports/http.h +3 -3
  340. data/vendor/libgit2/src/transports/httpclient.c +106 -79
  341. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  342. data/vendor/libgit2/src/transports/local.c +127 -119
  343. data/vendor/libgit2/src/transports/smart.c +61 -144
  344. data/vendor/libgit2/src/transports/smart.h +26 -32
  345. data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
  346. data/vendor/libgit2/src/transports/smart_protocol.c +68 -44
  347. data/vendor/libgit2/src/transports/ssh.c +100 -131
  348. data/vendor/libgit2/src/transports/winhttp.c +86 -82
  349. data/vendor/libgit2/src/tree-cache.c +5 -5
  350. data/vendor/libgit2/src/tree-cache.h +2 -2
  351. data/vendor/libgit2/src/tree.c +150 -116
  352. data/vendor/libgit2/src/tree.h +1 -0
  353. data/vendor/libgit2/src/tsort.c +0 -2
  354. data/vendor/libgit2/src/unix/map.c +3 -3
  355. data/vendor/libgit2/src/unix/posix.h +1 -4
  356. data/vendor/libgit2/src/unix/pthread.h +2 -1
  357. data/vendor/libgit2/src/unix/realpath.c +0 -2
  358. data/vendor/libgit2/src/utf8.c +150 -0
  359. data/vendor/libgit2/src/utf8.h +52 -0
  360. data/vendor/libgit2/src/util.c +68 -144
  361. data/vendor/libgit2/src/util.h +36 -68
  362. data/vendor/libgit2/src/vector.c +23 -19
  363. data/vendor/libgit2/src/vector.h +5 -3
  364. data/vendor/libgit2/src/win32/findfile.c +172 -114
  365. data/vendor/libgit2/src/win32/findfile.h +7 -4
  366. data/vendor/libgit2/src/win32/map.c +1 -1
  367. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  368. data/vendor/libgit2/src/win32/path_w32.c +162 -33
  369. data/vendor/libgit2/src/win32/path_w32.h +2 -1
  370. data/vendor/libgit2/src/win32/posix.h +6 -7
  371. data/vendor/libgit2/src/win32/posix_w32.c +26 -33
  372. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  373. data/vendor/libgit2/src/win32/reparse.h +4 -4
  374. data/vendor/libgit2/src/win32/thread.c +24 -15
  375. data/vendor/libgit2/src/win32/thread.h +1 -1
  376. data/vendor/libgit2/src/win32/w32_buffer.c +5 -6
  377. data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
  378. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  379. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  380. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  381. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  382. data/vendor/libgit2/src/worktree.c +138 -105
  383. data/vendor/libgit2/src/worktree.h +1 -1
  384. data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
  385. data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
  386. data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
  387. data/vendor/libgit2/src/xdiff/xemit.c +23 -7
  388. data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
  389. data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
  390. data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
  391. data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
  392. data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
  393. data/vendor/libgit2/src/xdiff/xutils.c +18 -7
  394. data/vendor/libgit2/src/zstream.c +6 -6
  395. data/vendor/libgit2/src/zstream.h +4 -4
  396. metadata +60 -24
  397. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  398. data/vendor/libgit2/src/buf_text.c +0 -316
  399. data/vendor/libgit2/src/buf_text.h +0 -122
  400. data/vendor/libgit2/src/buffer.h +0 -222
  401. data/vendor/libgit2/src/global.c +0 -363
  402. data/vendor/libgit2/src/global.h +0 -41
  403. data/vendor/libgit2/src/thread-utils.c +0 -58
  404. data/vendor/libgit2/src/thread-utils.h +0 -369
  405. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  406. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  407. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -4,43 +4,42 @@
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
- #include "buffer.h"
7
+
8
+ #include "str.h"
8
9
  #include "posix.h"
9
- #include "git2/buffer.h"
10
- #include "buf_text.h"
11
10
  #include <ctype.h>
12
11
 
13
- /* Used as default value for git_buf->ptr so that people can always
14
- * assume ptr is non-NULL and zero terminated even for new git_bufs.
12
+ /* Used as default value for git_str->ptr so that people can always
13
+ * assume ptr is non-NULL and zero terminated even for new git_strs.
15
14
  */
16
- char git_buf__initbuf[1];
15
+ char git_str__initstr[1];
17
16
 
18
- char git_buf__oom[1];
17
+ char git_str__oom[1];
19
18
 
20
19
  #define ENSURE_SIZE(b, d) \
21
- if ((b)->ptr == git_buf__oom || \
22
- ((d) > (b)->asize && git_buf_grow((b), (d)) < 0))\
20
+ if ((b)->ptr == git_str__oom || \
21
+ ((d) > (b)->asize && git_str_grow((b), (d)) < 0))\
23
22
  return -1;
24
23
 
25
24
 
26
- int git_buf_init(git_buf *buf, size_t initial_size)
25
+ int git_str_init(git_str *buf, size_t initial_size)
27
26
  {
28
27
  buf->asize = 0;
29
28
  buf->size = 0;
30
- buf->ptr = git_buf__initbuf;
29
+ buf->ptr = git_str__initstr;
31
30
 
32
31
  ENSURE_SIZE(buf, initial_size);
33
32
 
34
33
  return 0;
35
34
  }
36
35
 
37
- int git_buf_try_grow(
38
- git_buf *buf, size_t target_size, bool mark_oom)
36
+ int git_str_try_grow(
37
+ git_str *buf, size_t target_size, bool mark_oom)
39
38
  {
40
39
  char *new_ptr;
41
40
  size_t new_size;
42
41
 
43
- if (buf->ptr == git_buf__oom)
42
+ if (buf->ptr == git_str__oom)
44
43
  return -1;
45
44
 
46
45
  if (buf->asize == 0 && buf->size != 0) {
@@ -75,9 +74,9 @@ int git_buf_try_grow(
75
74
 
76
75
  if (new_size < buf->size) {
77
76
  if (mark_oom) {
78
- if (buf->ptr && buf->ptr != git_buf__initbuf)
77
+ if (buf->ptr && buf->ptr != git_str__initstr)
79
78
  git__free(buf->ptr);
80
- buf->ptr = git_buf__oom;
79
+ buf->ptr = git_str__oom;
81
80
  }
82
81
 
83
82
  git_error_set_oom();
@@ -88,9 +87,9 @@ int git_buf_try_grow(
88
87
 
89
88
  if (!new_ptr) {
90
89
  if (mark_oom) {
91
- if (buf->ptr && (buf->ptr != git_buf__initbuf))
90
+ if (buf->ptr && (buf->ptr != git_str__initstr))
92
91
  git__free(buf->ptr);
93
- buf->ptr = git_buf__oom;
92
+ buf->ptr = git_str__oom;
94
93
  }
95
94
  return -1;
96
95
  }
@@ -106,55 +105,39 @@ int git_buf_try_grow(
106
105
  return 0;
107
106
  }
108
107
 
109
- int git_buf_grow(git_buf *buffer, size_t target_size)
108
+ int git_str_grow(git_str *buffer, size_t target_size)
110
109
  {
111
- return git_buf_try_grow(buffer, target_size, true);
110
+ return git_str_try_grow(buffer, target_size, true);
112
111
  }
113
112
 
114
- int git_buf_grow_by(git_buf *buffer, size_t additional_size)
113
+ int git_str_grow_by(git_str *buffer, size_t additional_size)
115
114
  {
116
115
  size_t newsize;
117
116
 
118
117
  if (GIT_ADD_SIZET_OVERFLOW(&newsize, buffer->size, additional_size)) {
119
- buffer->ptr = git_buf__oom;
118
+ buffer->ptr = git_str__oom;
120
119
  return -1;
121
120
  }
122
121
 
123
- return git_buf_try_grow(buffer, newsize, true);
122
+ return git_str_try_grow(buffer, newsize, true);
124
123
  }
125
124
 
126
- void git_buf_dispose(git_buf *buf)
125
+ void git_str_dispose(git_str *buf)
127
126
  {
128
127
  if (!buf) return;
129
128
 
130
- if (buf->asize > 0 && buf->ptr != NULL && buf->ptr != git_buf__oom)
129
+ if (buf->asize > 0 && buf->ptr != NULL && buf->ptr != git_str__oom)
131
130
  git__free(buf->ptr);
132
131
 
133
- git_buf_init(buf, 0);
134
- }
135
-
136
- #ifndef GIT_DEPRECATE_HARD
137
- void git_buf_free(git_buf *buf)
138
- {
139
- git_buf_dispose(buf);
140
- }
141
- #endif
142
-
143
- void git_buf_sanitize(git_buf *buf)
144
- {
145
- if (buf->ptr == NULL) {
146
- assert(buf->size == 0 && buf->asize == 0);
147
- buf->ptr = git_buf__initbuf;
148
- } else if (buf->asize > buf->size)
149
- buf->ptr[buf->size] = '\0';
132
+ git_str_init(buf, 0);
150
133
  }
151
134
 
152
- void git_buf_clear(git_buf *buf)
135
+ void git_str_clear(git_str *buf)
153
136
  {
154
137
  buf->size = 0;
155
138
 
156
139
  if (!buf->ptr) {
157
- buf->ptr = git_buf__initbuf;
140
+ buf->ptr = git_str__initstr;
158
141
  buf->asize = 0;
159
142
  }
160
143
 
@@ -162,12 +145,12 @@ void git_buf_clear(git_buf *buf)
162
145
  buf->ptr[0] = '\0';
163
146
  }
164
147
 
165
- int git_buf_set(git_buf *buf, const void *data, size_t len)
148
+ int git_str_set(git_str *buf, const void *data, size_t len)
166
149
  {
167
150
  size_t alloclen;
168
151
 
169
152
  if (len == 0 || data == NULL) {
170
- git_buf_clear(buf);
153
+ git_str_clear(buf);
171
154
  } else {
172
155
  if (data != buf->ptr) {
173
156
  GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, len, 1);
@@ -183,22 +166,12 @@ int git_buf_set(git_buf *buf, const void *data, size_t len)
183
166
  return 0;
184
167
  }
185
168
 
186
- int git_buf_is_binary(const git_buf *buf)
169
+ int git_str_sets(git_str *buf, const char *string)
187
170
  {
188
- return git_buf_text_is_binary(buf);
171
+ return git_str_set(buf, string, string ? strlen(string) : 0);
189
172
  }
190
173
 
191
- int git_buf_contains_nul(const git_buf *buf)
192
- {
193
- return git_buf_text_contains_nul(buf);
194
- }
195
-
196
- int git_buf_sets(git_buf *buf, const char *string)
197
- {
198
- return git_buf_set(buf, string, string ? strlen(string) : 0);
199
- }
200
-
201
- int git_buf_putc(git_buf *buf, char c)
174
+ int git_str_putc(git_str *buf, char c)
202
175
  {
203
176
  size_t new_size;
204
177
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, 2);
@@ -208,7 +181,7 @@ int git_buf_putc(git_buf *buf, char c)
208
181
  return 0;
209
182
  }
210
183
 
211
- int git_buf_putcn(git_buf *buf, char c, size_t len)
184
+ int git_str_putcn(git_str *buf, char c, size_t len)
212
185
  {
213
186
  size_t new_size;
214
187
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, len);
@@ -220,12 +193,12 @@ int git_buf_putcn(git_buf *buf, char c, size_t len)
220
193
  return 0;
221
194
  }
222
195
 
223
- int git_buf_put(git_buf *buf, const char *data, size_t len)
196
+ int git_str_put(git_str *buf, const char *data, size_t len)
224
197
  {
225
198
  if (len) {
226
199
  size_t new_size;
227
200
 
228
- assert(data);
201
+ GIT_ASSERT_ARG(data);
229
202
 
230
203
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, buf->size, len);
231
204
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
@@ -237,16 +210,43 @@ int git_buf_put(git_buf *buf, const char *data, size_t len)
237
210
  return 0;
238
211
  }
239
212
 
240
- int git_buf_puts(git_buf *buf, const char *string)
213
+ int git_str_puts(git_str *buf, const char *string)
214
+ {
215
+ GIT_ASSERT_ARG(string);
216
+
217
+ return git_str_put(buf, string, strlen(string));
218
+ }
219
+
220
+ static char hex_encode[] = "0123456789abcdef";
221
+
222
+ int git_str_encode_hexstr(git_str *str, const char *data, size_t len)
241
223
  {
242
- assert(string);
243
- return git_buf_put(buf, string, strlen(string));
224
+ size_t new_size, i;
225
+ char *s;
226
+
227
+ GIT_ERROR_CHECK_ALLOC_MULTIPLY(&new_size, len, 2);
228
+ GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
229
+
230
+ if (git_str_grow_by(str, new_size) < 0)
231
+ return -1;
232
+
233
+ s = str->ptr + str->size;
234
+
235
+ for (i = 0; i < len; i++) {
236
+ *s++ = hex_encode[(data[i] & 0xf0) >> 4];
237
+ *s++ = hex_encode[(data[i] & 0x0f)];
238
+ }
239
+
240
+ str->size += (len * 2);
241
+ str->ptr[str->size] = '\0';
242
+
243
+ return 0;
244
244
  }
245
245
 
246
246
  static const char base64_encode[] =
247
247
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
248
248
 
249
- int git_buf_encode_base64(git_buf *buf, const char *data, size_t len)
249
+ int git_str_encode_base64(git_str *buf, const char *data, size_t len)
250
250
  {
251
251
  size_t extra = len % 3;
252
252
  uint8_t *write, a, b, c;
@@ -308,7 +308,7 @@ static const int8_t base64_decode[] = {
308
308
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
309
309
  };
310
310
 
311
- int git_buf_decode_base64(git_buf *buf, const char *base64, size_t len)
311
+ int git_str_decode_base64(git_str *buf, const char *base64, size_t len)
312
312
  {
313
313
  size_t i;
314
314
  int8_t a, b, c, d;
@@ -319,7 +319,7 @@ int git_buf_decode_base64(git_buf *buf, const char *base64, size_t len)
319
319
  return -1;
320
320
  }
321
321
 
322
- assert(len % 4 == 0);
322
+ GIT_ASSERT_ARG(len % 4 == 0);
323
323
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, (len / 4 * 3), buf->size);
324
324
  GIT_ERROR_CHECK_ALLOC_ADD(&new_size, new_size, 1);
325
325
  ENSURE_SIZE(buf, new_size);
@@ -348,7 +348,7 @@ int git_buf_decode_base64(git_buf *buf, const char *base64, size_t len)
348
348
  static const char base85_encode[] =
349
349
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~";
350
350
 
351
- int git_buf_encode_base85(git_buf *buf, const char *data, size_t len)
351
+ int git_str_encode_base85(git_str *buf, const char *data, size_t len)
352
352
  {
353
353
  size_t blocks = (len / 4) + !!(len % 4), alloclen;
354
354
 
@@ -407,8 +407,8 @@ static const int8_t base85_decode[] = {
407
407
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
408
408
  };
409
409
 
410
- int git_buf_decode_base85(
411
- git_buf *buf,
410
+ int git_str_decode_base85(
411
+ git_str *buf,
412
412
  const char *base85,
413
413
  size_t base85_len,
414
414
  size_t output_len)
@@ -471,8 +471,8 @@ on_error:
471
471
 
472
472
  #define HEX_DECODE(c) ((c | 32) % 39 - 9)
473
473
 
474
- int git_buf_decode_percent(
475
- git_buf *buf,
474
+ int git_str_decode_percent(
475
+ git_str *buf,
476
476
  const char *str,
477
477
  size_t str_len)
478
478
  {
@@ -499,7 +499,7 @@ int git_buf_decode_percent(
499
499
  return 0;
500
500
  }
501
501
 
502
- int git_buf_vprintf(git_buf *buf, const char *format, va_list ap)
502
+ int git_str_vprintf(git_str *buf, const char *format, va_list ap)
503
503
  {
504
504
  size_t expected_size, new_size;
505
505
  int len;
@@ -522,7 +522,7 @@ int git_buf_vprintf(git_buf *buf, const char *format, va_list ap)
522
522
 
523
523
  if (len < 0) {
524
524
  git__free(buf->ptr);
525
- buf->ptr = git_buf__oom;
525
+ buf->ptr = git_str__oom;
526
526
  return -1;
527
527
  }
528
528
 
@@ -539,42 +539,46 @@ int git_buf_vprintf(git_buf *buf, const char *format, va_list ap)
539
539
  return 0;
540
540
  }
541
541
 
542
- int git_buf_printf(git_buf *buf, const char *format, ...)
542
+ int git_str_printf(git_str *buf, const char *format, ...)
543
543
  {
544
544
  int r;
545
545
  va_list ap;
546
546
 
547
547
  va_start(ap, format);
548
- r = git_buf_vprintf(buf, format, ap);
548
+ r = git_str_vprintf(buf, format, ap);
549
549
  va_end(ap);
550
550
 
551
551
  return r;
552
552
  }
553
553
 
554
- void git_buf_copy_cstr(char *data, size_t datasize, const git_buf *buf)
554
+ int git_str_copy_cstr(char *data, size_t datasize, const git_str *buf)
555
555
  {
556
556
  size_t copylen;
557
557
 
558
- assert(data && datasize && buf);
558
+ GIT_ASSERT_ARG(data);
559
+ GIT_ASSERT_ARG(datasize);
560
+ GIT_ASSERT_ARG(buf);
559
561
 
560
562
  data[0] = '\0';
561
563
 
562
564
  if (buf->size == 0 || buf->asize <= 0)
563
- return;
565
+ return 0;
564
566
 
565
567
  copylen = buf->size;
566
568
  if (copylen > datasize - 1)
567
569
  copylen = datasize - 1;
568
570
  memmove(data, buf->ptr, copylen);
569
571
  data[copylen] = '\0';
572
+
573
+ return 0;
570
574
  }
571
575
 
572
- void git_buf_consume_bytes(git_buf *buf, size_t len)
576
+ void git_str_consume_bytes(git_str *buf, size_t len)
573
577
  {
574
- git_buf_consume(buf, buf->ptr + len);
578
+ git_str_consume(buf, buf->ptr + len);
575
579
  }
576
580
 
577
- void git_buf_consume(git_buf *buf, const char *end)
581
+ void git_str_consume(git_str *buf, const char *end)
578
582
  {
579
583
  if (end > buf->ptr && end <= buf->ptr + buf->size) {
580
584
  size_t consumed = end - buf->ptr;
@@ -584,7 +588,7 @@ void git_buf_consume(git_buf *buf, const char *end)
584
588
  }
585
589
  }
586
590
 
587
- void git_buf_truncate(git_buf *buf, size_t len)
591
+ void git_str_truncate(git_str *buf, size_t len)
588
592
  {
589
593
  if (len >= buf->size)
590
594
  return;
@@ -594,42 +598,49 @@ void git_buf_truncate(git_buf *buf, size_t len)
594
598
  buf->ptr[buf->size] = '\0';
595
599
  }
596
600
 
597
- void git_buf_shorten(git_buf *buf, size_t amount)
601
+ void git_str_shorten(git_str *buf, size_t amount)
598
602
  {
599
603
  if (buf->size > amount)
600
- git_buf_truncate(buf, buf->size - amount);
604
+ git_str_truncate(buf, buf->size - amount);
601
605
  else
602
- git_buf_clear(buf);
606
+ git_str_clear(buf);
603
607
  }
604
608
 
605
- void git_buf_rtruncate_at_char(git_buf *buf, char separator)
609
+ void git_str_truncate_at_char(git_str *buf, char separator)
606
610
  {
607
- ssize_t idx = git_buf_rfind_next(buf, separator);
608
- git_buf_truncate(buf, idx < 0 ? 0 : (size_t)idx);
611
+ ssize_t idx = git_str_find(buf, separator);
612
+ if (idx >= 0)
613
+ git_str_truncate(buf, (size_t)idx);
609
614
  }
610
615
 
611
- void git_buf_swap(git_buf *buf_a, git_buf *buf_b)
616
+ void git_str_rtruncate_at_char(git_str *buf, char separator)
612
617
  {
613
- git_buf t = *buf_a;
614
- *buf_a = *buf_b;
615
- *buf_b = t;
618
+ ssize_t idx = git_str_rfind_next(buf, separator);
619
+ git_str_truncate(buf, idx < 0 ? 0 : (size_t)idx);
616
620
  }
617
621
 
618
- char *git_buf_detach(git_buf *buf)
622
+ void git_str_swap(git_str *str_a, git_str *str_b)
623
+ {
624
+ git_str t = *str_a;
625
+ *str_a = *str_b;
626
+ *str_b = t;
627
+ }
628
+
629
+ char *git_str_detach(git_str *buf)
619
630
  {
620
631
  char *data = buf->ptr;
621
632
 
622
- if (buf->asize == 0 || buf->ptr == git_buf__oom)
633
+ if (buf->asize == 0 || buf->ptr == git_str__oom)
623
634
  return NULL;
624
635
 
625
- git_buf_init(buf, 0);
636
+ git_str_init(buf, 0);
626
637
 
627
638
  return data;
628
639
  }
629
640
 
630
- int git_buf_attach(git_buf *buf, char *ptr, size_t asize)
641
+ int git_str_attach(git_str *buf, char *ptr, size_t asize)
631
642
  {
632
- git_buf_dispose(buf);
643
+ git_str_dispose(buf);
633
644
 
634
645
  if (ptr) {
635
646
  buf->ptr = ptr;
@@ -644,13 +655,13 @@ int git_buf_attach(git_buf *buf, char *ptr, size_t asize)
644
655
  return 0;
645
656
  }
646
657
 
647
- void git_buf_attach_notowned(git_buf *buf, const char *ptr, size_t size)
658
+ void git_str_attach_notowned(git_str *buf, const char *ptr, size_t size)
648
659
  {
649
- if (git_buf_is_allocated(buf))
650
- git_buf_dispose(buf);
660
+ if (git_str_is_allocated(buf))
661
+ git_str_dispose(buf);
651
662
 
652
663
  if (!size) {
653
- git_buf_init(buf, 0);
664
+ git_str_init(buf, 0);
654
665
  } else {
655
666
  buf->ptr = (char *)ptr;
656
667
  buf->asize = 0;
@@ -658,7 +669,7 @@ void git_buf_attach_notowned(git_buf *buf, const char *ptr, size_t size)
658
669
  }
659
670
  }
660
671
 
661
- int git_buf_join_n(git_buf *buf, char separator, int nbuf, ...)
672
+ int git_str_join_n(git_str *buf, char separator, int nbuf, ...)
662
673
  {
663
674
  va_list ap;
664
675
  int i;
@@ -672,7 +683,7 @@ int git_buf_join_n(git_buf *buf, char separator, int nbuf, ...)
672
683
 
673
684
  va_start(ap, nbuf);
674
685
  for (i = 0; i < nbuf; ++i) {
675
- const char* segment;
686
+ const char *segment;
676
687
  size_t segment_len;
677
688
 
678
689
  segment = va_arg(ap, const char *);
@@ -693,7 +704,7 @@ int git_buf_join_n(git_buf *buf, char separator, int nbuf, ...)
693
704
  return 0;
694
705
 
695
706
  GIT_ERROR_CHECK_ALLOC_ADD(&total_size, total_size, 1);
696
- if (git_buf_grow_by(buf, total_size) < 0)
707
+ if (git_str_grow_by(buf, total_size) < 0)
697
708
  return -1;
698
709
 
699
710
  out = buf->ptr + buf->size;
@@ -704,7 +715,7 @@ int git_buf_join_n(git_buf *buf, char separator, int nbuf, ...)
704
715
 
705
716
  va_start(ap, nbuf);
706
717
  for (i = 0; i < nbuf; ++i) {
707
- const char* segment;
718
+ const char *segment;
708
719
  size_t segment_len;
709
720
 
710
721
  segment = va_arg(ap, const char *);
@@ -746,8 +757,8 @@ int git_buf_join_n(git_buf *buf, char separator, int nbuf, ...)
746
757
  return 0;
747
758
  }
748
759
 
749
- int git_buf_join(
750
- git_buf *buf,
760
+ int git_str_join(
761
+ git_str *buf,
751
762
  char separator,
752
763
  const char *str_a,
753
764
  const char *str_b)
@@ -760,7 +771,7 @@ int git_buf_join(
760
771
 
761
772
  /* not safe to have str_b point internally to the buffer */
762
773
  if (buf->size)
763
- assert(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
774
+ GIT_ASSERT_ARG(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
764
775
 
765
776
  /* figure out if we need to insert a separator */
766
777
  if (separator && strlen_a) {
@@ -795,8 +806,8 @@ int git_buf_join(
795
806
  return 0;
796
807
  }
797
808
 
798
- int git_buf_join3(
799
- git_buf *buf,
809
+ int git_str_join3(
810
+ git_str *buf,
800
811
  char separator,
801
812
  const char *str_a,
802
813
  const char *str_b,
@@ -810,9 +821,9 @@ int git_buf_join3(
810
821
  char *tgt;
811
822
 
812
823
  /* for this function, disallow pointers into the existing buffer */
813
- assert(str_a < buf->ptr || str_a >= buf->ptr + buf->size);
814
- assert(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
815
- assert(str_c < buf->ptr || str_c >= buf->ptr + buf->size);
824
+ GIT_ASSERT(str_a < buf->ptr || str_a >= buf->ptr + buf->size);
825
+ GIT_ASSERT(str_b < buf->ptr || str_b >= buf->ptr + buf->size);
826
+ GIT_ASSERT(str_c < buf->ptr || str_c >= buf->ptr + buf->size);
816
827
 
817
828
  if (separator) {
818
829
  if (len_a > 0) {
@@ -855,7 +866,7 @@ int git_buf_join3(
855
866
  return 0;
856
867
  }
857
868
 
858
- void git_buf_rtrim(git_buf *buf)
869
+ void git_str_rtrim(git_str *buf)
859
870
  {
860
871
  while (buf->size > 0) {
861
872
  if (!git__isspace(buf->ptr[buf->size - 1]))
@@ -868,15 +879,15 @@ void git_buf_rtrim(git_buf *buf)
868
879
  buf->ptr[buf->size] = '\0';
869
880
  }
870
881
 
871
- int git_buf_cmp(const git_buf *a, const git_buf *b)
882
+ int git_str_cmp(const git_str *a, const git_str *b)
872
883
  {
873
884
  int result = memcmp(a->ptr, b->ptr, min(a->size, b->size));
874
885
  return (result != 0) ? result :
875
886
  (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0;
876
887
  }
877
888
 
878
- int git_buf_splice(
879
- git_buf *buf,
889
+ int git_str_splice(
890
+ git_str *buf,
880
891
  size_t where,
881
892
  size_t nb_to_remove,
882
893
  const char *data,
@@ -885,7 +896,9 @@ int git_buf_splice(
885
896
  char *splice_loc;
886
897
  size_t new_size, alloc_size;
887
898
 
888
- assert(buf && where <= buf->size && nb_to_remove <= buf->size - where);
899
+ GIT_ASSERT(buf);
900
+ GIT_ASSERT(where <= buf->size);
901
+ GIT_ASSERT(nb_to_remove <= buf->size - where);
889
902
 
890
903
  splice_loc = buf->ptr + where;
891
904
 
@@ -908,10 +921,10 @@ int git_buf_splice(
908
921
  }
909
922
 
910
923
  /* Quote per http://marc.info/?l=git&m=112927316408690&w=2 */
911
- int git_buf_quote(git_buf *buf)
924
+ int git_str_quote(git_str *buf)
912
925
  {
913
926
  const char whitespace[] = { 'a', 'b', 't', 'n', 'v', 'f', 'r' };
914
- git_buf quoted = GIT_BUF_INIT;
927
+ git_str quoted = GIT_STR_INIT;
915
928
  size_t i = 0;
916
929
  bool quote = false;
917
930
  int error = 0;
@@ -931,55 +944,55 @@ int git_buf_quote(git_buf *buf)
931
944
  if (!quote)
932
945
  goto done;
933
946
 
934
- git_buf_putc(&quoted, '"');
935
- git_buf_put(&quoted, buf->ptr, i);
947
+ git_str_putc(&quoted, '"');
948
+ git_str_put(&quoted, buf->ptr, i);
936
949
 
937
950
  for (; i < buf->size; i++) {
938
951
  /* whitespace - use the map above, which is ordered by ascii value */
939
952
  if (buf->ptr[i] >= '\a' && buf->ptr[i] <= '\r') {
940
- git_buf_putc(&quoted, '\\');
941
- git_buf_putc(&quoted, whitespace[buf->ptr[i] - '\a']);
953
+ git_str_putc(&quoted, '\\');
954
+ git_str_putc(&quoted, whitespace[buf->ptr[i] - '\a']);
942
955
  }
943
956
 
944
957
  /* double quote and backslash must be escaped */
945
958
  else if (buf->ptr[i] == '"' || buf->ptr[i] == '\\') {
946
- git_buf_putc(&quoted, '\\');
947
- git_buf_putc(&quoted, buf->ptr[i]);
959
+ git_str_putc(&quoted, '\\');
960
+ git_str_putc(&quoted, buf->ptr[i]);
948
961
  }
949
962
 
950
963
  /* escape anything unprintable as octal */
951
964
  else if (buf->ptr[i] != ' ' &&
952
965
  (buf->ptr[i] < '!' || buf->ptr[i] > '~')) {
953
- git_buf_printf(&quoted, "\\%03o", (unsigned char)buf->ptr[i]);
966
+ git_str_printf(&quoted, "\\%03o", (unsigned char)buf->ptr[i]);
954
967
  }
955
968
 
956
969
  /* yay, printable! */
957
970
  else {
958
- git_buf_putc(&quoted, buf->ptr[i]);
971
+ git_str_putc(&quoted, buf->ptr[i]);
959
972
  }
960
973
  }
961
974
 
962
- git_buf_putc(&quoted, '"');
975
+ git_str_putc(&quoted, '"');
963
976
 
964
- if (git_buf_oom(&quoted)) {
977
+ if (git_str_oom(&quoted)) {
965
978
  error = -1;
966
979
  goto done;
967
980
  }
968
981
 
969
- git_buf_swap(&quoted, buf);
982
+ git_str_swap(&quoted, buf);
970
983
 
971
984
  done:
972
- git_buf_dispose(&quoted);
985
+ git_str_dispose(&quoted);
973
986
  return error;
974
987
  }
975
988
 
976
989
  /* Unquote per http://marc.info/?l=git&m=112927316408690&w=2 */
977
- int git_buf_unquote(git_buf *buf)
990
+ int git_str_unquote(git_str *buf)
978
991
  {
979
992
  size_t i, j;
980
993
  char ch;
981
994
 
982
- git_buf_rtrim(buf);
995
+ git_str_rtrim(buf);
983
996
 
984
997
  if (buf->size < 2 || buf->ptr[0] != '"' || buf->ptr[buf->size-1] != '"')
985
998
  goto invalid;
@@ -1047,3 +1060,313 @@ invalid:
1047
1060
  git_error_set(GIT_ERROR_INVALID, "invalid quoted line");
1048
1061
  return -1;
1049
1062
  }
1063
+
1064
+ int git_str_puts_escaped(
1065
+ git_str *buf,
1066
+ const char *string,
1067
+ const char *esc_chars,
1068
+ const char *esc_with)
1069
+ {
1070
+ const char *scan;
1071
+ size_t total = 0, esc_len = strlen(esc_with), count, alloclen;
1072
+
1073
+ if (!string)
1074
+ return 0;
1075
+
1076
+ for (scan = string; *scan; ) {
1077
+ /* count run of non-escaped characters */
1078
+ count = strcspn(scan, esc_chars);
1079
+ total += count;
1080
+ scan += count;
1081
+ /* count run of escaped characters */
1082
+ count = strspn(scan, esc_chars);
1083
+ total += count * (esc_len + 1);
1084
+ scan += count;
1085
+ }
1086
+
1087
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, total, 1);
1088
+ if (git_str_grow_by(buf, alloclen) < 0)
1089
+ return -1;
1090
+
1091
+ for (scan = string; *scan; ) {
1092
+ count = strcspn(scan, esc_chars);
1093
+
1094
+ memmove(buf->ptr + buf->size, scan, count);
1095
+ scan += count;
1096
+ buf->size += count;
1097
+
1098
+ for (count = strspn(scan, esc_chars); count > 0; --count) {
1099
+ /* copy escape sequence */
1100
+ memmove(buf->ptr + buf->size, esc_with, esc_len);
1101
+ buf->size += esc_len;
1102
+ /* copy character to be escaped */
1103
+ buf->ptr[buf->size] = *scan;
1104
+ buf->size++;
1105
+ scan++;
1106
+ }
1107
+ }
1108
+
1109
+ buf->ptr[buf->size] = '\0';
1110
+
1111
+ return 0;
1112
+ }
1113
+
1114
+ void git_str_unescape(git_str *buf)
1115
+ {
1116
+ buf->size = git__unescape(buf->ptr);
1117
+ }
1118
+
1119
+ int git_str_crlf_to_lf(git_str *tgt, const git_str *src)
1120
+ {
1121
+ const char *scan = src->ptr;
1122
+ const char *scan_end = src->ptr + src->size;
1123
+ const char *next = memchr(scan, '\r', src->size);
1124
+ size_t new_size;
1125
+ char *out;
1126
+
1127
+ GIT_ASSERT(tgt != src);
1128
+
1129
+ if (!next)
1130
+ return git_str_set(tgt, src->ptr, src->size);
1131
+
1132
+ /* reduce reallocs while in the loop */
1133
+ GIT_ERROR_CHECK_ALLOC_ADD(&new_size, src->size, 1);
1134
+ if (git_str_grow(tgt, new_size) < 0)
1135
+ return -1;
1136
+
1137
+ out = tgt->ptr;
1138
+ tgt->size = 0;
1139
+
1140
+ /* Find the next \r and copy whole chunk up to there to tgt */
1141
+ for (; next; scan = next + 1, next = memchr(scan, '\r', scan_end - scan)) {
1142
+ if (next > scan) {
1143
+ size_t copylen = (size_t)(next - scan);
1144
+ memcpy(out, scan, copylen);
1145
+ out += copylen;
1146
+ }
1147
+
1148
+ /* Do not drop \r unless it is followed by \n */
1149
+ if (next + 1 == scan_end || next[1] != '\n')
1150
+ *out++ = '\r';
1151
+ }
1152
+
1153
+ /* Copy remaining input into dest */
1154
+ if (scan < scan_end) {
1155
+ size_t remaining = (size_t)(scan_end - scan);
1156
+ memcpy(out, scan, remaining);
1157
+ out += remaining;
1158
+ }
1159
+
1160
+ tgt->size = (size_t)(out - tgt->ptr);
1161
+ tgt->ptr[tgt->size] = '\0';
1162
+
1163
+ return 0;
1164
+ }
1165
+
1166
+ int git_str_lf_to_crlf(git_str *tgt, const git_str *src)
1167
+ {
1168
+ const char *start = src->ptr;
1169
+ const char *end = start + src->size;
1170
+ const char *scan = start;
1171
+ const char *next = memchr(scan, '\n', src->size);
1172
+ size_t alloclen;
1173
+
1174
+ GIT_ASSERT(tgt != src);
1175
+
1176
+ if (!next)
1177
+ return git_str_set(tgt, src->ptr, src->size);
1178
+
1179
+ /* attempt to reduce reallocs while in the loop */
1180
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, src->size, src->size >> 4);
1181
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, alloclen, 1);
1182
+ if (git_str_grow(tgt, alloclen) < 0)
1183
+ return -1;
1184
+ tgt->size = 0;
1185
+
1186
+ for (; next; scan = next + 1, next = memchr(scan, '\n', end - scan)) {
1187
+ size_t copylen = next - scan;
1188
+
1189
+ /* if we find mixed line endings, carry on */
1190
+ if (copylen && next[-1] == '\r')
1191
+ copylen--;
1192
+
1193
+ GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, copylen, 3);
1194
+ if (git_str_grow_by(tgt, alloclen) < 0)
1195
+ return -1;
1196
+
1197
+ if (copylen) {
1198
+ memcpy(tgt->ptr + tgt->size, scan, copylen);
1199
+ tgt->size += copylen;
1200
+ }
1201
+
1202
+ tgt->ptr[tgt->size++] = '\r';
1203
+ tgt->ptr[tgt->size++] = '\n';
1204
+ }
1205
+
1206
+ tgt->ptr[tgt->size] = '\0';
1207
+ return git_str_put(tgt, scan, end - scan);
1208
+ }
1209
+
1210
+ int git_str_common_prefix(git_str *buf, char *const *const strings, size_t count)
1211
+ {
1212
+ size_t i;
1213
+ const char *str, *pfx;
1214
+
1215
+ git_str_clear(buf);
1216
+
1217
+ if (!strings || !count)
1218
+ return 0;
1219
+
1220
+ /* initialize common prefix to first string */
1221
+ if (git_str_sets(buf, strings[0]) < 0)
1222
+ return -1;
1223
+
1224
+ /* go through the rest of the strings, truncating to shared prefix */
1225
+ for (i = 1; i < count; ++i) {
1226
+
1227
+ for (str = strings[i], pfx = buf->ptr;
1228
+ *str && *str == *pfx;
1229
+ str++, pfx++)
1230
+ /* scanning */;
1231
+
1232
+ git_str_truncate(buf, pfx - buf->ptr);
1233
+
1234
+ if (!buf->size)
1235
+ break;
1236
+ }
1237
+
1238
+ return 0;
1239
+ }
1240
+
1241
+ int git_str_is_binary(const git_str *buf)
1242
+ {
1243
+ const char *scan = buf->ptr, *end = buf->ptr + buf->size;
1244
+ git_str_bom_t bom;
1245
+ int printable = 0, nonprintable = 0;
1246
+
1247
+ scan += git_str_detect_bom(&bom, buf);
1248
+
1249
+ if (bom > GIT_STR_BOM_UTF8)
1250
+ return 1;
1251
+
1252
+ while (scan < end) {
1253
+ unsigned char c = *scan++;
1254
+
1255
+ /* Printable characters are those above SPACE (0x1F) excluding DEL,
1256
+ * and including BS, ESC and FF.
1257
+ */
1258
+ if ((c > 0x1F && c != 127) || c == '\b' || c == '\033' || c == '\014')
1259
+ printable++;
1260
+ else if (c == '\0')
1261
+ return true;
1262
+ else if (!git__isspace(c))
1263
+ nonprintable++;
1264
+ }
1265
+
1266
+ return ((printable >> 7) < nonprintable);
1267
+ }
1268
+
1269
+ int git_str_contains_nul(const git_str *buf)
1270
+ {
1271
+ return (memchr(buf->ptr, '\0', buf->size) != NULL);
1272
+ }
1273
+
1274
+ int git_str_detect_bom(git_str_bom_t *bom, const git_str *buf)
1275
+ {
1276
+ const char *ptr;
1277
+ size_t len;
1278
+
1279
+ *bom = GIT_STR_BOM_NONE;
1280
+ /* need at least 2 bytes to look for any BOM */
1281
+ if (buf->size < 2)
1282
+ return 0;
1283
+
1284
+ ptr = buf->ptr;
1285
+ len = buf->size;
1286
+
1287
+ switch (*ptr++) {
1288
+ case 0:
1289
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == '\xFE' && ptr[2] == '\xFF') {
1290
+ *bom = GIT_STR_BOM_UTF32_BE;
1291
+ return 4;
1292
+ }
1293
+ break;
1294
+ case '\xEF':
1295
+ if (len >= 3 && ptr[0] == '\xBB' && ptr[1] == '\xBF') {
1296
+ *bom = GIT_STR_BOM_UTF8;
1297
+ return 3;
1298
+ }
1299
+ break;
1300
+ case '\xFE':
1301
+ if (*ptr == '\xFF') {
1302
+ *bom = GIT_STR_BOM_UTF16_BE;
1303
+ return 2;
1304
+ }
1305
+ break;
1306
+ case '\xFF':
1307
+ if (*ptr != '\xFE')
1308
+ break;
1309
+ if (len >= 4 && ptr[1] == 0 && ptr[2] == 0) {
1310
+ *bom = GIT_STR_BOM_UTF32_LE;
1311
+ return 4;
1312
+ } else {
1313
+ *bom = GIT_STR_BOM_UTF16_LE;
1314
+ return 2;
1315
+ }
1316
+ break;
1317
+ default:
1318
+ break;
1319
+ }
1320
+
1321
+ return 0;
1322
+ }
1323
+
1324
+ bool git_str_gather_text_stats(
1325
+ git_str_text_stats *stats, const git_str *buf, bool skip_bom)
1326
+ {
1327
+ const char *scan = buf->ptr, *end = buf->ptr + buf->size;
1328
+ int skip;
1329
+
1330
+ memset(stats, 0, sizeof(*stats));
1331
+
1332
+ /* BOM detection */
1333
+ skip = git_str_detect_bom(&stats->bom, buf);
1334
+ if (skip_bom)
1335
+ scan += skip;
1336
+
1337
+ /* Ignore EOF character */
1338
+ if (buf->size > 0 && end[-1] == '\032')
1339
+ end--;
1340
+
1341
+ /* Counting loop */
1342
+ while (scan < end) {
1343
+ unsigned char c = *scan++;
1344
+
1345
+ if (c > 0x1F && c != 0x7F)
1346
+ stats->printable++;
1347
+ else switch (c) {
1348
+ case '\0':
1349
+ stats->nul++;
1350
+ stats->nonprintable++;
1351
+ break;
1352
+ case '\n':
1353
+ stats->lf++;
1354
+ break;
1355
+ case '\r':
1356
+ stats->cr++;
1357
+ if (scan < end && *scan == '\n')
1358
+ stats->crlf++;
1359
+ break;
1360
+ case '\t': case '\f': case '\v': case '\b': case 0x1b: /*ESC*/
1361
+ stats->printable++;
1362
+ break;
1363
+ default:
1364
+ stats->nonprintable++;
1365
+ break;
1366
+ }
1367
+ }
1368
+
1369
+ /* Treat files with a bare CR as binary */
1370
+ return (stats->cr != stats->crlf || stats->nul > 0 ||
1371
+ ((stats->printable >> 7) < stats->nonprintable));
1372
+ }