rugged 0.27.9 → 0.27.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (420) 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 +98 -54
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  8. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  9. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  10. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  11. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  12. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  13. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  14. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  15. data/vendor/libgit2/cmake/Modules/FindmbedTLS.cmake +93 -0
  16. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  17. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  18. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  19. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  20. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +2 -0
  21. data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2.h +5 -0
  82. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  83. data/vendor/libgit2/include/git2/apply.h +149 -0
  84. data/vendor/libgit2/include/git2/attr.h +38 -20
  85. data/vendor/libgit2/include/git2/blame.h +42 -25
  86. data/vendor/libgit2/include/git2/blob.h +45 -13
  87. data/vendor/libgit2/include/git2/branch.h +1 -1
  88. data/vendor/libgit2/include/git2/buffer.h +22 -16
  89. data/vendor/libgit2/include/git2/cert.h +135 -0
  90. data/vendor/libgit2/include/git2/checkout.h +65 -32
  91. data/vendor/libgit2/include/git2/cherrypick.h +9 -7
  92. data/vendor/libgit2/include/git2/clone.h +12 -10
  93. data/vendor/libgit2/include/git2/commit.h +53 -3
  94. data/vendor/libgit2/include/git2/common.h +60 -8
  95. data/vendor/libgit2/include/git2/config.h +30 -19
  96. data/vendor/libgit2/include/git2/cred.h +308 -0
  97. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  98. data/vendor/libgit2/include/git2/describe.h +32 -9
  99. data/vendor/libgit2/include/git2/diff.h +208 -156
  100. data/vendor/libgit2/include/git2/errors.h +54 -46
  101. data/vendor/libgit2/include/git2/filter.h +8 -0
  102. data/vendor/libgit2/include/git2/ignore.h +2 -2
  103. data/vendor/libgit2/include/git2/index.h +74 -52
  104. data/vendor/libgit2/include/git2/indexer.h +76 -6
  105. data/vendor/libgit2/include/git2/mailmap.h +115 -0
  106. data/vendor/libgit2/include/git2/merge.h +35 -18
  107. data/vendor/libgit2/include/git2/net.h +0 -5
  108. data/vendor/libgit2/include/git2/notes.h +1 -1
  109. data/vendor/libgit2/include/git2/object.h +17 -29
  110. data/vendor/libgit2/include/git2/odb.h +12 -11
  111. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  112. data/vendor/libgit2/include/git2/oid.h +2 -2
  113. data/vendor/libgit2/include/git2/pack.h +14 -3
  114. data/vendor/libgit2/include/git2/proxy.h +14 -8
  115. data/vendor/libgit2/include/git2/rebase.h +53 -6
  116. data/vendor/libgit2/include/git2/refs.h +33 -15
  117. data/vendor/libgit2/include/git2/refspec.h +17 -0
  118. data/vendor/libgit2/include/git2/remote.h +123 -24
  119. data/vendor/libgit2/include/git2/repository.h +76 -39
  120. data/vendor/libgit2/include/git2/revert.h +6 -4
  121. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  122. data/vendor/libgit2/include/git2/signature.h +2 -2
  123. data/vendor/libgit2/include/git2/stash.h +15 -12
  124. data/vendor/libgit2/include/git2/status.h +33 -20
  125. data/vendor/libgit2/include/git2/submodule.h +30 -12
  126. data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
  127. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  128. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  129. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  130. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  131. data/vendor/libgit2/include/git2/sys/index.h +3 -0
  132. data/vendor/libgit2/include/git2/sys/mempack.h +35 -35
  133. data/vendor/libgit2/include/git2/sys/merge.h +9 -4
  134. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  135. data/vendor/libgit2/include/git2/sys/path.h +64 -0
  136. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  137. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  138. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  139. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  140. data/vendor/libgit2/include/git2/tag.h +13 -4
  141. data/vendor/libgit2/include/git2/trace.h +2 -2
  142. data/vendor/libgit2/include/git2/transaction.h +1 -0
  143. data/vendor/libgit2/include/git2/transport.h +11 -311
  144. data/vendor/libgit2/include/git2/tree.h +4 -4
  145. data/vendor/libgit2/include/git2/types.h +33 -111
  146. data/vendor/libgit2/include/git2/version.h +4 -4
  147. data/vendor/libgit2/include/git2/worktree.h +48 -13
  148. data/vendor/libgit2/src/CMakeLists.txt +96 -164
  149. data/vendor/libgit2/src/alloc.c +43 -0
  150. data/vendor/libgit2/src/alloc.h +40 -0
  151. data/vendor/libgit2/src/allocators/stdalloc.c +119 -0
  152. data/vendor/libgit2/src/{streams/curl.h → allocators/stdalloc.h} +5 -5
  153. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  154. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  155. data/vendor/libgit2/src/annotated_commit.c +15 -8
  156. data/vendor/libgit2/src/apply.c +537 -31
  157. data/vendor/libgit2/src/apply.h +3 -1
  158. data/vendor/libgit2/src/array.h +2 -2
  159. data/vendor/libgit2/src/attr.c +81 -75
  160. data/vendor/libgit2/src/attr_file.c +207 -121
  161. data/vendor/libgit2/src/attr_file.h +9 -9
  162. data/vendor/libgit2/src/attrcache.c +51 -53
  163. data/vendor/libgit2/src/attrcache.h +2 -1
  164. data/vendor/libgit2/src/blame.c +47 -20
  165. data/vendor/libgit2/src/blame.h +2 -1
  166. data/vendor/libgit2/src/blame_git.c +37 -20
  167. data/vendor/libgit2/src/blob.c +128 -42
  168. data/vendor/libgit2/src/blob.h +19 -2
  169. data/vendor/libgit2/src/branch.c +67 -43
  170. data/vendor/libgit2/src/buf_text.c +7 -6
  171. data/vendor/libgit2/src/buffer.c +69 -57
  172. data/vendor/libgit2/src/buffer.h +1 -1
  173. data/vendor/libgit2/src/cache.c +38 -45
  174. data/vendor/libgit2/src/cache.h +3 -3
  175. data/vendor/libgit2/src/cc-compat.h +20 -3
  176. data/vendor/libgit2/src/checkout.c +109 -90
  177. data/vendor/libgit2/src/cherrypick.c +15 -9
  178. data/vendor/libgit2/src/clone.c +49 -27
  179. data/vendor/libgit2/src/clone.h +4 -0
  180. data/vendor/libgit2/src/commit.c +117 -49
  181. data/vendor/libgit2/src/commit.h +7 -0
  182. data/vendor/libgit2/src/commit_list.c +30 -78
  183. data/vendor/libgit2/src/commit_list.h +2 -2
  184. data/vendor/libgit2/src/common.h +27 -91
  185. data/vendor/libgit2/src/config.c +194 -176
  186. data/vendor/libgit2/src/config.h +8 -20
  187. data/vendor/libgit2/src/config_backend.h +96 -0
  188. data/vendor/libgit2/src/config_cache.c +41 -35
  189. data/vendor/libgit2/src/config_entries.c +229 -0
  190. data/vendor/libgit2/src/config_entries.h +24 -0
  191. data/vendor/libgit2/src/config_file.c +439 -753
  192. data/vendor/libgit2/src/config_mem.c +220 -0
  193. data/vendor/libgit2/src/config_parse.c +114 -63
  194. data/vendor/libgit2/src/config_parse.h +17 -16
  195. data/vendor/libgit2/src/config_snapshot.c +206 -0
  196. data/vendor/libgit2/src/crlf.c +219 -190
  197. data/vendor/libgit2/src/delta.c +25 -18
  198. data/vendor/libgit2/src/describe.c +42 -41
  199. data/vendor/libgit2/src/diff.c +53 -68
  200. data/vendor/libgit2/src/diff.h +2 -1
  201. data/vendor/libgit2/src/diff_driver.c +47 -49
  202. data/vendor/libgit2/src/diff_file.c +19 -17
  203. data/vendor/libgit2/src/diff_file.h +1 -1
  204. data/vendor/libgit2/src/diff_generate.c +162 -106
  205. data/vendor/libgit2/src/diff_generate.h +3 -3
  206. data/vendor/libgit2/src/diff_parse.c +4 -4
  207. data/vendor/libgit2/src/diff_print.c +42 -30
  208. data/vendor/libgit2/src/diff_stats.c +22 -7
  209. data/vendor/libgit2/src/diff_tform.c +16 -16
  210. data/vendor/libgit2/src/diff_xdiff.c +15 -3
  211. data/vendor/libgit2/src/errors.c +51 -39
  212. data/vendor/libgit2/src/errors.h +81 -0
  213. data/vendor/libgit2/src/features.h.in +11 -3
  214. data/vendor/libgit2/src/fetch.c +10 -5
  215. data/vendor/libgit2/src/fetchhead.c +17 -17
  216. data/vendor/libgit2/src/filebuf.c +32 -36
  217. data/vendor/libgit2/src/filebuf.h +2 -2
  218. data/vendor/libgit2/src/filter.c +46 -38
  219. data/vendor/libgit2/src/filter.h +0 -10
  220. data/vendor/libgit2/src/{fileops.c → futils.c} +80 -73
  221. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  222. data/vendor/libgit2/src/global.c +48 -63
  223. data/vendor/libgit2/src/global.h +0 -2
  224. data/vendor/libgit2/src/hash.c +61 -0
  225. data/vendor/libgit2/src/hash.h +20 -19
  226. data/vendor/libgit2/src/hash/sha1.h +38 -0
  227. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  228. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  229. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  230. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  231. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  232. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  233. data/vendor/libgit2/src/hash/sha1/mbedtls.c +46 -0
  234. data/vendor/libgit2/src/hash/sha1/mbedtls.h +19 -0
  235. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  236. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  237. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  238. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  239. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  240. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
  241. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  242. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  243. data/vendor/libgit2/src/hashsig.c +5 -5
  244. data/vendor/libgit2/src/idxmap.c +107 -61
  245. data/vendor/libgit2/src/idxmap.h +153 -31
  246. data/vendor/libgit2/src/ignore.c +43 -47
  247. data/vendor/libgit2/src/index.c +337 -232
  248. data/vendor/libgit2/src/index.h +17 -1
  249. data/vendor/libgit2/src/indexer.c +346 -175
  250. data/vendor/libgit2/src/integer.h +71 -26
  251. data/vendor/libgit2/src/iterator.c +142 -70
  252. data/vendor/libgit2/src/iterator.h +15 -0
  253. data/vendor/libgit2/src/khash.h +3 -1
  254. data/vendor/libgit2/src/mailmap.c +485 -0
  255. data/vendor/libgit2/src/mailmap.h +35 -0
  256. data/vendor/libgit2/src/map.h +1 -1
  257. data/vendor/libgit2/src/merge.c +144 -100
  258. data/vendor/libgit2/src/merge_driver.c +11 -11
  259. data/vendor/libgit2/src/merge_file.c +2 -2
  260. data/vendor/libgit2/src/mwindow.c +24 -29
  261. data/vendor/libgit2/src/mwindow.h +4 -4
  262. data/vendor/libgit2/src/net.c +184 -0
  263. data/vendor/libgit2/src/net.h +36 -0
  264. data/vendor/libgit2/src/netops.c +55 -156
  265. data/vendor/libgit2/src/netops.h +3 -23
  266. data/vendor/libgit2/src/notes.c +16 -11
  267. data/vendor/libgit2/src/object.c +120 -69
  268. data/vendor/libgit2/src/object.h +22 -9
  269. data/vendor/libgit2/src/object_api.c +8 -8
  270. data/vendor/libgit2/src/odb.c +116 -93
  271. data/vendor/libgit2/src/odb.h +8 -7
  272. data/vendor/libgit2/src/odb_loose.c +62 -55
  273. data/vendor/libgit2/src/odb_mempack.c +21 -34
  274. data/vendor/libgit2/src/odb_pack.c +18 -14
  275. data/vendor/libgit2/src/offmap.c +53 -35
  276. data/vendor/libgit2/src/offmap.h +108 -21
  277. data/vendor/libgit2/src/oid.c +12 -7
  278. data/vendor/libgit2/src/oidmap.c +49 -47
  279. data/vendor/libgit2/src/oidmap.h +101 -24
  280. data/vendor/libgit2/src/pack-objects.c +88 -87
  281. data/vendor/libgit2/src/pack-objects.h +2 -8
  282. data/vendor/libgit2/src/pack.c +99 -101
  283. data/vendor/libgit2/src/pack.h +17 -19
  284. data/vendor/libgit2/src/parse.c +10 -0
  285. data/vendor/libgit2/src/parse.h +3 -3
  286. data/vendor/libgit2/src/patch.c +4 -4
  287. data/vendor/libgit2/src/patch_generate.c +20 -20
  288. data/vendor/libgit2/src/patch_parse.c +151 -63
  289. data/vendor/libgit2/src/path.c +169 -125
  290. data/vendor/libgit2/src/path.h +3 -71
  291. data/vendor/libgit2/src/pathspec.c +19 -19
  292. data/vendor/libgit2/src/pool.c +26 -22
  293. data/vendor/libgit2/src/pool.h +7 -7
  294. data/vendor/libgit2/src/posix.c +10 -10
  295. data/vendor/libgit2/src/posix.h +12 -1
  296. data/vendor/libgit2/src/proxy.c +8 -3
  297. data/vendor/libgit2/src/push.c +37 -31
  298. data/vendor/libgit2/src/push.h +2 -1
  299. data/vendor/libgit2/src/reader.c +265 -0
  300. data/vendor/libgit2/src/reader.h +107 -0
  301. data/vendor/libgit2/src/rebase.c +115 -59
  302. data/vendor/libgit2/src/refdb.c +15 -3
  303. data/vendor/libgit2/src/refdb_fs.c +381 -254
  304. data/vendor/libgit2/src/reflog.c +13 -15
  305. data/vendor/libgit2/src/refs.c +118 -88
  306. data/vendor/libgit2/src/refs.h +5 -3
  307. data/vendor/libgit2/src/refspec.c +56 -37
  308. data/vendor/libgit2/src/refspec.h +1 -1
  309. data/vendor/libgit2/src/regexp.c +221 -0
  310. data/vendor/libgit2/src/regexp.h +97 -0
  311. data/vendor/libgit2/src/remote.c +266 -215
  312. data/vendor/libgit2/src/remote.h +11 -2
  313. data/vendor/libgit2/src/repository.c +280 -225
  314. data/vendor/libgit2/src/repository.h +52 -40
  315. data/vendor/libgit2/src/reset.c +8 -8
  316. data/vendor/libgit2/src/revert.c +14 -9
  317. data/vendor/libgit2/src/revparse.c +47 -48
  318. data/vendor/libgit2/src/revwalk.c +120 -57
  319. data/vendor/libgit2/src/revwalk.h +22 -1
  320. data/vendor/libgit2/src/settings.c +47 -10
  321. data/vendor/libgit2/src/signature.c +11 -11
  322. data/vendor/libgit2/src/sortedcache.c +22 -36
  323. data/vendor/libgit2/src/sortedcache.h +1 -1
  324. data/vendor/libgit2/src/stash.c +125 -99
  325. data/vendor/libgit2/src/status.c +28 -22
  326. data/vendor/libgit2/src/stream.h +17 -2
  327. data/vendor/libgit2/src/streams/mbedtls.c +483 -0
  328. data/vendor/libgit2/src/streams/mbedtls.h +23 -0
  329. data/vendor/libgit2/src/streams/openssl.c +224 -114
  330. data/vendor/libgit2/src/streams/openssl.h +4 -108
  331. data/vendor/libgit2/src/streams/registry.c +118 -0
  332. data/vendor/libgit2/src/streams/registry.h +19 -0
  333. data/vendor/libgit2/src/streams/socket.c +55 -30
  334. data/vendor/libgit2/src/streams/stransport.c +57 -32
  335. data/vendor/libgit2/src/streams/stransport.h +5 -0
  336. data/vendor/libgit2/src/streams/tls.c +50 -19
  337. data/vendor/libgit2/src/streams/tls.h +12 -4
  338. data/vendor/libgit2/src/strmap.c +47 -74
  339. data/vendor/libgit2/src/strmap.h +108 -33
  340. data/vendor/libgit2/src/submodule.c +272 -216
  341. data/vendor/libgit2/src/submodule.h +1 -1
  342. data/vendor/libgit2/src/sysdir.c +29 -19
  343. data/vendor/libgit2/src/tag.c +41 -28
  344. data/vendor/libgit2/src/tag.h +2 -1
  345. data/vendor/libgit2/src/trace.c +2 -2
  346. data/vendor/libgit2/src/trace.h +3 -3
  347. data/vendor/libgit2/src/trailer.c +52 -38
  348. data/vendor/libgit2/src/transaction.c +30 -29
  349. data/vendor/libgit2/src/transport.c +5 -5
  350. data/vendor/libgit2/src/transports/auth.c +15 -11
  351. data/vendor/libgit2/src/transports/auth.h +10 -3
  352. data/vendor/libgit2/src/transports/auth_negotiate.c +33 -18
  353. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  354. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  355. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  356. data/vendor/libgit2/src/transports/cred.c +24 -24
  357. data/vendor/libgit2/src/transports/git.c +26 -31
  358. data/vendor/libgit2/src/transports/http.c +881 -348
  359. data/vendor/libgit2/src/transports/http.h +2 -0
  360. data/vendor/libgit2/src/transports/local.c +35 -35
  361. data/vendor/libgit2/src/transports/smart.c +70 -47
  362. data/vendor/libgit2/src/transports/smart.h +3 -4
  363. data/vendor/libgit2/src/transports/smart_pkt.c +43 -40
  364. data/vendor/libgit2/src/transports/smart_protocol.c +96 -116
  365. data/vendor/libgit2/src/transports/ssh.c +77 -66
  366. data/vendor/libgit2/src/transports/winhttp.c +318 -314
  367. data/vendor/libgit2/src/tree-cache.c +19 -12
  368. data/vendor/libgit2/src/tree.c +103 -142
  369. data/vendor/libgit2/src/tree.h +1 -12
  370. data/vendor/libgit2/src/unix/map.c +3 -3
  371. data/vendor/libgit2/src/unix/posix.h +1 -11
  372. data/vendor/libgit2/src/userdiff.h +3 -1
  373. data/vendor/libgit2/src/util.c +70 -56
  374. data/vendor/libgit2/src/util.h +28 -156
  375. data/vendor/libgit2/src/vector.c +4 -4
  376. data/vendor/libgit2/src/wildmatch.c +320 -0
  377. data/vendor/libgit2/src/wildmatch.h +23 -0
  378. data/vendor/libgit2/src/win32/dir.c +3 -3
  379. data/vendor/libgit2/src/win32/findfile.c +3 -3
  380. data/vendor/libgit2/src/win32/map.c +9 -11
  381. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  382. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  383. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  384. data/vendor/libgit2/src/win32/posix.h +1 -4
  385. data/vendor/libgit2/src/win32/posix_w32.c +70 -45
  386. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  387. data/vendor/libgit2/src/win32/thread.c +5 -10
  388. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  389. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  390. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +3 -2
  391. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +26 -75
  392. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  393. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  394. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  395. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  396. data/vendor/libgit2/src/worktree.c +95 -60
  397. data/vendor/libgit2/src/worktree.h +2 -0
  398. data/vendor/libgit2/src/xdiff/xdiffi.c +7 -5
  399. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  400. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  401. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  402. data/vendor/libgit2/src/zstream.c +4 -4
  403. metadata +122 -33
  404. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  405. data/vendor/libgit2/deps/regex/config.h +0 -7
  406. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  407. data/vendor/libgit2/deps/regex/regex.c +0 -92
  408. data/vendor/libgit2/deps/regex/regex.h +0 -582
  409. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  410. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  411. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  412. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  413. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  414. data/vendor/libgit2/libgit2.pc.in +0 -13
  415. data/vendor/libgit2/src/config_file.h +0 -73
  416. data/vendor/libgit2/src/fnmatch.c +0 -248
  417. data/vendor/libgit2/src/fnmatch.h +0 -48
  418. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  419. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  420. data/vendor/libgit2/src/streams/curl.c +0 -385
@@ -8,50 +8,51 @@
8
8
  #define INCLUDE_config_parse_h__
9
9
 
10
10
  #include "common.h"
11
+
11
12
  #include "array.h"
13
+ #include "futils.h"
12
14
  #include "oid.h"
13
15
  #include "parse.h"
14
16
 
15
- static const char *git_config_escapes = "ntb\"\\";
16
- static const char *git_config_escaped = "\n\t\b\"\\";
17
-
18
- typedef struct config_file {
19
- git_oid checksum;
20
- char *path;
21
- git_array_t(struct config_file) includes;
22
- } git_config_file;
17
+ extern const char *git_config_escapes;
18
+ extern const char *git_config_escaped;
23
19
 
24
20
  typedef struct {
25
- struct config_file *file;
21
+ const char *path;
26
22
  git_parse_ctx ctx;
27
23
  } git_config_parser;
28
24
 
25
+ #define GIT_CONFIG_PARSER_INIT { NULL, GIT_PARSE_CTX_INIT }
26
+
29
27
  typedef int (*git_config_parser_section_cb)(
30
28
  git_config_parser *parser,
31
29
  const char *current_section,
32
30
  const char *line,
33
31
  size_t line_len,
34
- void *data);
32
+ void *payload);
35
33
 
36
34
  typedef int (*git_config_parser_variable_cb)(
37
35
  git_config_parser *parser,
38
36
  const char *current_section,
39
- char *var_name,
40
- char *var_value,
37
+ const char *var_name,
38
+ const char *var_value,
41
39
  const char *line,
42
40
  size_t line_len,
43
- void *data);
41
+ void *payload);
44
42
 
45
43
  typedef int (*git_config_parser_comment_cb)(
46
44
  git_config_parser *parser,
47
45
  const char *line,
48
46
  size_t line_len,
49
- void *data);
47
+ void *payload);
50
48
 
51
49
  typedef int (*git_config_parser_eof_cb)(
52
50
  git_config_parser *parser,
53
51
  const char *current_section,
54
- void *data);
52
+ void *payload);
53
+
54
+ int git_config_parser_init(git_config_parser *out, const char *path, const char *data, size_t datalen);
55
+ void git_config_parser_dispose(git_config_parser *parser);
55
56
 
56
57
  int git_config_parse(
57
58
  git_config_parser *parser,
@@ -59,6 +60,6 @@ int git_config_parse(
59
60
  git_config_parser_variable_cb on_variable,
60
61
  git_config_parser_comment_cb on_comment,
61
62
  git_config_parser_eof_cb on_eof,
62
- void *data);
63
+ void *payload);
63
64
 
64
65
  #endif
@@ -0,0 +1,206 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "config.h"
9
+
10
+ #include "config_entries.h"
11
+
12
+ typedef struct {
13
+ git_config_backend parent;
14
+ git_mutex values_mutex;
15
+ git_config_entries *entries;
16
+ git_config_backend *source;
17
+ } config_snapshot_backend;
18
+
19
+ static int config_error_readonly(void)
20
+ {
21
+ git_error_set(GIT_ERROR_CONFIG, "this backend is read-only");
22
+ return -1;
23
+ }
24
+
25
+ static int config_snapshot_iterator(
26
+ git_config_iterator **iter,
27
+ struct git_config_backend *backend)
28
+ {
29
+ config_snapshot_backend *b = GIT_CONTAINER_OF(backend, config_snapshot_backend, parent);
30
+ git_config_entries *entries = NULL;
31
+ int error;
32
+
33
+ if ((error = git_config_entries_dup(&entries, b->entries)) < 0 ||
34
+ (error = git_config_entries_iterator_new(iter, entries)) < 0)
35
+ goto out;
36
+
37
+ out:
38
+ /* Let iterator delete duplicated entries when it's done */
39
+ git_config_entries_free(entries);
40
+ return error;
41
+ }
42
+
43
+ /* release the map containing the entry as an equivalent to freeing it */
44
+ static void config_snapshot_entry_free(git_config_entry *entry)
45
+ {
46
+ git_config_entries *entries = (git_config_entries *) entry->payload;
47
+ git_config_entries_free(entries);
48
+ }
49
+
50
+ static int config_snapshot_get(git_config_backend *cfg, const char *key, git_config_entry **out)
51
+ {
52
+ config_snapshot_backend *b = GIT_CONTAINER_OF(cfg, config_snapshot_backend, parent);
53
+ git_config_entries *entries = NULL;
54
+ git_config_entry *entry;
55
+ int error = 0;
56
+
57
+ if (git_mutex_lock(&b->values_mutex) < 0) {
58
+ git_error_set(GIT_ERROR_OS, "failed to lock config backend");
59
+ return -1;
60
+ }
61
+
62
+ entries = b->entries;
63
+ git_config_entries_incref(entries);
64
+ git_mutex_unlock(&b->values_mutex);
65
+
66
+ if ((error = (git_config_entries_get(&entry, entries, key))) < 0) {
67
+ git_config_entries_free(entries);
68
+ return error;
69
+ }
70
+
71
+ entry->free = config_snapshot_entry_free;
72
+ entry->payload = entries;
73
+ *out = entry;
74
+
75
+ return 0;
76
+ }
77
+
78
+ static int config_snapshot_set(git_config_backend *cfg, const char *name, const char *value)
79
+ {
80
+ GIT_UNUSED(cfg);
81
+ GIT_UNUSED(name);
82
+ GIT_UNUSED(value);
83
+
84
+ return config_error_readonly();
85
+ }
86
+
87
+ static int config_snapshot_set_multivar(
88
+ git_config_backend *cfg, const char *name, const char *regexp, const char *value)
89
+ {
90
+ GIT_UNUSED(cfg);
91
+ GIT_UNUSED(name);
92
+ GIT_UNUSED(regexp);
93
+ GIT_UNUSED(value);
94
+
95
+ return config_error_readonly();
96
+ }
97
+
98
+ static int config_snapshot_delete_multivar(git_config_backend *cfg, const char *name, const char *regexp)
99
+ {
100
+ GIT_UNUSED(cfg);
101
+ GIT_UNUSED(name);
102
+ GIT_UNUSED(regexp);
103
+
104
+ return config_error_readonly();
105
+ }
106
+
107
+ static int config_snapshot_delete(git_config_backend *cfg, const char *name)
108
+ {
109
+ GIT_UNUSED(cfg);
110
+ GIT_UNUSED(name);
111
+
112
+ return config_error_readonly();
113
+ }
114
+
115
+ static int config_snapshot_lock(git_config_backend *_cfg)
116
+ {
117
+ GIT_UNUSED(_cfg);
118
+
119
+ return config_error_readonly();
120
+ }
121
+
122
+ static int config_snapshot_unlock(git_config_backend *_cfg, int success)
123
+ {
124
+ GIT_UNUSED(_cfg);
125
+ GIT_UNUSED(success);
126
+
127
+ return config_error_readonly();
128
+ }
129
+
130
+ static void config_snapshot_free(git_config_backend *_backend)
131
+ {
132
+ config_snapshot_backend *backend = GIT_CONTAINER_OF(_backend, config_snapshot_backend, parent);
133
+
134
+ if (backend == NULL)
135
+ return;
136
+
137
+ git_config_entries_free(backend->entries);
138
+ git_mutex_free(&backend->values_mutex);
139
+ git__free(backend);
140
+ }
141
+
142
+ static int config_snapshot_open(git_config_backend *cfg, git_config_level_t level, const git_repository *repo)
143
+ {
144
+ config_snapshot_backend *b = GIT_CONTAINER_OF(cfg, config_snapshot_backend, parent);
145
+ git_config_entries *entries = NULL;
146
+ git_config_iterator *it = NULL;
147
+ git_config_entry *entry;
148
+ int error;
149
+
150
+ /* We're just copying data, don't care about the level or repo*/
151
+ GIT_UNUSED(level);
152
+ GIT_UNUSED(repo);
153
+
154
+ if ((error = git_config_entries_new(&entries)) < 0 ||
155
+ (error = b->source->iterator(&it, b->source)) < 0)
156
+ goto out;
157
+
158
+ while ((error = git_config_next(&entry, it)) == 0)
159
+ if ((error = git_config_entries_dup_entry(entries, entry)) < 0)
160
+ goto out;
161
+
162
+ if (error < 0) {
163
+ if (error != GIT_ITEROVER)
164
+ goto out;
165
+ error = 0;
166
+ }
167
+
168
+ b->entries = entries;
169
+
170
+ out:
171
+ git_config_iterator_free(it);
172
+ if (error)
173
+ git_config_entries_free(entries);
174
+ return error;
175
+ }
176
+
177
+ int git_config_backend_snapshot(git_config_backend **out, git_config_backend *source)
178
+ {
179
+ config_snapshot_backend *backend;
180
+
181
+ backend = git__calloc(1, sizeof(config_snapshot_backend));
182
+ GIT_ERROR_CHECK_ALLOC(backend);
183
+
184
+ backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
185
+ git_mutex_init(&backend->values_mutex);
186
+
187
+ backend->source = source;
188
+
189
+ backend->parent.readonly = 1;
190
+ backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
191
+ backend->parent.open = config_snapshot_open;
192
+ backend->parent.get = config_snapshot_get;
193
+ backend->parent.set = config_snapshot_set;
194
+ backend->parent.set_multivar = config_snapshot_set_multivar;
195
+ backend->parent.snapshot = git_config_backend_snapshot;
196
+ backend->parent.del = config_snapshot_delete;
197
+ backend->parent.del_multivar = config_snapshot_delete_multivar;
198
+ backend->parent.iterator = config_snapshot_iterator;
199
+ backend->parent.lock = config_snapshot_lock;
200
+ backend->parent.unlock = config_snapshot_unlock;
201
+ backend->parent.free = config_snapshot_free;
202
+
203
+ *out = &backend->parent;
204
+
205
+ return 0;
206
+ }
@@ -12,71 +12,64 @@
12
12
  #include "git2/index.h"
13
13
  #include "git2/sys/filter.h"
14
14
 
15
- #include "fileops.h"
15
+ #include "futils.h"
16
16
  #include "hash.h"
17
17
  #include "filter.h"
18
18
  #include "buf_text.h"
19
19
  #include "repository.h"
20
20
 
21
+ typedef enum {
22
+ GIT_CRLF_UNDEFINED,
23
+ GIT_CRLF_BINARY,
24
+ GIT_CRLF_TEXT,
25
+ GIT_CRLF_TEXT_INPUT,
26
+ GIT_CRLF_TEXT_CRLF,
27
+ GIT_CRLF_AUTO,
28
+ GIT_CRLF_AUTO_INPUT,
29
+ GIT_CRLF_AUTO_CRLF,
30
+ } git_crlf_t;
31
+
21
32
  struct crlf_attrs {
22
- int crlf_action;
23
- int eol;
33
+ int attr_action; /* the .gitattributes setting */
34
+ int crlf_action; /* the core.autocrlf setting */
35
+
24
36
  int auto_crlf;
25
37
  int safe_crlf;
38
+ int core_eol;
26
39
  };
27
40
 
28
41
  struct crlf_filter {
29
42
  git_filter f;
30
43
  };
31
44
 
32
- static int check_crlf(const char *value)
45
+ static git_crlf_t check_crlf(const char *value)
33
46
  {
34
- if (GIT_ATTR_TRUE(value))
47
+ if (GIT_ATTR_IS_TRUE(value))
35
48
  return GIT_CRLF_TEXT;
36
-
37
- if (GIT_ATTR_FALSE(value))
49
+ else if (GIT_ATTR_IS_FALSE(value))
38
50
  return GIT_CRLF_BINARY;
39
-
40
- if (GIT_ATTR_UNSPECIFIED(value))
41
- return GIT_CRLF_GUESS;
42
-
43
- if (strcmp(value, "input") == 0)
44
- return GIT_CRLF_INPUT;
45
-
46
- if (strcmp(value, "auto") == 0)
51
+ else if (GIT_ATTR_IS_UNSPECIFIED(value))
52
+ ;
53
+ else if (strcmp(value, "input") == 0)
54
+ return GIT_CRLF_TEXT_INPUT;
55
+ else if (strcmp(value, "auto") == 0)
47
56
  return GIT_CRLF_AUTO;
48
57
 
49
- return GIT_CRLF_GUESS;
58
+ return GIT_CRLF_UNDEFINED;
50
59
  }
51
60
 
52
- static int check_eol(const char *value)
61
+ static git_configmap_value check_eol(const char *value)
53
62
  {
54
- if (GIT_ATTR_UNSPECIFIED(value))
55
- return GIT_EOL_UNSET;
56
-
57
- if (strcmp(value, "lf") == 0)
63
+ if (GIT_ATTR_IS_UNSPECIFIED(value))
64
+ ;
65
+ else if (strcmp(value, "lf") == 0)
58
66
  return GIT_EOL_LF;
59
-
60
- if (strcmp(value, "crlf") == 0)
67
+ else if (strcmp(value, "crlf") == 0)
61
68
  return GIT_EOL_CRLF;
62
69
 
63
70
  return GIT_EOL_UNSET;
64
71
  }
65
72
 
66
- static int crlf_input_action(struct crlf_attrs *ca)
67
- {
68
- if (ca->crlf_action == GIT_CRLF_BINARY)
69
- return GIT_CRLF_BINARY;
70
-
71
- if (ca->eol == GIT_EOL_LF)
72
- return GIT_CRLF_INPUT;
73
-
74
- if (ca->eol == GIT_EOL_CRLF)
75
- return GIT_CRLF_CRLF;
76
-
77
- return ca->crlf_action;
78
- }
79
-
80
73
  static int has_cr_in_index(const git_filter_source *src)
81
74
  {
82
75
  git_repository *repo = git_filter_source_repo(src);
@@ -85,14 +78,14 @@ static int has_cr_in_index(const git_filter_source *src)
85
78
  const git_index_entry *entry;
86
79
  git_blob *blob;
87
80
  const void *blobcontent;
88
- git_off_t blobsize;
81
+ git_object_size_t blobsize;
89
82
  bool found_cr;
90
83
 
91
84
  if (!path)
92
85
  return false;
93
86
 
94
87
  if (git_repository_index__weakptr(&index, repo) < 0) {
95
- giterr_clear();
88
+ git_error_clear();
96
89
  return false;
97
90
  }
98
91
 
@@ -119,146 +112,168 @@ static int has_cr_in_index(const git_filter_source *src)
119
112
  return found_cr;
120
113
  }
121
114
 
122
- static int crlf_apply_to_odb(
123
- struct crlf_attrs *ca,
124
- git_buf *to,
125
- const git_buf *from,
126
- const git_filter_source *src)
115
+ static int text_eol_is_crlf(struct crlf_attrs *ca)
127
116
  {
128
- /* Empty file? Nothing to do */
129
- if (!git_buf_len(from))
117
+ if (ca->auto_crlf == GIT_AUTO_CRLF_TRUE)
118
+ return 1;
119
+ else if (ca->auto_crlf == GIT_AUTO_CRLF_INPUT)
130
120
  return 0;
131
121
 
132
- /* Heuristics to see if we can skip the conversion.
133
- * Straight from Core Git.
134
- */
135
- if (ca->crlf_action == GIT_CRLF_AUTO || ca->crlf_action == GIT_CRLF_GUESS) {
136
- git_buf_text_stats stats;
122
+ if (ca->core_eol == GIT_EOL_CRLF)
123
+ return 1;
124
+ if (ca->core_eol == GIT_EOL_UNSET && GIT_EOL_NATIVE == GIT_EOL_CRLF)
125
+ return 1;
137
126
 
138
- /* Check heuristics for binary vs text - returns true if binary */
139
- if (git_buf_text_gather_stats(&stats, from, false))
140
- return GIT_PASSTHROUGH;
127
+ return 0;
128
+ }
141
129
 
142
- /* If there are no CR characters to filter out, then just pass */
143
- if (!stats.cr)
144
- return GIT_PASSTHROUGH;
130
+ static git_configmap_value output_eol(struct crlf_attrs *ca)
131
+ {
132
+ switch (ca->crlf_action) {
133
+ case GIT_CRLF_BINARY:
134
+ return GIT_EOL_UNSET;
135
+ case GIT_CRLF_TEXT_CRLF:
136
+ return GIT_EOL_CRLF;
137
+ case GIT_CRLF_TEXT_INPUT:
138
+ return GIT_EOL_LF;
139
+ case GIT_CRLF_UNDEFINED:
140
+ case GIT_CRLF_AUTO_CRLF:
141
+ return GIT_EOL_CRLF;
142
+ case GIT_CRLF_AUTO_INPUT:
143
+ return GIT_EOL_LF;
144
+ case GIT_CRLF_TEXT:
145
+ case GIT_CRLF_AUTO:
146
+ return text_eol_is_crlf(ca) ? GIT_EOL_CRLF : GIT_EOL_LF;
147
+ }
148
+
149
+ /* TODO: warn when available */
150
+ return ca->core_eol;
151
+ }
152
+
153
+ GIT_INLINE(int) check_safecrlf(
154
+ struct crlf_attrs *ca,
155
+ const git_filter_source *src,
156
+ git_buf_text_stats *stats)
157
+ {
158
+ const char *filename = git_filter_source_path(src);
159
+
160
+ if (!ca->safe_crlf)
161
+ return 0;
162
+
163
+ if (output_eol(ca) == GIT_EOL_LF) {
164
+ /*
165
+ * CRLFs would not be restored by checkout:
166
+ * check if we'd remove CRLFs
167
+ */
168
+ if (stats->crlf) {
169
+ if (ca->safe_crlf == GIT_SAFE_CRLF_WARN) {
170
+ /* TODO: issue a warning when available */
171
+ } else {
172
+ if (filename && *filename)
173
+ git_error_set(
174
+ GIT_ERROR_FILTER, "CRLF would be replaced by LF in '%s'",
175
+ filename);
176
+ else
177
+ git_error_set(
178
+ GIT_ERROR_FILTER, "CRLF would be replaced by LF");
145
179
 
146
- /* If safecrlf is enabled, sanity-check the result. */
147
- if (stats.cr != stats.crlf || stats.lf != stats.crlf) {
148
- switch (ca->safe_crlf) {
149
- case GIT_SAFE_CRLF_FAIL:
150
- giterr_set(
151
- GITERR_FILTER, "LF would be replaced by CRLF in '%s'",
152
- git_filter_source_path(src));
153
180
  return -1;
154
- case GIT_SAFE_CRLF_WARN:
155
- /* TODO: issue warning when warning API is available */;
156
- break;
157
- default:
158
- break;
159
181
  }
160
182
  }
161
-
183
+ } else if (output_eol(ca) == GIT_EOL_CRLF) {
162
184
  /*
163
- * We're currently not going to even try to convert stuff
164
- * that has bare CR characters. Does anybody do that crazy
165
- * stuff?
185
+ * CRLFs would be added by checkout:
186
+ * check if we have "naked" LFs
166
187
  */
167
- if (stats.cr != stats.crlf)
168
- return GIT_PASSTHROUGH;
188
+ if (stats->crlf != stats->lf) {
189
+ if (ca->safe_crlf == GIT_SAFE_CRLF_WARN) {
190
+ /* TODO: issue a warning when available */
191
+ } else {
192
+ if (filename && *filename)
193
+ git_error_set(
194
+ GIT_ERROR_FILTER, "LF would be replaced by CRLF in '%s'",
195
+ filename);
196
+ else
197
+ git_error_set(
198
+ GIT_ERROR_FILTER, "LF would be replaced by CRLF");
169
199
 
170
- if (ca->crlf_action == GIT_CRLF_GUESS) {
171
- /*
172
- * If the file in the index has any CR in it, do not convert.
173
- * This is the new safer autocrlf handling.
174
- */
175
- if (has_cr_in_index(src))
176
- return GIT_PASSTHROUGH;
200
+ return -1;
201
+ }
177
202
  }
178
-
179
- if (!stats.cr)
180
- return GIT_PASSTHROUGH;
181
203
  }
182
204
 
183
- /* Actually drop the carriage returns */
184
- return git_buf_text_crlf_to_lf(to, from);
205
+ return 0;
185
206
  }
186
207
 
187
- static const char *line_ending(struct crlf_attrs *ca)
208
+ static int crlf_apply_to_odb(
209
+ struct crlf_attrs *ca,
210
+ git_buf *to,
211
+ const git_buf *from,
212
+ const git_filter_source *src)
188
213
  {
189
- switch (ca->crlf_action) {
190
- case GIT_CRLF_BINARY:
191
- case GIT_CRLF_INPUT:
192
- return "\n";
214
+ git_buf_text_stats stats;
215
+ bool is_binary;
216
+ int error;
193
217
 
194
- case GIT_CRLF_CRLF:
195
- return "\r\n";
218
+ /* Binary attribute? Empty file? Nothing to do */
219
+ if (ca->crlf_action == GIT_CRLF_BINARY || !git_buf_len(from))
220
+ return GIT_PASSTHROUGH;
196
221
 
197
- case GIT_CRLF_GUESS:
198
- if (ca->auto_crlf == GIT_AUTO_CRLF_FALSE)
199
- return "\n";
200
- break;
222
+ is_binary = git_buf_text_gather_stats(&stats, from, false);
201
223
 
202
- case GIT_CRLF_AUTO:
203
- case GIT_CRLF_TEXT:
204
- break;
224
+ /* Heuristics to see if we can skip the conversion.
225
+ * Straight from Core Git.
226
+ */
227
+ if (ca->crlf_action == GIT_CRLF_AUTO ||
228
+ ca->crlf_action == GIT_CRLF_AUTO_INPUT ||
229
+ ca->crlf_action == GIT_CRLF_AUTO_CRLF) {
230
+
231
+ if (is_binary)
232
+ return GIT_PASSTHROUGH;
205
233
 
206
- default:
207
- goto line_ending_error;
234
+ /*
235
+ * If the file in the index has any CR in it, do not convert.
236
+ * This is the new safer autocrlf handling.
237
+ */
238
+ if (has_cr_in_index(src))
239
+ return GIT_PASSTHROUGH;
208
240
  }
209
241
 
210
- if (ca->auto_crlf == GIT_AUTO_CRLF_TRUE)
211
- return "\r\n";
212
- else if (ca->auto_crlf == GIT_AUTO_CRLF_INPUT)
213
- return "\n";
214
- else if (ca->eol == GIT_EOL_UNSET)
215
- return GIT_EOL_NATIVE == GIT_EOL_CRLF ? "\r\n" : "\n";
216
- else if (ca->eol == GIT_EOL_LF)
217
- return "\n";
218
- else if (ca->eol == GIT_EOL_CRLF)
219
- return "\r\n";
220
-
221
- line_ending_error:
222
- giterr_set(GITERR_INVALID, "invalid input to line ending filter");
223
- return NULL;
242
+ if ((error = check_safecrlf(ca, src, &stats)) < 0)
243
+ return error;
244
+
245
+ /* If there are no CR characters to filter out, then just pass */
246
+ if (!stats.crlf)
247
+ return GIT_PASSTHROUGH;
248
+
249
+ /* Actually drop the carriage returns */
250
+ return git_buf_text_crlf_to_lf(to, from);
224
251
  }
225
252
 
226
253
  static int crlf_apply_to_workdir(
227
- struct crlf_attrs *ca, git_buf *to, const git_buf *from)
254
+ struct crlf_attrs *ca,
255
+ git_buf *to,
256
+ const git_buf *from)
228
257
  {
229
258
  git_buf_text_stats stats;
230
- const char *workdir_ending = NULL;
231
259
  bool is_binary;
232
260
 
233
261
  /* Empty file? Nothing to do. */
234
- if (git_buf_len(from) == 0)
235
- return 0;
236
-
237
- /* Determine proper line ending */
238
- workdir_ending = line_ending(ca);
239
- if (!workdir_ending)
240
- return -1;
241
-
242
- /* only LF->CRLF conversion is supported, do nothing on LF platforms */
243
- if (strcmp(workdir_ending, "\r\n") != 0)
262
+ if (git_buf_len(from) == 0 || output_eol(ca) != GIT_EOL_CRLF)
244
263
  return GIT_PASSTHROUGH;
245
264
 
246
- /* If there are no LFs, or all LFs are part of a CRLF, nothing to do */
247
265
  is_binary = git_buf_text_gather_stats(&stats, from, false);
248
266
 
267
+ /* If there are no LFs, or all LFs are part of a CRLF, nothing to do */
249
268
  if (stats.lf == 0 || stats.lf == stats.crlf)
250
269
  return GIT_PASSTHROUGH;
251
270
 
252
271
  if (ca->crlf_action == GIT_CRLF_AUTO ||
253
- ca->crlf_action == GIT_CRLF_GUESS) {
272
+ ca->crlf_action == GIT_CRLF_AUTO_INPUT ||
273
+ ca->crlf_action == GIT_CRLF_AUTO_CRLF) {
254
274
 
255
275
  /* If we have any existing CR or CRLF line endings, do nothing */
256
- if (ca->crlf_action == GIT_CRLF_GUESS &&
257
- stats.cr > 0 && stats.crlf > 0)
258
- return GIT_PASSTHROUGH;
259
-
260
- /* If we have bare CR characters, do nothing */
261
- if (stats.cr != stats.crlf)
276
+ if (stats.cr > 0)
262
277
  return GIT_PASSTHROUGH;
263
278
 
264
279
  /* Don't filter binary files */
@@ -269,85 +284,99 @@ static int crlf_apply_to_workdir(
269
284
  return git_buf_text_lf_to_crlf(to, from);
270
285
  }
271
286
 
272
- static int crlf_check(
273
- git_filter *self,
274
- void **payload, /* points to NULL ptr on entry, may be set */
275
- const git_filter_source *src,
276
- const char **attr_values)
287
+ static int convert_attrs(
288
+ struct crlf_attrs *ca,
289
+ const char **attr_values,
290
+ const git_filter_source *src)
277
291
  {
278
292
  int error;
279
- struct crlf_attrs ca;
280
293
 
281
- GIT_UNUSED(self);
294
+ memset(ca, 0, sizeof(struct crlf_attrs));
295
+
296
+ if ((error = git_repository__configmap_lookup(&ca->auto_crlf,
297
+ git_filter_source_repo(src), GIT_CONFIGMAP_AUTO_CRLF)) < 0 ||
298
+ (error = git_repository__configmap_lookup(&ca->safe_crlf,
299
+ git_filter_source_repo(src), GIT_CONFIGMAP_SAFE_CRLF)) < 0 ||
300
+ (error = git_repository__configmap_lookup(&ca->core_eol,
301
+ git_filter_source_repo(src), GIT_CONFIGMAP_EOL)) < 0)
302
+ return error;
303
+
304
+ /* downgrade FAIL to WARN if ALLOW_UNSAFE option is used */
305
+ if ((git_filter_source_flags(src) & GIT_FILTER_ALLOW_UNSAFE) &&
306
+ ca->safe_crlf == GIT_SAFE_CRLF_FAIL)
307
+ ca->safe_crlf = GIT_SAFE_CRLF_WARN;
308
+
309
+ if (attr_values) {
310
+ /* load the text attribute */
311
+ ca->crlf_action = check_crlf(attr_values[2]); /* text */
312
+
313
+ if (ca->crlf_action == GIT_CRLF_UNDEFINED)
314
+ ca->crlf_action = check_crlf(attr_values[0]); /* crlf */
315
+
316
+ if (ca->crlf_action != GIT_CRLF_BINARY) {
317
+ /* load the eol attribute */
318
+ int eol_attr = check_eol(attr_values[1]);
319
+
320
+ if (ca->crlf_action == GIT_CRLF_AUTO && eol_attr == GIT_EOL_LF)
321
+ ca->crlf_action = GIT_CRLF_AUTO_INPUT;
322
+ else if (ca->crlf_action == GIT_CRLF_AUTO && eol_attr == GIT_EOL_CRLF)
323
+ ca->crlf_action = GIT_CRLF_AUTO_CRLF;
324
+ else if (eol_attr == GIT_EOL_LF)
325
+ ca->crlf_action = GIT_CRLF_TEXT_INPUT;
326
+ else if (eol_attr == GIT_EOL_CRLF)
327
+ ca->crlf_action = GIT_CRLF_TEXT_CRLF;
328
+ }
282
329
 
283
- if (!attr_values) {
284
- ca.crlf_action = GIT_CRLF_GUESS;
285
- ca.eol = GIT_EOL_UNSET;
330
+ ca->attr_action = ca->crlf_action;
286
331
  } else {
287
- ca.crlf_action = check_crlf(attr_values[2]); /* text */
288
- if (ca.crlf_action == GIT_CRLF_GUESS)
289
- ca.crlf_action = check_crlf(attr_values[0]); /* clrf */
290
- ca.eol = check_eol(attr_values[1]); /* eol */
332
+ ca->crlf_action = GIT_CRLF_UNDEFINED;
291
333
  }
292
- ca.auto_crlf = GIT_AUTO_CRLF_DEFAULT;
293
- ca.safe_crlf = GIT_SAFE_CRLF_DEFAULT;
294
334
 
295
- /*
296
- * Use the core Git logic to see if we should perform CRLF for this file
297
- * based on its attributes & the value of `core.autocrlf`
298
- */
299
- ca.crlf_action = crlf_input_action(&ca);
335
+ if (ca->crlf_action == GIT_CRLF_TEXT)
336
+ ca->crlf_action = text_eol_is_crlf(ca) ? GIT_CRLF_TEXT_CRLF : GIT_CRLF_TEXT_INPUT;
337
+ if (ca->crlf_action == GIT_CRLF_UNDEFINED && ca->auto_crlf == GIT_AUTO_CRLF_FALSE)
338
+ ca->crlf_action = GIT_CRLF_BINARY;
339
+ if (ca->crlf_action == GIT_CRLF_UNDEFINED && ca->auto_crlf == GIT_AUTO_CRLF_TRUE)
340
+ ca->crlf_action = GIT_CRLF_AUTO_CRLF;
341
+ if (ca->crlf_action == GIT_CRLF_UNDEFINED && ca->auto_crlf == GIT_AUTO_CRLF_INPUT)
342
+ ca->crlf_action = GIT_CRLF_AUTO_INPUT;
300
343
 
301
- if (ca.crlf_action == GIT_CRLF_BINARY)
302
- return GIT_PASSTHROUGH;
303
-
304
- if (ca.crlf_action == GIT_CRLF_GUESS ||
305
- ((ca.crlf_action == GIT_CRLF_AUTO || ca.crlf_action == GIT_CRLF_TEXT) &&
306
- git_filter_source_mode(src) == GIT_FILTER_SMUDGE)) {
307
-
308
- error = git_repository__cvar(
309
- &ca.auto_crlf, git_filter_source_repo(src), GIT_CVAR_AUTO_CRLF);
310
- if (error < 0)
311
- return error;
344
+ return 0;
345
+ }
312
346
 
313
- if (ca.crlf_action == GIT_CRLF_GUESS &&
314
- ca.auto_crlf == GIT_AUTO_CRLF_FALSE)
315
- return GIT_PASSTHROUGH;
347
+ static int crlf_check(
348
+ git_filter *self,
349
+ void **payload, /* points to NULL ptr on entry, may be set */
350
+ const git_filter_source *src,
351
+ const char **attr_values)
352
+ {
353
+ struct crlf_attrs ca;
316
354
 
317
- if (ca.auto_crlf == GIT_AUTO_CRLF_INPUT &&
318
- git_filter_source_mode(src) == GIT_FILTER_SMUDGE)
319
- return GIT_PASSTHROUGH;
320
- }
355
+ GIT_UNUSED(self);
321
356
 
322
- if (git_filter_source_mode(src) == GIT_FILTER_CLEAN) {
323
- error = git_repository__cvar(
324
- &ca.safe_crlf, git_filter_source_repo(src), GIT_CVAR_SAFE_CRLF);
325
- if (error < 0)
326
- return error;
357
+ convert_attrs(&ca, attr_values, src);
327
358
 
328
- /* downgrade FAIL to WARN if ALLOW_UNSAFE option is used */
329
- if ((git_filter_source_flags(src) & GIT_FILTER_ALLOW_UNSAFE) &&
330
- ca.safe_crlf == GIT_SAFE_CRLF_FAIL)
331
- ca.safe_crlf = GIT_SAFE_CRLF_WARN;
332
- }
359
+ if (ca.crlf_action == GIT_CRLF_BINARY)
360
+ return GIT_PASSTHROUGH;
333
361
 
334
362
  *payload = git__malloc(sizeof(ca));
335
- GITERR_CHECK_ALLOC(*payload);
363
+ GIT_ERROR_CHECK_ALLOC(*payload);
336
364
  memcpy(*payload, &ca, sizeof(ca));
337
365
 
338
366
  return 0;
339
367
  }
340
368
 
341
369
  static int crlf_apply(
342
- git_filter *self,
343
- void **payload, /* may be read and/or set */
344
- git_buf *to,
370
+ git_filter *self,
371
+ void **payload, /* may be read and/or set */
372
+ git_buf *to,
345
373
  const git_buf *from,
346
374
  const git_filter_source *src)
347
375
  {
348
376
  /* initialize payload in case `check` was bypassed */
349
377
  if (!*payload) {
350
378
  int error = crlf_check(self, payload, src, NULL);
379
+
351
380
  if (error < 0)
352
381
  return error;
353
382
  }