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
@@ -0,0 +1,58 @@
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
+ #ifndef INCLUDE_assert_safe_h__
8
+ #define INCLUDE_assert_safe_h__
9
+
10
+ /*
11
+ * In a debug build, we'll assert(3) for aide in debugging. In release
12
+ * builds, we will provide macros that will set an error message that
13
+ * indicate a failure and return. Note that memory leaks can occur in
14
+ * a release-mode assertion failure -- it is impractical to provide
15
+ * safe clean up routines in these very extreme failures, but care
16
+ * should be taken to not leak very large objects.
17
+ */
18
+
19
+ #if (defined(_DEBUG) || defined(GIT_ASSERT_HARD)) && GIT_ASSERT_HARD != 0
20
+ # include <assert.h>
21
+
22
+ # define GIT_ASSERT(expr) assert(expr)
23
+ # define GIT_ASSERT_ARG(expr) assert(expr)
24
+
25
+ # define GIT_ASSERT_WITH_RETVAL(expr, fail) assert(expr)
26
+ # define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) assert(expr)
27
+ #else
28
+
29
+ /** Internal consistency check to stop the function. */
30
+ # define GIT_ASSERT(expr) GIT_ASSERT_WITH_RETVAL(expr, -1)
31
+
32
+ /**
33
+ * Assert that a consumer-provided argument is valid, setting an
34
+ * actionable error message and returning -1 if it is not.
35
+ */
36
+ # define GIT_ASSERT_ARG(expr) GIT_ASSERT_ARG_WITH_RETVAL(expr, -1)
37
+
38
+ /** Internal consistency check to return the `fail` param on failure. */
39
+ # define GIT_ASSERT_WITH_RETVAL(expr, fail) \
40
+ GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INTERNAL, "unrecoverable internal error", fail)
41
+
42
+ /**
43
+ * Assert that a consumer-provided argument is valid, setting an
44
+ * actionable error message and returning the `fail` param if not.
45
+ */
46
+ # define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) \
47
+ GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INVALID, "invalid argument", fail)
48
+
49
+ # define GIT_ASSERT__WITH_RETVAL(expr, code, msg, fail) do { \
50
+ if (!(expr)) { \
51
+ git_error_set(code, "%s: '%s'", msg, #expr); \
52
+ return fail; \
53
+ } \
54
+ } while(0)
55
+
56
+ #endif /* GIT_ASSERT_HARD */
57
+
58
+ #endif
@@ -36,16 +36,16 @@ git_attr_value_t git_attr_value(const char *attr)
36
36
  static int collect_attr_files(
37
37
  git_repository *repo,
38
38
  git_attr_session *attr_session,
39
- uint32_t flags,
39
+ git_attr_options *opts,
40
40
  const char *path,
41
41
  git_vector *files);
42
42
 
43
43
  static void release_attr_files(git_vector *files);
44
44
 
45
- int git_attr_get(
45
+ int git_attr_get_ext(
46
46
  const char **value,
47
47
  git_repository *repo,
48
- uint32_t flags,
48
+ git_attr_options *opts,
49
49
  const char *pathname,
50
50
  const char *name)
51
51
  {
@@ -58,17 +58,20 @@ int git_attr_get(
58
58
  git_attr_rule *rule;
59
59
  git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
60
60
 
61
- assert(value && repo && name);
61
+ GIT_ASSERT_ARG(value);
62
+ GIT_ASSERT_ARG(repo);
63
+ GIT_ASSERT_ARG(name);
64
+ GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
62
65
 
63
66
  *value = NULL;
64
67
 
65
68
  if (git_repository_is_bare(repo))
66
69
  dir_flag = GIT_DIR_FLAG_FALSE;
67
70
 
68
- if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
71
+ if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
69
72
  return -1;
70
73
 
71
- if ((error = collect_attr_files(repo, NULL, flags, pathname, &files)) < 0)
74
+ if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0)
72
75
  goto cleanup;
73
76
 
74
77
  memset(&attr, 0, sizeof(attr));
@@ -95,6 +98,20 @@ cleanup:
95
98
  return error;
96
99
  }
97
100
 
101
+ int git_attr_get(
102
+ const char **value,
103
+ git_repository *repo,
104
+ uint32_t flags,
105
+ const char *pathname,
106
+ const char *name)
107
+ {
108
+ git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
109
+
110
+ opts.flags = flags;
111
+
112
+ return git_attr_get_ext(value, repo, &opts, pathname, name);
113
+ }
114
+
98
115
 
99
116
  typedef struct {
100
117
  git_attr_name name;
@@ -105,7 +122,7 @@ int git_attr_get_many_with_session(
105
122
  const char **values,
106
123
  git_repository *repo,
107
124
  git_attr_session *attr_session,
108
- uint32_t flags,
125
+ git_attr_options *opts,
109
126
  const char *pathname,
110
127
  size_t num_attr,
111
128
  const char **names)
@@ -123,15 +140,19 @@ int git_attr_get_many_with_session(
123
140
  if (!num_attr)
124
141
  return 0;
125
142
 
126
- assert(values && repo && names);
143
+ GIT_ASSERT_ARG(values);
144
+ GIT_ASSERT_ARG(repo);
145
+ GIT_ASSERT_ARG(pathname);
146
+ GIT_ASSERT_ARG(names);
147
+ GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
127
148
 
128
149
  if (git_repository_is_bare(repo))
129
150
  dir_flag = GIT_DIR_FLAG_FALSE;
130
151
 
131
- if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
152
+ if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
132
153
  return -1;
133
154
 
134
- if ((error = collect_attr_files(repo, attr_session, flags, pathname, &files)) < 0)
155
+ if ((error = collect_attr_files(repo, attr_session, opts, pathname, &files)) < 0)
135
156
  goto cleanup;
136
157
 
137
158
  info = git__calloc(num_attr, sizeof(attr_get_many_info));
@@ -184,9 +205,25 @@ int git_attr_get_many(
184
205
  const char *pathname,
185
206
  size_t num_attr,
186
207
  const char **names)
208
+ {
209
+ git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
210
+
211
+ opts.flags = flags;
212
+
213
+ return git_attr_get_many_with_session(
214
+ values, repo, NULL, &opts, pathname, num_attr, names);
215
+ }
216
+
217
+ int git_attr_get_many_ext(
218
+ const char **values,
219
+ git_repository *repo,
220
+ git_attr_options *opts,
221
+ const char *pathname,
222
+ size_t num_attr,
223
+ const char **names)
187
224
  {
188
225
  return git_attr_get_many_with_session(
189
- values, repo, NULL, flags, pathname, num_attr, names);
226
+ values, repo, NULL, opts, pathname, num_attr, names);
190
227
  }
191
228
 
192
229
  int git_attr_foreach(
@@ -195,6 +232,20 @@ int git_attr_foreach(
195
232
  const char *pathname,
196
233
  int (*callback)(const char *name, const char *value, void *payload),
197
234
  void *payload)
235
+ {
236
+ git_attr_options opts = GIT_ATTR_OPTIONS_INIT;
237
+
238
+ opts.flags = flags;
239
+
240
+ return git_attr_foreach_ext(repo, &opts, pathname, callback, payload);
241
+ }
242
+
243
+ int git_attr_foreach_ext(
244
+ git_repository *repo,
245
+ git_attr_options *opts,
246
+ const char *pathname,
247
+ int (*callback)(const char *name, const char *value, void *payload),
248
+ void *payload)
198
249
  {
199
250
  int error;
200
251
  git_attr_path path;
@@ -206,15 +257,17 @@ int git_attr_foreach(
206
257
  git_strmap *seen = NULL;
207
258
  git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
208
259
 
209
- assert(repo && callback);
260
+ GIT_ASSERT_ARG(repo);
261
+ GIT_ASSERT_ARG(callback);
262
+ GIT_ERROR_CHECK_VERSION(opts, GIT_ATTR_OPTIONS_VERSION, "git_attr_options");
210
263
 
211
264
  if (git_repository_is_bare(repo))
212
265
  dir_flag = GIT_DIR_FLAG_FALSE;
213
266
 
214
- if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
267
+ if (git_attr_path__init(&path, repo, pathname, git_repository_workdir(repo), dir_flag) < 0)
215
268
  return -1;
216
269
 
217
- if ((error = collect_attr_files(repo, NULL, flags, pathname, &files)) < 0 ||
270
+ if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0 ||
218
271
  (error = git_strmap_new(&seen)) < 0)
219
272
  goto cleanup;
220
273
 
@@ -247,26 +300,43 @@ cleanup:
247
300
  return error;
248
301
  }
249
302
 
250
- static int preload_attr_file(
303
+ static int preload_attr_source(
251
304
  git_repository *repo,
252
305
  git_attr_session *attr_session,
253
- git_attr_file_source source,
254
- const char *base,
255
- const char *file,
256
- bool allow_macros)
306
+ git_attr_file_source *source)
257
307
  {
258
308
  int error;
259
309
  git_attr_file *preload = NULL;
260
310
 
261
- if (!file)
311
+ if (!source)
262
312
  return 0;
263
- if (!(error = git_attr_cache__get(&preload, repo, attr_session, source, base, file,
264
- git_attr_file__parse_buffer, allow_macros)))
313
+
314
+ error = git_attr_cache__get(&preload, repo, attr_session, source,
315
+ git_attr_file__parse_buffer, true);
316
+
317
+ if (!error)
265
318
  git_attr_file__free(preload);
266
319
 
267
320
  return error;
268
321
  }
269
322
 
323
+ GIT_INLINE(int) preload_attr_file(
324
+ git_repository *repo,
325
+ git_attr_session *attr_session,
326
+ const char *base,
327
+ const char *filename)
328
+ {
329
+ git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE };
330
+
331
+ if (!filename)
332
+ return 0;
333
+
334
+ source.base = base;
335
+ source.filename = filename;
336
+
337
+ return preload_attr_source(repo, attr_session, &source);
338
+ }
339
+
270
340
  static int system_attr_file(
271
341
  git_buf *out,
272
342
  git_attr_session *attr_session)
@@ -308,9 +378,12 @@ static int system_attr_file(
308
378
  static int attr_setup(
309
379
  git_repository *repo,
310
380
  git_attr_session *attr_session,
311
- uint32_t flags)
381
+ git_attr_options *opts)
312
382
  {
313
- git_buf path = GIT_BUF_INIT;
383
+ git_buf system = GIT_BUF_INIT, info = GIT_BUF_INIT;
384
+ git_attr_file_source index_source = { GIT_ATTR_FILE_SOURCE_INDEX, NULL, GIT_ATTR_FILE, NULL };
385
+ git_attr_file_source head_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
386
+ git_attr_file_source commit_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
314
387
  git_index *idx = NULL;
315
388
  const char *workdir;
316
389
  int error = 0;
@@ -326,45 +399,51 @@ static int attr_setup(
326
399
  * definitions will be available for later file parsing.
327
400
  */
328
401
 
329
- if ((error = system_attr_file(&path, attr_session)) < 0 ||
330
- (error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
331
- NULL, path.ptr, true)) < 0) {
402
+ if ((error = system_attr_file(&system, attr_session)) < 0 ||
403
+ (error = preload_attr_file(repo, attr_session, NULL, system.ptr)) < 0) {
332
404
  if (error != GIT_ENOTFOUND)
333
405
  goto out;
406
+
407
+ error = 0;
334
408
  }
335
409
 
336
- if ((error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
337
- NULL, git_repository_attr_cache(repo)->cfg_attr_file, true)) < 0)
410
+ if ((error = preload_attr_file(repo, attr_session, NULL,
411
+ git_repository_attr_cache(repo)->cfg_attr_file)) < 0)
338
412
  goto out;
339
413
 
340
- git_buf_clear(&path); /* git_repository_item_path expects an empty buffer, because it uses git_buf_set */
341
- if ((error = git_repository_item_path(&path, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
342
- (error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
343
- path.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
414
+ if ((error = git_repository_item_path(&info, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
415
+ (error = preload_attr_file(repo, attr_session, info.ptr, GIT_ATTR_FILE_INREPO)) < 0) {
344
416
  if (error != GIT_ENOTFOUND)
345
417
  goto out;
418
+
419
+ error = 0;
346
420
  }
347
421
 
348
422
  if ((workdir = git_repository_workdir(repo)) != NULL &&
349
- (error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_FILE,
350
- workdir, GIT_ATTR_FILE, true)) < 0)
423
+ (error = preload_attr_file(repo, attr_session, workdir, GIT_ATTR_FILE)) < 0)
351
424
  goto out;
352
425
 
353
426
  if ((error = git_repository_index__weakptr(&idx, repo)) < 0 ||
354
- (error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_INDEX,
355
- NULL, GIT_ATTR_FILE, true)) < 0)
427
+ (error = preload_attr_source(repo, attr_session, &index_source)) < 0)
356
428
  goto out;
357
429
 
358
- if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0 &&
359
- (error = preload_attr_file(repo, attr_session, GIT_ATTR_FILE__FROM_HEAD,
360
- NULL, GIT_ATTR_FILE, true)) < 0)
430
+ if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0) &&
431
+ (error = preload_attr_source(repo, attr_session, &head_source)) < 0)
361
432
  goto out;
362
433
 
434
+ if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_COMMIT) != 0)) {
435
+ commit_source.commit_id = opts->commit_id;
436
+
437
+ if ((error = preload_attr_source(repo, attr_session, &commit_source)) < 0)
438
+ goto out;
439
+ }
440
+
363
441
  if (attr_session)
364
442
  attr_session->init_setup = 1;
365
443
 
366
444
  out:
367
- git_buf_dispose(&path);
445
+ git_buf_dispose(&system);
446
+ git_buf_dispose(&info);
368
447
 
369
448
  return error;
370
449
  }
@@ -378,6 +457,9 @@ int git_attr_add_macro(
378
457
  git_attr_rule *macro = NULL;
379
458
  git_pool *pool;
380
459
 
460
+ GIT_ASSERT_ARG(repo);
461
+ GIT_ASSERT_ARG(name);
462
+
381
463
  if ((error = git_attr_cache__init(repo)) < 0)
382
464
  return error;
383
465
 
@@ -406,56 +488,60 @@ int git_attr_add_macro(
406
488
  typedef struct {
407
489
  git_repository *repo;
408
490
  git_attr_session *attr_session;
409
- uint32_t flags;
491
+ git_attr_options *opts;
410
492
  const char *workdir;
411
493
  git_index *index;
412
494
  git_vector *files;
413
495
  } attr_walk_up_info;
414
496
 
415
497
  static int attr_decide_sources(
416
- uint32_t flags, bool has_wd, bool has_index, git_attr_file_source *srcs)
498
+ uint32_t flags,
499
+ bool has_wd,
500
+ bool has_index,
501
+ git_attr_file_source_t *srcs)
417
502
  {
418
503
  int count = 0;
419
504
 
420
505
  switch (flags & 0x03) {
421
506
  case GIT_ATTR_CHECK_FILE_THEN_INDEX:
422
507
  if (has_wd)
423
- srcs[count++] = GIT_ATTR_FILE__FROM_FILE;
508
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_FILE;
424
509
  if (has_index)
425
- srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
510
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
426
511
  break;
427
512
  case GIT_ATTR_CHECK_INDEX_THEN_FILE:
428
513
  if (has_index)
429
- srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
514
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
430
515
  if (has_wd)
431
- srcs[count++] = GIT_ATTR_FILE__FROM_FILE;
516
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_FILE;
432
517
  break;
433
518
  case GIT_ATTR_CHECK_INDEX_ONLY:
434
519
  if (has_index)
435
- srcs[count++] = GIT_ATTR_FILE__FROM_INDEX;
520
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_INDEX;
436
521
  break;
437
522
  }
438
523
 
439
- if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0)
440
- srcs[count++] = GIT_ATTR_FILE__FROM_HEAD;
524
+ if ((flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0 ||
525
+ (flags & GIT_ATTR_CHECK_INCLUDE_COMMIT) != 0)
526
+ srcs[count++] = GIT_ATTR_FILE_SOURCE_COMMIT;
441
527
 
442
528
  return count;
443
529
  }
444
530
 
445
- static int push_attr_file(
531
+ static int push_attr_source(
446
532
  git_repository *repo,
447
533
  git_attr_session *attr_session,
448
534
  git_vector *list,
449
- git_attr_file_source source,
450
- const char *base,
451
- const char *filename,
535
+ git_attr_file_source *source,
452
536
  bool allow_macros)
453
537
  {
454
538
  int error = 0;
455
539
  git_attr_file *file = NULL;
456
540
 
457
541
  error = git_attr_cache__get(&file, repo, attr_session,
458
- source, base, filename, git_attr_file__parse_buffer, allow_macros);
542
+ source,
543
+ git_attr_file__parse_buffer,
544
+ allow_macros);
459
545
 
460
546
  if (error < 0)
461
547
  return error;
@@ -468,20 +554,40 @@ static int push_attr_file(
468
554
  return error;
469
555
  }
470
556
 
557
+ GIT_INLINE(int) push_attr_file(
558
+ git_repository *repo,
559
+ git_attr_session *attr_session,
560
+ git_vector *list,
561
+ const char *base,
562
+ const char *filename)
563
+ {
564
+ git_attr_file_source source = { GIT_ATTR_FILE_SOURCE_FILE, base, filename };
565
+ return push_attr_source(repo, attr_session, list, &source, true);
566
+ }
567
+
471
568
  static int push_one_attr(void *ref, const char *path)
472
569
  {
473
570
  attr_walk_up_info *info = (attr_walk_up_info *)ref;
474
- git_attr_file_source src[GIT_ATTR_FILE_NUM_SOURCES];
571
+ git_attr_file_source_t src[GIT_ATTR_FILE_NUM_SOURCES];
475
572
  int error = 0, n_src, i;
476
573
  bool allow_macros;
477
574
 
478
- n_src = attr_decide_sources(
479
- info->flags, info->workdir != NULL, info->index != NULL, src);
575
+ n_src = attr_decide_sources(info->opts ? info->opts->flags : 0,
576
+ info->workdir != NULL,
577
+ info->index != NULL,
578
+ src);
579
+
480
580
  allow_macros = info->workdir ? !strcmp(info->workdir, path) : false;
481
581
 
482
- for (i = 0; !error && i < n_src; ++i)
483
- error = push_attr_file(info->repo, info->attr_session, info->files,
484
- src[i], path, GIT_ATTR_FILE, allow_macros);
582
+ for (i = 0; !error && i < n_src; ++i) {
583
+ git_attr_file_source source = { src[i], path, GIT_ATTR_FILE };
584
+
585
+ if (src[i] == GIT_ATTR_FILE_SOURCE_COMMIT && info->opts)
586
+ source.commit_id = info->opts->commit_id;
587
+
588
+ error = push_attr_source(info->repo, info->attr_session, info->files,
589
+ &source, allow_macros);
590
+ }
485
591
 
486
592
  return error;
487
593
  }
@@ -501,7 +607,7 @@ static void release_attr_files(git_vector *files)
501
607
  static int collect_attr_files(
502
608
  git_repository *repo,
503
609
  git_attr_session *attr_session,
504
- uint32_t flags,
610
+ git_attr_options *opts,
505
611
  const char *path,
506
612
  git_vector *files)
507
613
  {
@@ -510,14 +616,18 @@ static int collect_attr_files(
510
616
  const char *workdir = git_repository_workdir(repo);
511
617
  attr_walk_up_info info = { NULL };
512
618
 
513
- if ((error = attr_setup(repo, attr_session, flags)) < 0)
619
+ if ((error = attr_setup(repo, attr_session, opts)) < 0)
514
620
  return error;
515
621
 
516
622
  /* Resolve path in a non-bare repo */
517
- if (workdir != NULL)
518
- error = git_path_find_dir(&dir, path, workdir);
519
- else
623
+ if (workdir != NULL) {
624
+ if (!(error = git_repository_workdir_path(&dir, repo, path)))
625
+ error = git_path_find_dir(&dir);
626
+ }
627
+ else {
520
628
  error = git_path_dirname_r(&dir, path);
629
+ }
630
+
521
631
  if (error < 0)
522
632
  goto cleanup;
523
633
 
@@ -529,15 +639,14 @@ static int collect_attr_files(
529
639
  */
530
640
 
531
641
  if ((error = git_repository_item_path(&attrfile, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
532
- (error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
533
- attrfile.ptr, GIT_ATTR_FILE_INREPO, true)) < 0) {
642
+ (error = push_attr_file(repo, attr_session, files, attrfile.ptr, GIT_ATTR_FILE_INREPO)) < 0) {
534
643
  if (error != GIT_ENOTFOUND)
535
644
  goto cleanup;
536
645
  }
537
646
 
538
647
  info.repo = repo;
539
648
  info.attr_session = attr_session;
540
- info.flags = flags;
649
+ info.opts = opts;
541
650
  info.workdir = workdir;
542
651
  if (git_repository_index__weakptr(&info.index, repo) < 0)
543
652
  git_error_clear(); /* no error even if there is no index */
@@ -552,18 +661,16 @@ static int collect_attr_files(
552
661
  goto cleanup;
553
662
 
554
663
  if (git_repository_attr_cache(repo)->cfg_attr_file != NULL) {
555
- error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
556
- NULL, git_repository_attr_cache(repo)->cfg_attr_file, true);
664
+ error = push_attr_file(repo, attr_session, files, NULL, git_repository_attr_cache(repo)->cfg_attr_file);
557
665
  if (error < 0)
558
666
  goto cleanup;
559
667
  }
560
668
 
561
- if ((flags & GIT_ATTR_CHECK_NO_SYSTEM) == 0) {
669
+ if (!opts || (opts->flags & GIT_ATTR_CHECK_NO_SYSTEM) == 0) {
562
670
  error = system_attr_file(&dir, attr_session);
563
671
 
564
672
  if (!error)
565
- error = push_attr_file(repo, attr_session, files, GIT_ATTR_FILE__FROM_FILE,
566
- NULL, dir.ptr, true);
673
+ error = push_attr_file(repo, attr_session, files, NULL, dir.ptr);
567
674
  else if (error == GIT_ENOTFOUND)
568
675
  error = 0;
569
676
  }