rugged 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -10,7 +10,6 @@
10
10
  #include "repository.h"
11
11
  #include "filebuf.h"
12
12
  #include "attrcache.h"
13
- #include "buf_text.h"
14
13
  #include "git2/blob.h"
15
14
  #include "git2/tree.h"
16
15
  #include "blob.h"
@@ -34,23 +33,28 @@ static void attr_file_free(git_attr_file *file)
34
33
  int git_attr_file__new(
35
34
  git_attr_file **out,
36
35
  git_attr_file_entry *entry,
37
- git_attr_file_source source)
36
+ git_attr_file_source *source)
38
37
  {
39
38
  git_attr_file *attrs = git__calloc(1, sizeof(git_attr_file));
40
39
  GIT_ERROR_CHECK_ALLOC(attrs);
41
40
 
42
41
  if (git_mutex_init(&attrs->lock) < 0) {
43
42
  git_error_set(GIT_ERROR_OS, "failed to initialize lock");
44
- git__free(attrs);
45
- return -1;
43
+ goto on_error;
46
44
  }
47
45
 
48
- git_pool_init(&attrs->pool, 1);
46
+ if (git_pool_init(&attrs->pool, 1) < 0)
47
+ goto on_error;
48
+
49
49
  GIT_REFCOUNT_INC(attrs);
50
- attrs->entry = entry;
51
- attrs->source = source;
50
+ attrs->entry = entry;
51
+ memcpy(&attrs->source, source, sizeof(git_attr_file_source));
52
52
  *out = attrs;
53
53
  return 0;
54
+
55
+ on_error:
56
+ git__free(attrs);
57
+ return -1;
54
58
  }
55
59
 
56
60
  int git_attr_file__clear_rules(git_attr_file *file, bool need_lock)
@@ -104,11 +108,12 @@ int git_attr_file__load(
104
108
  git_repository *repo,
105
109
  git_attr_session *attr_session,
106
110
  git_attr_file_entry *entry,
107
- git_attr_file_source source,
111
+ git_attr_file_source *source,
108
112
  git_attr_file_parser parser,
109
113
  bool allow_macros)
110
114
  {
111
115
  int error = 0;
116
+ git_commit *commit = NULL;
112
117
  git_tree *tree = NULL;
113
118
  git_tree_entry *tree_entry = NULL;
114
119
  git_blob *blob = NULL;
@@ -118,17 +123,17 @@ int git_attr_file__load(
118
123
  struct stat st;
119
124
  bool nonexistent = false;
120
125
  int bom_offset;
121
- git_bom_t bom;
126
+ git_buf_bom_t bom;
122
127
  git_oid id;
123
128
  git_object_size_t blobsize;
124
129
 
125
130
  *out = NULL;
126
131
 
127
- switch (source) {
128
- case GIT_ATTR_FILE__IN_MEMORY:
132
+ switch (source->type) {
133
+ case GIT_ATTR_FILE_SOURCE_MEMORY:
129
134
  /* in-memory attribute file doesn't need data */
130
135
  break;
131
- case GIT_ATTR_FILE__FROM_INDEX: {
136
+ case GIT_ATTR_FILE_SOURCE_INDEX: {
132
137
  if ((error = attr_file_oid_from_index(&id, repo, entry->path)) < 0 ||
133
138
  (error = git_blob_lookup(&blob, repo, &id)) < 0)
134
139
  return error;
@@ -141,7 +146,7 @@ int git_attr_file__load(
141
146
  git_buf_put(&content, git_blob_rawcontent(blob), (size_t)blobsize);
142
147
  break;
143
148
  }
144
- case GIT_ATTR_FILE__FROM_FILE: {
149
+ case GIT_ATTR_FILE_SOURCE_FILE: {
145
150
  int fd = -1;
146
151
 
147
152
  /* For open or read errors, pretend that we got ENOTFOUND. */
@@ -158,10 +163,31 @@ int git_attr_file__load(
158
163
 
159
164
  break;
160
165
  }
161
- case GIT_ATTR_FILE__FROM_HEAD: {
162
- if ((error = git_repository_head_tree(&tree, repo)) < 0 ||
163
- (error = git_tree_entry_bypath(&tree_entry, tree, entry->path)) < 0 ||
164
- (error = git_blob_lookup(&blob, repo, git_tree_entry_id(tree_entry))) < 0)
166
+ case GIT_ATTR_FILE_SOURCE_COMMIT: {
167
+ if (source->commit_id) {
168
+ if ((error = git_commit_lookup(&commit, repo, source->commit_id)) < 0 ||
169
+ (error = git_commit_tree(&tree, commit)) < 0)
170
+ goto cleanup;
171
+ } else {
172
+ if ((error = git_repository_head_tree(&tree, repo)) < 0)
173
+ goto cleanup;
174
+ }
175
+
176
+ if ((error = git_tree_entry_bypath(&tree_entry, tree, entry->path)) < 0) {
177
+ /*
178
+ * If the attributes file does not exist, we can
179
+ * cache an empty file for this commit to prevent
180
+ * needless future lookups.
181
+ */
182
+ if (error == GIT_ENOTFOUND) {
183
+ error = 0;
184
+ break;
185
+ }
186
+
187
+ goto cleanup;
188
+ }
189
+
190
+ if ((error = git_blob_lookup(&blob, repo, git_tree_entry_id(tree_entry))) < 0)
165
191
  goto cleanup;
166
192
 
167
193
  /*
@@ -178,7 +204,7 @@ int git_attr_file__load(
178
204
  break;
179
205
  }
180
206
  default:
181
- git_error_set(GIT_ERROR_INVALID, "unknown file source %d", source);
207
+ git_error_set(GIT_ERROR_INVALID, "unknown file source %d", source->type);
182
208
  return -1;
183
209
  }
184
210
 
@@ -187,9 +213,9 @@ int git_attr_file__load(
187
213
 
188
214
  /* advance over a UTF8 BOM */
189
215
  content_str = git_buf_cstr(&content);
190
- bom_offset = git_buf_text_detect_bom(&bom, &content);
216
+ bom_offset = git_buf_detect_bom(&bom, &content);
191
217
 
192
- if (bom == GIT_BOM_UTF8)
218
+ if (bom == GIT_BUF_BOM_UTF8)
193
219
  content_str += bom_offset;
194
220
 
195
221
  /* store the key of the attr_reader; don't bother with cache
@@ -206,11 +232,11 @@ int git_attr_file__load(
206
232
  /* write cache breakers */
207
233
  if (nonexistent)
208
234
  file->nonexistent = 1;
209
- else if (source == GIT_ATTR_FILE__FROM_INDEX)
235
+ else if (source->type == GIT_ATTR_FILE_SOURCE_INDEX)
210
236
  git_oid_cpy(&file->cache_data.oid, git_blob_id(blob));
211
- else if (source == GIT_ATTR_FILE__FROM_HEAD)
237
+ else if (source->type == GIT_ATTR_FILE_SOURCE_COMMIT)
212
238
  git_oid_cpy(&file->cache_data.oid, git_tree_id(tree));
213
- else if (source == GIT_ATTR_FILE__FROM_FILE)
239
+ else if (source->type == GIT_ATTR_FILE_SOURCE_FILE)
214
240
  git_futils_filestamp_set_from_stat(&file->cache_data.stamp, &st);
215
241
  /* else always cacheable */
216
242
 
@@ -220,6 +246,7 @@ cleanup:
220
246
  git_blob_free(blob);
221
247
  git_tree_entry_free(tree_entry);
222
248
  git_tree_free(tree);
249
+ git_commit_free(commit);
223
250
  git_buf_dispose(&content);
224
251
 
225
252
  return error;
@@ -228,7 +255,8 @@ cleanup:
228
255
  int git_attr_file__out_of_date(
229
256
  git_repository *repo,
230
257
  git_attr_session *attr_session,
231
- git_attr_file *file)
258
+ git_attr_file *file,
259
+ git_attr_file_source *source)
232
260
  {
233
261
  if (!file)
234
262
  return 1;
@@ -241,15 +269,15 @@ int git_attr_file__out_of_date(
241
269
  else if (file->nonexistent)
242
270
  return 1;
243
271
 
244
- switch (file->source) {
245
- case GIT_ATTR_FILE__IN_MEMORY:
272
+ switch (file->source.type) {
273
+ case GIT_ATTR_FILE_SOURCE_MEMORY:
246
274
  return 0;
247
275
 
248
- case GIT_ATTR_FILE__FROM_FILE:
276
+ case GIT_ATTR_FILE_SOURCE_FILE:
249
277
  return git_futils_filestamp_check(
250
278
  &file->cache_data.stamp, file->entry->fullpath);
251
279
 
252
- case GIT_ATTR_FILE__FROM_INDEX: {
280
+ case GIT_ATTR_FILE_SOURCE_INDEX: {
253
281
  int error;
254
282
  git_oid id;
255
283
 
@@ -260,21 +288,34 @@ int git_attr_file__out_of_date(
260
288
  return (git_oid__cmp(&file->cache_data.oid, &id) != 0);
261
289
  }
262
290
 
263
- case GIT_ATTR_FILE__FROM_HEAD: {
264
- git_tree *tree;
291
+ case GIT_ATTR_FILE_SOURCE_COMMIT: {
292
+ git_tree *tree = NULL;
265
293
  int error;
266
294
 
267
- if ((error = git_repository_head_tree(&tree, repo)) < 0)
295
+ if (source->commit_id) {
296
+ git_commit *commit = NULL;
297
+
298
+ if ((error = git_commit_lookup(&commit, repo, source->commit_id)) < 0)
299
+ return error;
300
+
301
+ error = git_commit_tree(&tree, commit);
302
+
303
+ git_commit_free(commit);
304
+ } else {
305
+ error = git_repository_head_tree(&tree, repo);
306
+ }
307
+
308
+ if (error < 0)
268
309
  return error;
269
310
 
270
- error = git_oid__cmp(&file->cache_data.oid, git_tree_id(tree));
311
+ error = (git_oid__cmp(&file->cache_data.oid, git_tree_id(tree)) != 0);
271
312
 
272
313
  git_tree_free(tree);
273
314
  return error;
274
315
  }
275
316
 
276
317
  default:
277
- git_error_set(GIT_ERROR_INVALID, "invalid file type %d", file->source);
318
+ git_error_set(GIT_ERROR_INVALID, "invalid file type %d", file->source.type);
278
319
  return -1;
279
320
  }
280
321
  }
@@ -346,7 +387,9 @@ uint32_t git_attr_file__name_hash(const char *name)
346
387
  {
347
388
  uint32_t h = 5381;
348
389
  int c;
349
- assert(name);
390
+
391
+ GIT_ASSERT_ARG(name);
392
+
350
393
  while ((c = (int)*name++) != 0)
351
394
  h = ((h << 5) + h) + c;
352
395
  return h;
@@ -383,6 +426,7 @@ int git_attr_file__lookup_one(
383
426
  int git_attr_file__load_standalone(git_attr_file **out, const char *path)
384
427
  {
385
428
  git_buf content = GIT_BUF_INIT;
429
+ git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE };
386
430
  git_attr_file *file = NULL;
387
431
  int error;
388
432
 
@@ -394,9 +438,9 @@ int git_attr_file__load_standalone(git_attr_file **out, const char *path)
394
438
  * don't have to free it - freeing file+pool will free cache entry, too.
395
439
  */
396
440
 
397
- if ((error = git_attr_file__new(&file, NULL, GIT_ATTR_FILE__FROM_FILE)) < 0 ||
441
+ if ((error = git_attr_file__new(&file, NULL, &source)) < 0 ||
398
442
  (error = git_attr_file__parse_buffer(NULL, file, content.ptr, true)) < 0 ||
399
- (error = git_attr_cache__alloc_file_entry(&file->entry, NULL, path, &file->pool)) < 0)
443
+ (error = git_attr_cache__alloc_file_entry(&file->entry, NULL, NULL, path, &file->pool)) < 0)
400
444
  goto out;
401
445
 
402
446
  *out = file;
@@ -496,14 +540,19 @@ git_attr_assignment *git_attr_rule__lookup_assignment(
496
540
  }
497
541
 
498
542
  int git_attr_path__init(
499
- git_attr_path *info, const char *path, const char *base, git_dir_flag dir_flag)
543
+ git_attr_path *info,
544
+ git_repository *repo,
545
+ const char *path,
546
+ const char *base,
547
+ git_dir_flag dir_flag)
500
548
  {
501
549
  ssize_t root;
502
550
 
503
551
  /* build full path as best we can */
504
552
  git_buf_init(&info->full, 0);
505
553
 
506
- if (git_path_join_unrooted(&info->full, path, base, &root) < 0)
554
+ if (git_path_join_unrooted(&info->full, path, base, &root) < 0 ||
555
+ git_path_validate_workdir_buf(repo, &info->full) < 0)
507
556
  return -1;
508
557
 
509
558
  info->path = info->full.ptr + root;
@@ -655,7 +704,8 @@ int git_attr_fnmatch__parse(
655
704
  int slash_count, allow_space;
656
705
  bool escaped;
657
706
 
658
- assert(spec && base && *base);
707
+ GIT_ASSERT_ARG(spec);
708
+ GIT_ASSERT_ARG(base && *base);
659
709
 
660
710
  if (parse_optimized_patterns(spec, pool, *base))
661
711
  return 0;
@@ -823,7 +873,7 @@ int git_attr_assignment__parse(
823
873
  const char *scan = *base;
824
874
  git_attr_assignment *assign = NULL;
825
875
 
826
- assert(assigns && !assigns->length);
876
+ GIT_ASSERT_ARG(assigns && !assigns->length);
827
877
 
828
878
  git_vector_set_cmp(assigns, sort_by_hash_and_name);
829
879
 
@@ -949,10 +999,10 @@ void git_attr_rule__free(git_attr_rule *rule)
949
999
 
950
1000
  int git_attr_session__init(git_attr_session *session, git_repository *repo)
951
1001
  {
952
- assert(repo);
1002
+ GIT_ASSERT_ARG(repo);
953
1003
 
954
1004
  memset(session, 0, sizeof(*session));
955
- session->key = git_atomic_inc(&repo->attr_session_key);
1005
+ session->key = git_atomic32_inc(&repo->attr_session_key);
956
1006
 
957
1007
  return 0;
958
1008
  }
@@ -37,12 +37,30 @@
37
37
  (GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO)
38
38
 
39
39
  typedef enum {
40
- GIT_ATTR_FILE__IN_MEMORY = 0,
41
- GIT_ATTR_FILE__FROM_FILE = 1,
42
- GIT_ATTR_FILE__FROM_INDEX = 2,
43
- GIT_ATTR_FILE__FROM_HEAD = 3,
40
+ GIT_ATTR_FILE_SOURCE_MEMORY = 0,
41
+ GIT_ATTR_FILE_SOURCE_FILE = 1,
42
+ GIT_ATTR_FILE_SOURCE_INDEX = 2,
43
+ GIT_ATTR_FILE_SOURCE_COMMIT = 3,
44
44
 
45
- GIT_ATTR_FILE_NUM_SOURCES = 4
45
+ GIT_ATTR_FILE_NUM_SOURCES = 4
46
+ } git_attr_file_source_t;
47
+
48
+ typedef struct {
49
+ /* The source location for the attribute file. */
50
+ git_attr_file_source_t type;
51
+
52
+ /*
53
+ * The filename of the attribute file to read (relative to the
54
+ * given base path).
55
+ */
56
+ const char *base;
57
+ const char *filename;
58
+
59
+ /*
60
+ * The commit ID when the given source type is a commit (or NULL
61
+ * for the repository's HEAD commit.)
62
+ */
63
+ git_oid *commit_id;
46
64
  } git_attr_file_source;
47
65
 
48
66
  extern const char *git_attr__true;
@@ -124,7 +142,7 @@ extern int git_attr_get_many_with_session(
124
142
  const char **values_out,
125
143
  git_repository *repo,
126
144
  git_attr_session *attr_session,
127
- uint32_t flags,
145
+ git_attr_options *opts,
128
146
  const char *path,
129
147
  size_t num_attr,
130
148
  const char **names);
@@ -142,7 +160,7 @@ typedef int (*git_attr_file_parser)(
142
160
  int git_attr_file__new(
143
161
  git_attr_file **out,
144
162
  git_attr_file_entry *entry,
145
- git_attr_file_source source);
163
+ git_attr_file_source *source);
146
164
 
147
165
  void git_attr_file__free(git_attr_file *file);
148
166
 
@@ -151,7 +169,7 @@ int git_attr_file__load(
151
169
  git_repository *repo,
152
170
  git_attr_session *attr_session,
153
171
  git_attr_file_entry *ce,
154
- git_attr_file_source source,
172
+ git_attr_file_source *source,
155
173
  git_attr_file_parser parser,
156
174
  bool allow_macros);
157
175
 
@@ -159,7 +177,7 @@ int git_attr_file__load_standalone(
159
177
  git_attr_file **out, const char *path);
160
178
 
161
179
  int git_attr_file__out_of_date(
162
- git_repository *repo, git_attr_session *session, git_attr_file *file);
180
+ git_repository *repo, git_attr_session *session, git_attr_file *file, git_attr_file_source *source);
163
181
 
164
182
  int git_attr_file__parse_buffer(
165
183
  git_repository *repo, git_attr_file *attrs, const char *data, bool allow_macros);
@@ -207,8 +225,11 @@ extern git_attr_assignment *git_attr_rule__lookup_assignment(
207
225
  typedef enum { GIT_DIR_FLAG_TRUE = 1, GIT_DIR_FLAG_FALSE = 0, GIT_DIR_FLAG_UNKNOWN = -1 } git_dir_flag;
208
226
 
209
227
  extern int git_attr_path__init(
210
- git_attr_path *info, const char *path, const char *base, git_dir_flag is_dir);
211
-
228
+ git_attr_path *out,
229
+ git_repository *repo,
230
+ const char *path,
231
+ const char *base,
232
+ git_dir_flag is_dir);
212
233
  extern void git_attr_path__free(git_attr_path *info);
213
234
 
214
235
  extern int git_attr_assignment__parse(
@@ -38,6 +38,7 @@ GIT_INLINE(git_attr_file_entry *) attr_cache_lookup_entry(
38
38
 
39
39
  int git_attr_cache__alloc_file_entry(
40
40
  git_attr_file_entry **out,
41
+ git_repository *repo,
41
42
  const char *base,
42
43
  const char *path,
43
44
  git_pool *pool)
@@ -65,6 +66,9 @@ int git_attr_cache__alloc_file_entry(
65
66
  }
66
67
  memcpy(&ce->fullpath[baselen], path, pathlen);
67
68
 
69
+ if (git_path_validate_workdir_with_len(repo, ce->fullpath, pathlen + baselen) < 0)
70
+ return -1;
71
+
68
72
  ce->path = &ce->fullpath[baselen];
69
73
  *out = ce;
70
74
 
@@ -79,8 +83,8 @@ static int attr_cache_make_entry(
79
83
  git_attr_file_entry *entry = NULL;
80
84
  int error;
81
85
 
82
- if ((error = git_attr_cache__alloc_file_entry(&entry, git_repository_workdir(repo),
83
- path, &cache->pool)) < 0)
86
+ if ((error = git_attr_cache__alloc_file_entry(&entry, repo,
87
+ git_repository_workdir(repo), path, &cache->pool)) < 0)
84
88
  return error;
85
89
 
86
90
  if ((error = git_strmap_set(cache->files, entry->path, entry)) < 0)
@@ -108,7 +112,7 @@ static int attr_cache_upsert(git_attr_cache *cache, git_attr_file *file)
108
112
  * Replace the existing value if another thread has
109
113
  * created it in the meantime.
110
114
  */
111
- old = git__swap(entry->file[file->source], file);
115
+ old = git_atomic_swap(entry->file[file->source.type], file);
112
116
 
113
117
  if (old) {
114
118
  GIT_REFCOUNT_OWN(old, NULL);
@@ -123,7 +127,7 @@ static int attr_cache_remove(git_attr_cache *cache, git_attr_file *file)
123
127
  {
124
128
  int error = 0;
125
129
  git_attr_file_entry *entry;
126
- git_attr_file *old = NULL;
130
+ git_attr_file *oldfile = NULL;
127
131
 
128
132
  if (!file)
129
133
  return 0;
@@ -132,13 +136,13 @@ static int attr_cache_remove(git_attr_cache *cache, git_attr_file *file)
132
136
  return error;
133
137
 
134
138
  if ((entry = attr_cache_lookup_entry(cache, file->entry->path)) != NULL)
135
- old = git__compare_and_swap(&entry->file[file->source], file, NULL);
139
+ oldfile = git_atomic_compare_and_swap(&entry->file[file->source.type], file, NULL);
136
140
 
137
141
  attr_cache_unlock(cache);
138
142
 
139
- if (old) {
140
- GIT_REFCOUNT_OWN(old, NULL);
141
- git_attr_file__free(old);
143
+ if (oldfile == file) {
144
+ GIT_REFCOUNT_OWN(file, NULL);
145
+ git_attr_file__free(file);
142
146
  }
143
147
 
144
148
  return error;
@@ -154,40 +158,42 @@ static int attr_cache_lookup(
154
158
  git_attr_file_entry **out_entry,
155
159
  git_repository *repo,
156
160
  git_attr_session *attr_session,
157
- git_attr_file_source source,
158
- const char *base,
159
- const char *filename)
161
+ git_attr_file_source *source)
160
162
  {
161
163
  int error = 0;
162
164
  git_buf path = GIT_BUF_INIT;
163
- const char *wd = git_repository_workdir(repo), *relfile;
165
+ const char *wd = git_repository_workdir(repo);
166
+ const char *filename;
164
167
  git_attr_cache *cache = git_repository_attr_cache(repo);
165
168
  git_attr_file_entry *entry = NULL;
166
169
  git_attr_file *file = NULL;
167
170
 
168
171
  /* join base and path as needed */
169
- if (base != NULL && git_path_root(filename) < 0) {
172
+ if (source->base != NULL && git_path_root(source->filename) < 0) {
170
173
  git_buf *p = attr_session ? &attr_session->tmp : &path;
171
174
 
172
- if (git_buf_joinpath(p, base, filename) < 0)
175
+ if (git_buf_joinpath(p, source->base, source->filename) < 0 ||
176
+ git_path_validate_workdir_buf(repo, p) < 0)
173
177
  return -1;
174
178
 
175
179
  filename = p->ptr;
180
+ } else {
181
+ filename = source->filename;
176
182
  }
177
183
 
178
- relfile = filename;
179
- if (wd && !git__prefixcmp(relfile, wd))
180
- relfile += strlen(wd);
184
+ if (wd && !git__prefixcmp(filename, wd))
185
+ filename += strlen(wd);
181
186
 
182
187
  /* check cache for existing entry */
183
188
  if ((error = attr_cache_lock(cache)) < 0)
184
189
  goto cleanup;
185
190
 
186
- entry = attr_cache_lookup_entry(cache, relfile);
187
- if (!entry)
188
- error = attr_cache_make_entry(&entry, repo, relfile);
189
- else if (entry->file[source] != NULL) {
190
- file = entry->file[source];
191
+ entry = attr_cache_lookup_entry(cache, filename);
192
+
193
+ if (!entry) {
194
+ error = attr_cache_make_entry(&entry, repo, filename);
195
+ } else if (entry->file[source->type] != NULL) {
196
+ file = entry->file[source->type];
191
197
  GIT_REFCOUNT_INC(file);
192
198
  }
193
199
 
@@ -205,9 +211,7 @@ int git_attr_cache__get(
205
211
  git_attr_file **out,
206
212
  git_repository *repo,
207
213
  git_attr_session *attr_session,
208
- git_attr_file_source source,
209
- const char *base,
210
- const char *filename,
214
+ git_attr_file_source *source,
211
215
  git_attr_file_parser parser,
212
216
  bool allow_macros)
213
217
  {
@@ -216,19 +220,21 @@ int git_attr_cache__get(
216
220
  git_attr_file_entry *entry = NULL;
217
221
  git_attr_file *file = NULL, *updated = NULL;
218
222
 
219
- if ((error = attr_cache_lookup(
220
- &file, &entry, repo, attr_session, source, base, filename)) < 0)
223
+ if ((error = attr_cache_lookup(&file, &entry, repo, attr_session, source)) < 0)
221
224
  return error;
222
225
 
223
226
  /* load file if we don't have one or if existing one is out of date */
224
- if (!file || (error = git_attr_file__out_of_date(repo, attr_session, file)) > 0)
225
- error = git_attr_file__load(&updated, repo, attr_session, entry, source, parser, allow_macros);
227
+ if (!file ||
228
+ (error = git_attr_file__out_of_date(repo, attr_session, file, source)) > 0)
229
+ error = git_attr_file__load(&updated, repo, attr_session,
230
+ entry, source, parser,
231
+ allow_macros);
226
232
 
227
233
  /* if we loaded the file, insert into and/or update cache */
228
234
  if (updated) {
229
- if ((error = attr_cache_upsert(cache, updated)) < 0)
235
+ if ((error = attr_cache_upsert(cache, updated)) < 0) {
230
236
  git_attr_file__free(updated);
231
- else {
237
+ } else {
232
238
  git_attr_file__free(file); /* offset incref from lookup */
233
239
  file = updated;
234
240
  }
@@ -255,7 +261,7 @@ int git_attr_cache__get(
255
261
 
256
262
  bool git_attr_cache__is_cached(
257
263
  git_repository *repo,
258
- git_attr_file_source source,
264
+ git_attr_file_source_t source_type,
259
265
  const char *filename)
260
266
  {
261
267
  git_attr_cache *cache = git_repository_attr_cache(repo);
@@ -268,7 +274,7 @@ bool git_attr_cache__is_cached(
268
274
  if ((entry = git_strmap_get(files, filename)) == NULL)
269
275
  return false;
270
276
 
271
- return entry && (entry->file[source] != NULL);
277
+ return entry && (entry->file[source_type] != NULL);
272
278
  }
273
279
 
274
280
 
@@ -321,7 +327,7 @@ static void attr_cache__free(git_attr_cache *cache)
321
327
 
322
328
  git_strmap_foreach_value(cache->files, entry, {
323
329
  for (i = 0; i < GIT_ATTR_FILE_NUM_SOURCES; ++i) {
324
- if ((file = git__swap(entry->file[i], NULL)) != NULL) {
330
+ if ((file = git_atomic_swap(entry->file[i], NULL)) != NULL) {
325
331
  GIT_REFCOUNT_OWN(file, NULL);
326
332
  git_attr_file__free(file);
327
333
  }
@@ -391,13 +397,11 @@ int git_attr_cache__init(git_repository *repo)
391
397
  * hashtable for attribute macros, and string pool
392
398
  */
393
399
  if ((ret = git_strmap_new(&cache->files)) < 0 ||
394
- (ret = git_strmap_new(&cache->macros)) < 0)
400
+ (ret = git_strmap_new(&cache->macros)) < 0 ||
401
+ (ret = git_pool_init(&cache->pool, 1)) < 0)
395
402
  goto cancel;
396
403
 
397
- git_pool_init(&cache->pool, 1);
398
-
399
- cache = git__compare_and_swap(&repo->attrcache, NULL, cache);
400
- if (cache)
404
+ if (git_atomic_compare_and_swap(&repo->attrcache, NULL, cache) != NULL)
401
405
  goto cancel; /* raced with another thread, free this but no error */
402
406
 
403
407
  git_config_free(cfg);
@@ -418,7 +422,7 @@ int git_attr_cache_flush(git_repository *repo)
418
422
  /* this could be done less expensively, but for now, we'll just free
419
423
  * the entire attrcache and let the next use reinitialize it...
420
424
  */
421
- if (repo && (cache = git__swap(repo->attrcache, NULL)) != NULL)
425
+ if (repo && (cache = git_atomic_swap(repo->attrcache, NULL)) != NULL)
422
426
  attr_cache__free(cache);
423
427
 
424
428
  return 0;