rugged 1.3.1 → 1.9.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 (656) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +6 -3
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_allocator.c +0 -54
  7. data/ext/rugged/rugged_blame.c +2 -0
  8. data/ext/rugged/rugged_blob.c +3 -0
  9. data/ext/rugged/rugged_commit.c +1 -0
  10. data/ext/rugged/rugged_config.c +9 -2
  11. data/ext/rugged/rugged_diff.c +1 -0
  12. data/ext/rugged/rugged_index.c +2 -0
  13. data/ext/rugged/rugged_patch.c +1 -0
  14. data/ext/rugged/rugged_rebase.c +1 -0
  15. data/ext/rugged/rugged_reference.c +1 -0
  16. data/ext/rugged/rugged_remote.c +28 -10
  17. data/ext/rugged/rugged_repo.c +7 -9
  18. data/ext/rugged/rugged_revwalk.c +5 -1
  19. data/ext/rugged/rugged_settings.c +5 -0
  20. data/ext/rugged/rugged_submodule.c +1 -0
  21. data/ext/rugged/rugged_tag.c +1 -0
  22. data/ext/rugged/rugged_tree.c +4 -0
  23. data/lib/rugged/index.rb +1 -1
  24. data/lib/rugged/tree.rb +5 -1
  25. data/lib/rugged/version.rb +1 -1
  26. data/vendor/libgit2/AUTHORS +1 -0
  27. data/vendor/libgit2/CMakeLists.txt +141 -289
  28. data/vendor/libgit2/COPYING +301 -20
  29. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  30. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  31. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  33. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  34. data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
  35. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  36. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  37. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  38. data/vendor/libgit2/cmake/FindHTTP_Parser.cmake +17 -17
  39. data/vendor/libgit2/cmake/FindIntlIconv.cmake +51 -0
  40. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  41. data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
  42. data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
  43. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  44. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  45. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  46. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  47. data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
  48. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  49. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  50. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  51. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  52. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  53. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +34 -0
  54. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +129 -101
  55. data/vendor/libgit2/cmake/SelectHashes.cmake +113 -54
  56. data/vendor/libgit2/cmake/SelectRegex.cmake +56 -0
  57. data/vendor/libgit2/cmake/SelectSSH.cmake +46 -0
  58. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  59. data/vendor/libgit2/cmake/SelectZlib.cmake +38 -0
  60. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
  61. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  62. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  63. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  64. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  65. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  66. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  67. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
  68. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  69. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  70. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  71. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +7 -5
  72. data/vendor/libgit2/deps/ntlmclient/ntlm.c +25 -25
  73. data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
  74. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
  75. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  76. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  77. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  78. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  79. data/vendor/libgit2/deps/pcre/CMakeLists.txt +89 -88
  80. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  81. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  82. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  83. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  84. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  85. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  86. data/vendor/libgit2/deps/xdiff/git-xdiff.h +56 -0
  87. data/vendor/libgit2/{src → deps}/xdiff/xdiff.h +15 -15
  88. data/vendor/libgit2/{src → deps}/xdiff/xdiffi.c +152 -125
  89. data/vendor/libgit2/{src → deps}/xdiff/xdiffi.h +2 -4
  90. data/vendor/libgit2/{src → deps}/xdiff/xemit.c +26 -10
  91. data/vendor/libgit2/{src → deps}/xdiff/xhistogram.c +92 -94
  92. data/vendor/libgit2/{src → deps}/xdiff/xinclude.h +1 -12
  93. data/vendor/libgit2/{src → deps}/xdiff/xmacros.h +18 -1
  94. data/vendor/libgit2/{src → deps}/xdiff/xmerge.c +126 -137
  95. data/vendor/libgit2/{src → deps}/xdiff/xpatience.c +26 -46
  96. data/vendor/libgit2/{src → deps}/xdiff/xprepare.c +24 -46
  97. data/vendor/libgit2/{src → deps}/xdiff/xutils.c +36 -8
  98. data/vendor/libgit2/{src → deps}/xdiff/xutils.h +2 -1
  99. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  100. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  101. data/vendor/libgit2/deps/zlib/adler32.c +7 -22
  102. data/vendor/libgit2/deps/zlib/crc32.c +931 -317
  103. data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
  104. data/vendor/libgit2/deps/zlib/deflate.c +428 -453
  105. data/vendor/libgit2/deps/zlib/deflate.h +51 -23
  106. data/vendor/libgit2/deps/zlib/gzguts.h +15 -19
  107. data/vendor/libgit2/deps/zlib/infback.c +19 -31
  108. data/vendor/libgit2/deps/zlib/inffast.c +15 -18
  109. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  110. data/vendor/libgit2/deps/zlib/inflate.c +75 -110
  111. data/vendor/libgit2/deps/zlib/inflate.h +3 -2
  112. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  113. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  114. data/vendor/libgit2/deps/zlib/trees.c +294 -380
  115. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  116. data/vendor/libgit2/deps/zlib/zlib.h +310 -284
  117. data/vendor/libgit2/deps/zlib/zutil.c +20 -46
  118. data/vendor/libgit2/deps/zlib/zutil.h +24 -41
  119. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  120. data/vendor/libgit2/include/git2/apply.h +43 -8
  121. data/vendor/libgit2/include/git2/attr.h +28 -6
  122. data/vendor/libgit2/include/git2/blame.h +137 -29
  123. data/vendor/libgit2/include/git2/blob.h +85 -29
  124. data/vendor/libgit2/include/git2/branch.h +25 -16
  125. data/vendor/libgit2/include/git2/buffer.h +24 -82
  126. data/vendor/libgit2/include/git2/cert.h +4 -3
  127. data/vendor/libgit2/include/git2/checkout.h +88 -34
  128. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  129. data/vendor/libgit2/include/git2/clone.h +28 -12
  130. data/vendor/libgit2/include/git2/commit.h +134 -3
  131. data/vendor/libgit2/include/git2/common.h +172 -59
  132. data/vendor/libgit2/include/git2/config.h +118 -32
  133. data/vendor/libgit2/include/git2/credential.h +32 -3
  134. data/vendor/libgit2/include/git2/credential_helpers.h +2 -0
  135. data/vendor/libgit2/include/git2/deprecated.h +141 -3
  136. data/vendor/libgit2/include/git2/describe.h +20 -3
  137. data/vendor/libgit2/include/git2/diff.h +95 -19
  138. data/vendor/libgit2/include/git2/email.h +10 -30
  139. data/vendor/libgit2/include/git2/errors.h +51 -61
  140. data/vendor/libgit2/include/git2/experimental.h +20 -0
  141. data/vendor/libgit2/include/git2/filter.h +21 -9
  142. data/vendor/libgit2/include/git2/global.h +8 -1
  143. data/vendor/libgit2/include/git2/graph.h +4 -2
  144. data/vendor/libgit2/include/git2/ignore.h +11 -1
  145. data/vendor/libgit2/include/git2/index.h +111 -11
  146. data/vendor/libgit2/include/git2/indexer.h +67 -2
  147. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  148. data/vendor/libgit2/include/git2/merge.h +70 -5
  149. data/vendor/libgit2/include/git2/message.h +4 -2
  150. data/vendor/libgit2/include/git2/net.h +3 -1
  151. data/vendor/libgit2/include/git2/notes.h +9 -6
  152. data/vendor/libgit2/include/git2/object.h +57 -7
  153. data/vendor/libgit2/include/git2/odb.h +156 -33
  154. data/vendor/libgit2/include/git2/odb_backend.h +132 -16
  155. data/vendor/libgit2/include/git2/oid.h +116 -17
  156. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  157. data/vendor/libgit2/include/git2/pack.h +37 -9
  158. data/vendor/libgit2/include/git2/patch.h +10 -3
  159. data/vendor/libgit2/include/git2/pathspec.h +10 -1
  160. data/vendor/libgit2/include/git2/proxy.h +11 -1
  161. data/vendor/libgit2/include/git2/rebase.h +18 -7
  162. data/vendor/libgit2/include/git2/refdb.h +5 -2
  163. data/vendor/libgit2/include/git2/reflog.h +4 -3
  164. data/vendor/libgit2/include/git2/refs.h +11 -8
  165. data/vendor/libgit2/include/git2/refspec.h +14 -4
  166. data/vendor/libgit2/include/git2/remote.h +295 -54
  167. data/vendor/libgit2/include/git2/repository.h +95 -25
  168. data/vendor/libgit2/include/git2/reset.h +18 -5
  169. data/vendor/libgit2/include/git2/revert.h +9 -4
  170. data/vendor/libgit2/include/git2/revparse.h +4 -4
  171. data/vendor/libgit2/include/git2/revwalk.h +7 -3
  172. data/vendor/libgit2/include/git2/signature.h +47 -2
  173. data/vendor/libgit2/include/git2/stash.h +78 -10
  174. data/vendor/libgit2/include/git2/status.h +24 -11
  175. data/vendor/libgit2/include/git2/stdint.h +87 -85
  176. data/vendor/libgit2/include/git2/strarray.h +2 -16
  177. data/vendor/libgit2/include/git2/submodule.h +27 -11
  178. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  179. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  180. data/vendor/libgit2/include/git2/sys/commit_graph.h +110 -59
  181. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  182. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  183. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  184. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  185. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  186. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  187. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  188. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  189. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  190. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  191. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  192. data/vendor/libgit2/include/git2/sys/odb_backend.h +10 -9
  193. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  194. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  195. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  196. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  197. data/vendor/libgit2/include/git2/sys/remote.h +53 -0
  198. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  199. data/vendor/libgit2/include/git2/sys/stream.h +26 -3
  200. data/vendor/libgit2/include/git2/sys/transport.h +87 -41
  201. data/vendor/libgit2/include/git2/tag.h +4 -1
  202. data/vendor/libgit2/include/git2/trace.h +9 -3
  203. data/vendor/libgit2/include/git2/transaction.h +3 -2
  204. data/vendor/libgit2/include/git2/transport.h +11 -3
  205. data/vendor/libgit2/include/git2/tree.h +20 -8
  206. data/vendor/libgit2/include/git2/types.h +26 -10
  207. data/vendor/libgit2/include/git2/version.h +63 -6
  208. data/vendor/libgit2/include/git2/worktree.h +30 -8
  209. data/vendor/libgit2/include/git2.h +1 -0
  210. data/vendor/libgit2/src/CMakeLists.txt +203 -420
  211. data/vendor/libgit2/src/README.md +12 -0
  212. data/vendor/libgit2/src/cli/CMakeLists.txt +56 -0
  213. data/vendor/libgit2/src/cli/README.md +26 -0
  214. data/vendor/libgit2/src/{branch.h → cli/cmd.c} +10 -8
  215. data/vendor/libgit2/src/cli/cmd.h +37 -0
  216. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  217. data/vendor/libgit2/src/cli/cmd_cat_file.c +202 -0
  218. data/vendor/libgit2/src/cli/cmd_clone.c +190 -0
  219. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  220. data/vendor/libgit2/src/cli/cmd_hash_object.c +152 -0
  221. data/vendor/libgit2/src/cli/cmd_help.c +85 -0
  222. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  223. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  224. data/vendor/libgit2/src/cli/common.c +168 -0
  225. data/vendor/libgit2/src/cli/common.h +63 -0
  226. data/vendor/libgit2/src/cli/error.h +51 -0
  227. data/vendor/libgit2/src/cli/main.c +134 -0
  228. data/vendor/libgit2/src/cli/opt.c +695 -0
  229. data/vendor/libgit2/src/cli/opt.h +367 -0
  230. data/vendor/libgit2/src/cli/opt_usage.c +263 -0
  231. data/vendor/libgit2/src/cli/opt_usage.h +40 -0
  232. data/vendor/libgit2/src/cli/progress.c +395 -0
  233. data/vendor/libgit2/src/cli/progress.h +129 -0
  234. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  235. data/vendor/libgit2/src/cli/unix/sighandler.c +37 -0
  236. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  237. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  238. data/vendor/libgit2/src/libgit2/CMakeLists.txt +140 -0
  239. data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +2 -2
  240. data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
  241. data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +32 -34
  242. data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
  243. data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +48 -31
  244. data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +25 -20
  245. data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +6 -4
  246. data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +87 -46
  247. data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +5 -9
  248. data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +152 -57
  249. data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +1 -0
  250. data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -2
  251. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
  252. data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
  253. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
  254. data/vendor/libgit2/src/libgit2/branch.h +31 -0
  255. data/vendor/libgit2/src/libgit2/buf.c +126 -0
  256. data/vendor/libgit2/src/libgit2/buf.h +50 -0
  257. data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +22 -17
  258. data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +7 -9
  259. data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +107 -91
  260. data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -2
  261. data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +14 -15
  262. data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +254 -203
  263. data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +4 -1
  264. data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +296 -77
  265. data/vendor/libgit2/src/libgit2/commit.h +87 -0
  266. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +246 -135
  267. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +33 -8
  268. data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +17 -7
  269. data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +1 -0
  270. data/vendor/libgit2/src/libgit2/common.h +55 -0
  271. data/vendor/libgit2/src/{config.c → libgit2/config.c} +490 -360
  272. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  273. data/vendor/libgit2/src/{config.h → libgit2/config.h} +24 -6
  274. data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +8 -10
  275. data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +4 -5
  276. data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +212 -183
  277. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  278. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  279. data/vendor/libgit2/src/libgit2/config_mem.c +374 -0
  280. data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +37 -32
  281. data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +24 -31
  282. data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
  283. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +62 -51
  284. data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +44 -14
  285. data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +8 -10
  286. data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +46 -55
  287. data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +5 -5
  288. data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +45 -27
  289. data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +70 -20
  290. data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
  291. data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +22 -6
  292. data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +192 -105
  293. data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
  294. data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
  295. data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +49 -16
  296. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
  297. data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +1 -1
  298. data/vendor/libgit2/src/{email.c → libgit2/email.c} +58 -40
  299. data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
  300. data/vendor/libgit2/src/{transports/ssh.h → libgit2/experimental.h.in} +3 -4
  301. data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +105 -30
  302. data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -3
  303. data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +30 -28
  304. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +132 -58
  305. data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
  306. data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +3 -3
  307. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  308. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  309. data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +1 -1
  310. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  311. data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
  312. data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +44 -39
  313. data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
  314. data/vendor/libgit2/src/{index.c → libgit2/index.c} +460 -276
  315. data/vendor/libgit2/src/{index.h → libgit2/index.h} +21 -5
  316. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  317. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  318. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +208 -124
  319. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +102 -71
  320. data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +8 -5
  321. data/vendor/libgit2/src/libgit2/libgit2.c +268 -0
  322. data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +39 -37
  323. data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +83 -73
  324. data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
  325. data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +4 -4
  326. data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -5
  327. data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
  328. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +174 -112
  329. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +17 -6
  330. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +53 -57
  331. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +9 -2
  332. data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +29 -37
  333. data/vendor/libgit2/src/{object.c → libgit2/object.c} +166 -35
  334. data/vendor/libgit2/src/{object.h → libgit2/object.h} +17 -2
  335. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +261 -88
  336. data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
  337. data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
  338. data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +67 -22
  339. data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +162 -89
  340. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +171 -92
  341. data/vendor/libgit2/src/libgit2/oid.h +284 -0
  342. data/vendor/libgit2/src/libgit2/oidarray.c +89 -0
  343. data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +5 -1
  344. data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +126 -66
  345. data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +28 -12
  346. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +146 -111
  347. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +45 -25
  348. data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +8 -4
  349. data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +1 -1
  350. data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
  351. data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +8 -1
  352. data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +51 -16
  353. data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
  354. data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +42 -34
  355. data/vendor/libgit2/src/libgit2/path.c +375 -0
  356. data/vendor/libgit2/src/libgit2/path.h +68 -0
  357. data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +7 -7
  358. data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
  359. data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
  360. data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
  361. data/vendor/libgit2/src/{push.c → libgit2/push.c} +116 -60
  362. data/vendor/libgit2/src/{push.h → libgit2/push.h} +5 -16
  363. data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
  364. data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
  365. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +147 -147
  366. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +639 -254
  367. data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +8 -7
  368. data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +3 -2
  369. data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +67 -39
  370. data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +8 -3
  371. data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +60 -38
  372. data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +13 -2
  373. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +821 -454
  374. data/vendor/libgit2/src/libgit2/remote.h +101 -0
  375. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1377 -594
  376. data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +43 -12
  377. data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
  378. data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +18 -22
  379. data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +76 -44
  380. data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +48 -19
  381. data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +3 -3
  382. data/vendor/libgit2/src/{libgit2.c → libgit2/settings.c} +162 -95
  383. data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +6 -2
  384. data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +144 -21
  385. data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -2
  386. data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +243 -68
  387. data/vendor/libgit2/src/{status.c → libgit2/status.c} +5 -2
  388. data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
  389. data/vendor/libgit2/src/libgit2/strarray.h +25 -0
  390. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +62 -67
  391. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +41 -24
  392. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +2 -0
  393. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +11 -3
  394. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +6 -3
  395. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  396. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  397. data/vendor/libgit2/src/libgit2/streams/socket.c +428 -0
  398. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +3 -1
  399. data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +79 -19
  400. data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +5 -0
  401. data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +279 -220
  402. data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +10 -11
  403. data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
  404. data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +55 -18
  405. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +74 -43
  406. data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
  407. data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
  408. data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
  409. data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +7 -7
  410. data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +27 -21
  411. data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +4 -1
  412. data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +14 -11
  413. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
  414. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +3 -5
  415. data/vendor/libgit2/src/{transports/auth_negotiate.c → libgit2/transports/auth_gssapi.c} +44 -45
  416. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +1 -1
  417. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +1 -2
  418. data/vendor/libgit2/src/{transports/auth_ntlm.c → libgit2/transports/auth_ntlmclient.c} +22 -22
  419. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  420. data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +1 -1
  421. data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +16 -19
  422. data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +49 -24
  423. data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -11
  424. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +188 -134
  425. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
  426. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  427. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  428. data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +159 -127
  429. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +142 -165
  430. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +56 -36
  431. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +307 -74
  432. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +297 -97
  433. data/vendor/libgit2/src/libgit2/transports/ssh.c +85 -0
  434. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  435. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  436. data/vendor/libgit2/src/{transports/ssh.c → libgit2/transports/ssh_libssh2.c} +414 -268
  437. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  438. data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +101 -75
  439. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +30 -20
  440. data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +7 -5
  441. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +128 -110
  442. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +7 -6
  443. data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +160 -121
  444. data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
  445. data/vendor/libgit2/src/util/CMakeLists.txt +77 -0
  446. data/vendor/libgit2/src/{alloc.c → util/alloc.c} +69 -7
  447. data/vendor/libgit2/src/util/alloc.h +65 -0
  448. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  449. data/vendor/libgit2/src/util/allocators/debugalloc.h +17 -0
  450. data/vendor/libgit2/src/util/allocators/failalloc.c +32 -0
  451. data/vendor/libgit2/src/util/allocators/failalloc.h +17 -0
  452. data/vendor/libgit2/src/util/allocators/stdalloc.c +37 -0
  453. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  454. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +50 -0
  455. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  456. data/vendor/libgit2/src/{array.h → util/array.h} +25 -19
  457. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  458. data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +5 -1
  459. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  460. data/vendor/libgit2/src/{date.c → util/date.c} +35 -33
  461. data/vendor/libgit2/src/util/date.h +45 -0
  462. data/vendor/libgit2/src/util/errors.c +401 -0
  463. data/vendor/libgit2/src/{errors.h → util/errors.h} +22 -19
  464. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +35 -30
  465. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +21 -8
  466. data/vendor/libgit2/src/{path.c → util/fs_path.c} +591 -615
  467. data/vendor/libgit2/src/{path.h → util/fs_path.h} +257 -181
  468. data/vendor/libgit2/src/{futils.c → util/futils.c} +144 -95
  469. data/vendor/libgit2/src/{futils.h → util/futils.h} +40 -18
  470. data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +33 -2
  471. data/vendor/libgit2/src/{common.h → util/git2_util.h} +26 -59
  472. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  473. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  474. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
  475. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  476. data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
  477. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  478. data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
  479. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  480. data/vendor/libgit2/src/util/hash/openssl.c +347 -0
  481. data/vendor/libgit2/src/util/hash/openssl.h +61 -0
  482. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
  483. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  484. data/vendor/libgit2/src/util/hash/sha.h +73 -0
  485. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
  486. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  487. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  488. data/vendor/libgit2/src/util/hash.c +158 -0
  489. data/vendor/libgit2/src/util/hash.h +61 -0
  490. data/vendor/libgit2/src/util/hashmap.h +424 -0
  491. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  492. data/vendor/libgit2/src/{integer.h → util/integer.h} +3 -1
  493. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  494. data/vendor/libgit2/src/util/net.c +1160 -0
  495. data/vendor/libgit2/src/{net.h → util/net.h} +45 -4
  496. data/vendor/libgit2/src/{pool.c → util/pool.c} +1 -1
  497. data/vendor/libgit2/src/{pool.h → util/pool.h} +6 -1
  498. data/vendor/libgit2/src/{posix.c → util/posix.c} +57 -3
  499. data/vendor/libgit2/src/{posix.h → util/posix.h} +26 -1
  500. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +3 -3
  501. data/vendor/libgit2/src/util/process.h +222 -0
  502. data/vendor/libgit2/src/util/rand.c +230 -0
  503. data/vendor/libgit2/src/util/rand.h +37 -0
  504. data/vendor/libgit2/src/{regexp.c → util/regexp.c} +5 -5
  505. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  506. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  507. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  508. data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +15 -14
  509. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +5 -5
  510. data/vendor/libgit2/src/util/staticstr.h +66 -0
  511. data/vendor/libgit2/src/{buffer.c → util/str.c} +159 -153
  512. data/vendor/libgit2/src/util/str.h +357 -0
  513. data/vendor/libgit2/src/util/strlist.c +108 -0
  514. data/vendor/libgit2/src/util/strlist.h +36 -0
  515. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  516. data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
  517. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  518. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
  519. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -6
  520. data/vendor/libgit2/src/util/unix/process.c +629 -0
  521. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +24 -8
  522. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  523. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  524. data/vendor/libgit2/src/{util.c → util/util.c} +24 -19
  525. data/vendor/libgit2/src/{util.h → util/util.h} +30 -81
  526. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  527. data/vendor/libgit2/src/{vector.c → util/vector.c} +3 -3
  528. data/vendor/libgit2/src/{vector.h → util/vector.h} +4 -4
  529. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  530. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  531. data/vendor/libgit2/src/{win32 → util/win32}/error.c +1 -1
  532. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  533. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  534. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +148 -17
  535. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
  536. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
  537. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +42 -35
  538. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  539. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  540. data/vendor/libgit2/src/util/win32/process.c +506 -0
  541. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  542. data/vendor/libgit2/src/util/win32/utf-conv.c +144 -0
  543. data/vendor/libgit2/src/util/win32/utf-conv.h +127 -0
  544. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
  545. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
  546. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
  547. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  548. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +1 -1
  549. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  550. data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
  551. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
  552. metadata +431 -362
  553. data/vendor/libgit2/cmake/FindIconv.cmake +0 -45
  554. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  555. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  556. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  557. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  558. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  559. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  560. data/vendor/libgit2/src/alloc.h +0 -40
  561. data/vendor/libgit2/src/allocators/failalloc.c +0 -92
  562. data/vendor/libgit2/src/allocators/failalloc.h +0 -23
  563. data/vendor/libgit2/src/allocators/stdalloc.c +0 -150
  564. data/vendor/libgit2/src/allocators/win32_leakcheck.c +0 -118
  565. data/vendor/libgit2/src/buffer.h +0 -374
  566. data/vendor/libgit2/src/commit.h +0 -46
  567. data/vendor/libgit2/src/config_entries.c +0 -237
  568. data/vendor/libgit2/src/config_entries.h +0 -24
  569. data/vendor/libgit2/src/config_mem.c +0 -220
  570. data/vendor/libgit2/src/errors.c +0 -238
  571. data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
  572. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  573. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  574. data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
  575. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  576. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  577. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  578. data/vendor/libgit2/src/hash/sha1.h +0 -38
  579. data/vendor/libgit2/src/hash.c +0 -110
  580. data/vendor/libgit2/src/hash.h +0 -46
  581. data/vendor/libgit2/src/idxmap.c +0 -157
  582. data/vendor/libgit2/src/idxmap.h +0 -177
  583. data/vendor/libgit2/src/khash.h +0 -615
  584. data/vendor/libgit2/src/libgit2.h +0 -15
  585. data/vendor/libgit2/src/message.h +0 -17
  586. data/vendor/libgit2/src/net.c +0 -540
  587. data/vendor/libgit2/src/netops.c +0 -125
  588. data/vendor/libgit2/src/netops.h +0 -68
  589. data/vendor/libgit2/src/offmap.c +0 -101
  590. data/vendor/libgit2/src/offmap.h +0 -133
  591. data/vendor/libgit2/src/oid.h +0 -51
  592. data/vendor/libgit2/src/oidarray.c +0 -43
  593. data/vendor/libgit2/src/oidmap.c +0 -107
  594. data/vendor/libgit2/src/oidmap.h +0 -128
  595. data/vendor/libgit2/src/remote.h +0 -55
  596. data/vendor/libgit2/src/streams/socket.c +0 -239
  597. data/vendor/libgit2/src/strmap.c +0 -100
  598. data/vendor/libgit2/src/strmap.h +0 -131
  599. data/vendor/libgit2/src/sysdir.c +0 -347
  600. data/vendor/libgit2/src/threadstate.c +0 -84
  601. data/vendor/libgit2/src/threadstate.h +0 -24
  602. data/vendor/libgit2/src/win32/findfile.c +0 -230
  603. data/vendor/libgit2/src/win32/findfile.h +0 -19
  604. data/vendor/libgit2/src/win32/utf-conv.c +0 -146
  605. data/vendor/libgit2/src/win32/utf-conv.h +0 -60
  606. /data/vendor/libgit2/{src → deps}/xdiff/xemit.h +0 -0
  607. /data/vendor/libgit2/{src → deps}/xdiff/xprepare.h +0 -0
  608. /data/vendor/libgit2/{src → deps}/xdiff/xtypes.h +0 -0
  609. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  610. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  611. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  612. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  613. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  614. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  615. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  616. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  617. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  618. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  619. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  620. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  621. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  622. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  623. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  624. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  625. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  626. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  627. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  628. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  629. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  630. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  631. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  632. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  633. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  634. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  635. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  636. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  637. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  638. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  639. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  640. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  641. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  642. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  643. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  644. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  645. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  646. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  647. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  648. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  649. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  650. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  651. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  652. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  653. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  654. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  655. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  656. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -12,6 +12,7 @@
12
12
  #include "git2/submodule.h"
13
13
  #include "git2/repository.h"
14
14
  #include "futils.h"
15
+ #include "hashmap.h"
15
16
 
16
17
  /* Notes:
17
18
  *
@@ -69,9 +70,9 @@
69
70
  * - `repo` is the parent repository that contains this submodule.
70
71
  * - `flags` after for internal use, tracking where this submodule has been
71
72
  * found (head, index, config, workdir) and known status info, etc.
72
- * - `head_oid` is the SHA1 for the submodule path in the repo HEAD.
73
- * - `index_oid` is the SHA1 for the submodule recorded in the index.
74
- * - `wd_oid` is the SHA1 for the HEAD of the checked out submodule.
73
+ * - `head_oid` is the oid for the submodule path in the repo HEAD.
74
+ * - `index_oid` is the oid for the submodule recorded in the index.
75
+ * - `wd_oid` is the oid for the HEAD of the checked out submodule.
75
76
  *
76
77
  * If the submodule has been added to .gitmodules but not yet git added,
77
78
  * then the `index_oid` will be zero but still marked valid. If the
@@ -110,21 +111,23 @@ enum {
110
111
  GIT_SUBMODULE_STATUS__HEAD_NOT_SUBMODULE = (1u << 24),
111
112
  GIT_SUBMODULE_STATUS__INDEX_NOT_SUBMODULE = (1u << 25),
112
113
  GIT_SUBMODULE_STATUS__WD_NOT_SUBMODULE = (1u << 26),
113
- GIT_SUBMODULE_STATUS__INDEX_MULTIPLE_ENTRIES = (1u << 27),
114
+ GIT_SUBMODULE_STATUS__INDEX_MULTIPLE_ENTRIES = (1u << 27)
114
115
  };
115
116
 
116
117
  #define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \
117
118
  ((S) & ~(0xFFFFFFFFu << 20))
118
119
 
120
+ GIT_HASHMAP_STR_STRUCT(git_submodule_cache, git_submodule *);
121
+
119
122
  /* Initialize an external submodule cache for the provided repo. */
120
- extern int git_submodule_cache_init(git_strmap **out, git_repository *repo);
123
+ extern int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo);
121
124
 
122
125
  /* Release the resources of the submodule cache. */
123
- extern int git_submodule_cache_free(git_strmap *cache);
126
+ extern int git_submodule_cache_free(git_submodule_cache *cache);
124
127
 
125
128
  /* Submodule lookup with an explicit cache */
126
129
  extern int git_submodule__lookup_with_cache(
127
- git_submodule **out, git_repository *repo, const char *path, git_strmap *cache);
130
+ git_submodule **out, git_repository *repo, const char *path, git_submodule_cache *cache);
128
131
 
129
132
  /* Internal status fn returns status and optionally the various OIDs */
130
133
  extern int git_submodule__status(
@@ -145,10 +148,6 @@ extern int git_submodule_parse_ignore(
145
148
  extern int git_submodule_parse_update(
146
149
  git_submodule_update_t *out, const char *value);
147
150
 
148
- extern int git_submodule__map(
149
- git_repository *repo,
150
- git_strmap *map);
151
-
152
151
  /**
153
152
  * Check whether a submodule's name is valid.
154
153
  *
@@ -0,0 +1,650 @@
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 "sysdir.h"
9
+
10
+ #include "runtime.h"
11
+ #include "str.h"
12
+ #include "fs_path.h"
13
+ #include <ctype.h>
14
+ #if GIT_WIN32
15
+ # include "fs_path.h"
16
+ # include "win32/path_w32.h"
17
+ # include "win32/utf-conv.h"
18
+ #else
19
+ # include <unistd.h>
20
+ # include <pwd.h>
21
+ #endif
22
+
23
+ #ifdef GIT_WIN32
24
+ # define REG_GITFORWINDOWS_KEY L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Git_is1"
25
+ # define REG_GITFORWINDOWS_KEY_WOW64 L"SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Git_is1"
26
+
27
+ static int expand_win32_path(git_win32_path dest, const wchar_t *src)
28
+ {
29
+ DWORD len = ExpandEnvironmentStringsW(src, dest, GIT_WIN_PATH_UTF16);
30
+
31
+ if (!len || len > GIT_WIN_PATH_UTF16)
32
+ return -1;
33
+
34
+ return 0;
35
+ }
36
+
37
+ static int win32_path_to_utf8(git_str *dest, const wchar_t *src)
38
+ {
39
+ git_win32_utf8_path utf8_path;
40
+
41
+ if (git_win32_path_to_utf8(utf8_path, src) < 0) {
42
+ git_error_set(GIT_ERROR_OS, "unable to convert path to UTF-8");
43
+ return -1;
44
+ }
45
+
46
+ /* Convert backslashes to forward slashes */
47
+ git_fs_path_mkposix(utf8_path);
48
+
49
+ return git_str_sets(dest, utf8_path);
50
+ }
51
+
52
+ static git_win32_path mock_registry;
53
+ static bool mock_registry_set;
54
+
55
+ extern int git_win32__set_registry_system_dir(const wchar_t *mock_sysdir)
56
+ {
57
+ if (!mock_sysdir) {
58
+ mock_registry[0] = L'\0';
59
+ mock_registry_set = false;
60
+ } else {
61
+ size_t len = wcslen(mock_sysdir);
62
+
63
+ if (len > GIT_WIN_PATH_MAX) {
64
+ git_error_set(GIT_ERROR_INVALID, "mock path too long");
65
+ return -1;
66
+ }
67
+
68
+ wcscpy(mock_registry, mock_sysdir);
69
+ mock_registry_set = true;
70
+ }
71
+
72
+ return 0;
73
+ }
74
+
75
+ static int lookup_registry_key(
76
+ git_win32_path out,
77
+ const HKEY hive,
78
+ const wchar_t* key,
79
+ const wchar_t *value)
80
+ {
81
+ HKEY hkey;
82
+ DWORD type, size;
83
+ int error = GIT_ENOTFOUND;
84
+
85
+ /*
86
+ * Registry data may not be NUL terminated, provide room to do
87
+ * it ourselves.
88
+ */
89
+ size = (DWORD)((sizeof(git_win32_path) - 1) * sizeof(wchar_t));
90
+
91
+ if (RegOpenKeyExW(hive, key, 0, KEY_READ, &hkey) != 0)
92
+ return GIT_ENOTFOUND;
93
+
94
+ if (RegQueryValueExW(hkey, value, NULL, &type, (LPBYTE)out, &size) == 0 &&
95
+ type == REG_SZ &&
96
+ size > 0 &&
97
+ size < sizeof(git_win32_path)) {
98
+ size_t wsize = size / sizeof(wchar_t);
99
+ size_t len = wsize - 1;
100
+
101
+ if (out[wsize - 1] != L'\0') {
102
+ len = wsize;
103
+ out[wsize] = L'\0';
104
+ }
105
+
106
+ if (out[len - 1] == L'\\')
107
+ out[len - 1] = L'\0';
108
+
109
+ if (_waccess(out, F_OK) == 0)
110
+ error = 0;
111
+ }
112
+
113
+ RegCloseKey(hkey);
114
+ return error;
115
+ }
116
+
117
+ static int find_sysdir_in_registry(git_win32_path out)
118
+ {
119
+ if (mock_registry_set) {
120
+ if (mock_registry[0] == L'\0')
121
+ return GIT_ENOTFOUND;
122
+
123
+ wcscpy(out, mock_registry);
124
+ return 0;
125
+ }
126
+
127
+ if (lookup_registry_key(out, HKEY_CURRENT_USER, REG_GITFORWINDOWS_KEY, L"InstallLocation") == 0 ||
128
+ lookup_registry_key(out, HKEY_CURRENT_USER, REG_GITFORWINDOWS_KEY_WOW64, L"InstallLocation") == 0 ||
129
+ lookup_registry_key(out, HKEY_LOCAL_MACHINE, REG_GITFORWINDOWS_KEY, L"InstallLocation") == 0 ||
130
+ lookup_registry_key(out, HKEY_LOCAL_MACHINE, REG_GITFORWINDOWS_KEY_WOW64, L"InstallLocation") == 0)
131
+ return 0;
132
+
133
+ return GIT_ENOTFOUND;
134
+ }
135
+
136
+ static int find_sysdir_in_path(git_win32_path out)
137
+ {
138
+ size_t out_len;
139
+
140
+ if (git_win32_path_find_executable(out, L"git.exe") < 0 &&
141
+ git_win32_path_find_executable(out, L"git.cmd") < 0)
142
+ return GIT_ENOTFOUND;
143
+
144
+ out_len = wcslen(out);
145
+
146
+ /* Trim the file name */
147
+ if (out_len <= CONST_STRLEN(L"git.exe"))
148
+ return GIT_ENOTFOUND;
149
+
150
+ out_len -= CONST_STRLEN(L"git.exe");
151
+
152
+ if (out_len && out[out_len - 1] == L'\\')
153
+ out_len--;
154
+
155
+ /*
156
+ * Git for Windows usually places the command in a 'bin' or
157
+ * 'cmd' directory, trim that.
158
+ */
159
+ if (out_len >= CONST_STRLEN(L"\\bin") &&
160
+ wcsncmp(&out[out_len - CONST_STRLEN(L"\\bin")], L"\\bin", CONST_STRLEN(L"\\bin")) == 0)
161
+ out_len -= CONST_STRLEN(L"\\bin");
162
+ else if (out_len >= CONST_STRLEN(L"\\cmd") &&
163
+ wcsncmp(&out[out_len - CONST_STRLEN(L"\\cmd")], L"\\cmd", CONST_STRLEN(L"\\cmd")) == 0)
164
+ out_len -= CONST_STRLEN(L"\\cmd");
165
+
166
+ if (!out_len)
167
+ return GIT_ENOTFOUND;
168
+
169
+ out[out_len] = L'\0';
170
+ return 0;
171
+ }
172
+
173
+ static int find_win32_dirs(
174
+ git_str *out,
175
+ const wchar_t* tmpl[])
176
+ {
177
+ git_win32_path path16;
178
+ git_str buf = GIT_STR_INIT;
179
+
180
+ git_str_clear(out);
181
+
182
+ for (; *tmpl != NULL; tmpl++) {
183
+ if (!expand_win32_path(path16, *tmpl) &&
184
+ path16[0] != L'%' &&
185
+ !_waccess(path16, F_OK)) {
186
+ win32_path_to_utf8(&buf, path16);
187
+
188
+ if (buf.size)
189
+ git_str_join(out, GIT_PATH_LIST_SEPARATOR, out->ptr, buf.ptr);
190
+ }
191
+ }
192
+
193
+ git_str_dispose(&buf);
194
+
195
+ return (git_str_oom(out) ? -1 : 0);
196
+ }
197
+
198
+ static int append_subdir(git_str *out, git_str *path, const char *subdir)
199
+ {
200
+ static const char* architecture_roots[] = {
201
+ "",
202
+ "mingw64",
203
+ "mingw32",
204
+ NULL
205
+ };
206
+ const char **root;
207
+ size_t orig_path_len = path->size;
208
+
209
+ for (root = architecture_roots; *root; root++) {
210
+ if ((*root[0] && git_str_joinpath(path, path->ptr, *root) < 0) ||
211
+ git_str_joinpath(path, path->ptr, subdir) < 0)
212
+ return -1;
213
+
214
+ if (git_fs_path_exists(path->ptr) &&
215
+ git_str_join(out, GIT_PATH_LIST_SEPARATOR, out->ptr, path->ptr) < 0)
216
+ return -1;
217
+
218
+ git_str_truncate(path, orig_path_len);
219
+ }
220
+
221
+ return 0;
222
+ }
223
+
224
+ int git_win32__find_system_dirs(git_str *out, const char *subdir)
225
+ {
226
+ git_win32_path pathdir, regdir;
227
+ git_str path8 = GIT_STR_INIT;
228
+ bool has_pathdir, has_regdir;
229
+ int error;
230
+
231
+ has_pathdir = (find_sysdir_in_path(pathdir) == 0);
232
+ has_regdir = (find_sysdir_in_registry(regdir) == 0);
233
+
234
+ if (!has_pathdir && !has_regdir)
235
+ return 0;
236
+
237
+ /*
238
+ * Usually the git in the path is the same git in the registry,
239
+ * in this case there's no need to duplicate the paths.
240
+ */
241
+ if (has_pathdir && has_regdir && wcscmp(pathdir, regdir) == 0)
242
+ has_regdir = false;
243
+
244
+ if (has_pathdir) {
245
+ if ((error = win32_path_to_utf8(&path8, pathdir)) < 0 ||
246
+ (error = append_subdir(out, &path8, subdir)) < 0)
247
+ goto done;
248
+ }
249
+
250
+ if (has_regdir) {
251
+ if ((error = win32_path_to_utf8(&path8, regdir)) < 0 ||
252
+ (error = append_subdir(out, &path8, subdir)) < 0)
253
+ goto done;
254
+ }
255
+
256
+ done:
257
+ git_str_dispose(&path8);
258
+ return error;
259
+ }
260
+ #endif /* WIN32 */
261
+
262
+ static int git_sysdir_guess_programdata_dirs(git_str *out)
263
+ {
264
+ #ifdef GIT_WIN32
265
+ static const wchar_t *programdata_tmpls[2] = {
266
+ L"%PROGRAMDATA%\\Git",
267
+ NULL,
268
+ };
269
+
270
+ return find_win32_dirs(out, programdata_tmpls);
271
+ #else
272
+ git_str_clear(out);
273
+ return 0;
274
+ #endif
275
+ }
276
+
277
+ static int git_sysdir_guess_system_dirs(git_str *out)
278
+ {
279
+ #ifdef GIT_WIN32
280
+ return git_win32__find_system_dirs(out, "etc");
281
+ #else
282
+ return git_str_sets(out, "/etc");
283
+ #endif
284
+ }
285
+
286
+ #ifndef GIT_WIN32
287
+ static int get_passwd_home(git_str *out, uid_t uid)
288
+ {
289
+ struct passwd pwd, *pwdptr;
290
+ char *buf = NULL;
291
+ long buflen;
292
+ int error;
293
+
294
+ GIT_ASSERT_ARG(out);
295
+
296
+ if ((buflen = sysconf(_SC_GETPW_R_SIZE_MAX)) == -1)
297
+ buflen = 1024;
298
+
299
+ do {
300
+ buf = git__realloc(buf, buflen);
301
+ error = getpwuid_r(uid, &pwd, buf, buflen, &pwdptr);
302
+ buflen *= 2;
303
+ } while (error == ERANGE && buflen <= 8192);
304
+
305
+ if (error) {
306
+ git_error_set(GIT_ERROR_OS, "failed to get passwd entry");
307
+ goto out;
308
+ }
309
+
310
+ if (!pwdptr) {
311
+ git_error_set(GIT_ERROR_OS, "no passwd entry found for user");
312
+ goto out;
313
+ }
314
+
315
+ if ((error = git_str_puts(out, pwdptr->pw_dir)) < 0)
316
+ goto out;
317
+
318
+ out:
319
+ git__free(buf);
320
+ return error;
321
+ }
322
+ #endif
323
+
324
+ static int git_sysdir_guess_home_dirs(git_str *out)
325
+ {
326
+ #ifdef GIT_WIN32
327
+ static const wchar_t *global_tmpls[4] = {
328
+ L"%HOME%\\",
329
+ L"%HOMEDRIVE%%HOMEPATH%\\",
330
+ L"%USERPROFILE%\\",
331
+ NULL,
332
+ };
333
+
334
+ return find_win32_dirs(out, global_tmpls);
335
+ #else
336
+ int error;
337
+ uid_t uid, euid;
338
+ const char *sandbox_id;
339
+
340
+ uid = getuid();
341
+ euid = geteuid();
342
+
343
+ /**
344
+ * If APP_SANDBOX_CONTAINER_ID is set, we are running in a
345
+ * sandboxed environment on macOS.
346
+ */
347
+ sandbox_id = getenv("APP_SANDBOX_CONTAINER_ID");
348
+
349
+ /*
350
+ * In case we are running setuid, use the configuration
351
+ * of the effective user.
352
+ *
353
+ * If we are running in a sandboxed environment on macOS,
354
+ * we have to get the HOME dir from the password entry file.
355
+ */
356
+ if (!sandbox_id && uid == euid)
357
+ error = git__getenv(out, "HOME");
358
+ else
359
+ error = get_passwd_home(out, euid);
360
+
361
+ if (error == GIT_ENOTFOUND) {
362
+ git_error_clear();
363
+ error = 0;
364
+ }
365
+
366
+ return error;
367
+ #endif
368
+ }
369
+
370
+ static int git_sysdir_guess_global_dirs(git_str *out)
371
+ {
372
+ return git_sysdir_guess_home_dirs(out);
373
+ }
374
+
375
+ static int git_sysdir_guess_xdg_dirs(git_str *out)
376
+ {
377
+ #ifdef GIT_WIN32
378
+ static const wchar_t *global_tmpls[7] = {
379
+ L"%XDG_CONFIG_HOME%\\git",
380
+ L"%APPDATA%\\git",
381
+ L"%LOCALAPPDATA%\\git",
382
+ L"%HOME%\\.config\\git",
383
+ L"%HOMEDRIVE%%HOMEPATH%\\.config\\git",
384
+ L"%USERPROFILE%\\.config\\git",
385
+ NULL,
386
+ };
387
+
388
+ return find_win32_dirs(out, global_tmpls);
389
+ #else
390
+ git_str env = GIT_STR_INIT;
391
+ int error;
392
+ uid_t uid, euid;
393
+
394
+ uid = getuid();
395
+ euid = geteuid();
396
+
397
+ /*
398
+ * In case we are running setuid, only look up passwd
399
+ * directory of the effective user.
400
+ */
401
+ if (uid == euid) {
402
+ if ((error = git__getenv(&env, "XDG_CONFIG_HOME")) == 0)
403
+ error = git_str_joinpath(out, env.ptr, "git");
404
+
405
+ if (error == GIT_ENOTFOUND && (error = git__getenv(&env, "HOME")) == 0)
406
+ error = git_str_joinpath(out, env.ptr, ".config/git");
407
+ } else {
408
+ if ((error = get_passwd_home(&env, euid)) == 0)
409
+ error = git_str_joinpath(out, env.ptr, ".config/git");
410
+ }
411
+
412
+ if (error == GIT_ENOTFOUND) {
413
+ git_error_clear();
414
+ error = 0;
415
+ }
416
+
417
+ git_str_dispose(&env);
418
+ return error;
419
+ #endif
420
+ }
421
+
422
+ static int git_sysdir_guess_template_dirs(git_str *out)
423
+ {
424
+ #ifdef GIT_WIN32
425
+ return git_win32__find_system_dirs(out, "share/git-core/templates");
426
+ #else
427
+ return git_str_sets(out, "/usr/share/git-core/templates");
428
+ #endif
429
+ }
430
+
431
+ struct git_sysdir__dir {
432
+ git_str buf;
433
+ int (*guess)(git_str *out);
434
+ };
435
+
436
+ static struct git_sysdir__dir git_sysdir__dirs[] = {
437
+ { GIT_STR_INIT, git_sysdir_guess_system_dirs },
438
+ { GIT_STR_INIT, git_sysdir_guess_global_dirs },
439
+ { GIT_STR_INIT, git_sysdir_guess_xdg_dirs },
440
+ { GIT_STR_INIT, git_sysdir_guess_programdata_dirs },
441
+ { GIT_STR_INIT, git_sysdir_guess_template_dirs },
442
+ { GIT_STR_INIT, git_sysdir_guess_home_dirs }
443
+ };
444
+
445
+ static void git_sysdir_global_shutdown(void)
446
+ {
447
+ size_t i;
448
+
449
+ for (i = 0; i < ARRAY_SIZE(git_sysdir__dirs); ++i)
450
+ git_str_dispose(&git_sysdir__dirs[i].buf);
451
+ }
452
+
453
+ int git_sysdir_global_init(void)
454
+ {
455
+ size_t i;
456
+ int error = 0;
457
+
458
+ for (i = 0; !error && i < ARRAY_SIZE(git_sysdir__dirs); i++)
459
+ error = git_sysdir__dirs[i].guess(&git_sysdir__dirs[i].buf);
460
+
461
+ if (error)
462
+ return error;
463
+
464
+ return git_runtime_shutdown_register(git_sysdir_global_shutdown);
465
+ }
466
+
467
+ int git_sysdir_reset(void)
468
+ {
469
+ size_t i;
470
+ int error = 0;
471
+
472
+ for (i = 0; !error && i < ARRAY_SIZE(git_sysdir__dirs); ++i) {
473
+ git_str_dispose(&git_sysdir__dirs[i].buf);
474
+ error = git_sysdir__dirs[i].guess(&git_sysdir__dirs[i].buf);
475
+ }
476
+
477
+ return error;
478
+ }
479
+
480
+ static int git_sysdir_check_selector(git_sysdir_t which)
481
+ {
482
+ if (which < ARRAY_SIZE(git_sysdir__dirs))
483
+ return 0;
484
+
485
+ git_error_set(GIT_ERROR_INVALID, "config directory selector out of range");
486
+ return -1;
487
+ }
488
+
489
+
490
+ int git_sysdir_get(const git_str **out, git_sysdir_t which)
491
+ {
492
+ GIT_ASSERT_ARG(out);
493
+
494
+ *out = NULL;
495
+
496
+ GIT_ERROR_CHECK_ERROR(git_sysdir_check_selector(which));
497
+
498
+ *out = &git_sysdir__dirs[which].buf;
499
+ return 0;
500
+ }
501
+
502
+ #define PATH_MAGIC "$PATH"
503
+
504
+ int git_sysdir_set(git_sysdir_t which, const char *search_path)
505
+ {
506
+ const char *expand_path = NULL;
507
+ git_str merge = GIT_STR_INIT;
508
+
509
+ GIT_ERROR_CHECK_ERROR(git_sysdir_check_selector(which));
510
+
511
+ if (search_path != NULL)
512
+ expand_path = strstr(search_path, PATH_MAGIC);
513
+
514
+ /* reset the default if this path has been cleared */
515
+ if (!search_path)
516
+ git_sysdir__dirs[which].guess(&git_sysdir__dirs[which].buf);
517
+
518
+ /* if $PATH is not referenced, then just set the path */
519
+ if (!expand_path) {
520
+ if (search_path)
521
+ git_str_sets(&git_sysdir__dirs[which].buf, search_path);
522
+
523
+ goto done;
524
+ }
525
+
526
+ /* otherwise set to join(before $PATH, old value, after $PATH) */
527
+ if (expand_path > search_path)
528
+ git_str_set(&merge, search_path, expand_path - search_path);
529
+
530
+ if (git_str_len(&git_sysdir__dirs[which].buf))
531
+ git_str_join(&merge, GIT_PATH_LIST_SEPARATOR,
532
+ merge.ptr, git_sysdir__dirs[which].buf.ptr);
533
+
534
+ expand_path += strlen(PATH_MAGIC);
535
+ if (*expand_path)
536
+ git_str_join(&merge, GIT_PATH_LIST_SEPARATOR, merge.ptr, expand_path);
537
+
538
+ git_str_swap(&git_sysdir__dirs[which].buf, &merge);
539
+ git_str_dispose(&merge);
540
+
541
+ done:
542
+ if (git_str_oom(&git_sysdir__dirs[which].buf))
543
+ return -1;
544
+
545
+ return 0;
546
+ }
547
+
548
+ static int git_sysdir_find_in_dirlist(
549
+ git_str *path,
550
+ const char *name,
551
+ git_sysdir_t which,
552
+ const char *label)
553
+ {
554
+ size_t len;
555
+ const char *scan, *next = NULL;
556
+ const git_str *syspath;
557
+
558
+ GIT_ERROR_CHECK_ERROR(git_sysdir_get(&syspath, which));
559
+ if (!syspath || !git_str_len(syspath))
560
+ goto done;
561
+
562
+ for (scan = git_str_cstr(syspath); scan; scan = next) {
563
+ /* find unescaped separator or end of string */
564
+ for (next = scan; *next; ++next) {
565
+ if (*next == GIT_PATH_LIST_SEPARATOR &&
566
+ (next <= scan || next[-1] != '\\'))
567
+ break;
568
+ }
569
+
570
+ len = (size_t)(next - scan);
571
+ next = (*next ? next + 1 : NULL);
572
+ if (!len)
573
+ continue;
574
+
575
+ GIT_ERROR_CHECK_ERROR(git_str_set(path, scan, len));
576
+ if (name)
577
+ GIT_ERROR_CHECK_ERROR(git_str_joinpath(path, path->ptr, name));
578
+
579
+ if (git_fs_path_exists(path->ptr))
580
+ return 0;
581
+ }
582
+
583
+ done:
584
+ if (name)
585
+ git_error_set(GIT_ERROR_OS, "the %s file '%s' doesn't exist", label, name);
586
+ else
587
+ git_error_set(GIT_ERROR_OS, "the %s directory doesn't exist", label);
588
+ git_str_dispose(path);
589
+ return GIT_ENOTFOUND;
590
+ }
591
+
592
+ int git_sysdir_find_system_file(git_str *path, const char *filename)
593
+ {
594
+ return git_sysdir_find_in_dirlist(
595
+ path, filename, GIT_SYSDIR_SYSTEM, "system");
596
+ }
597
+
598
+ int git_sysdir_find_global_file(git_str *path, const char *filename)
599
+ {
600
+ return git_sysdir_find_in_dirlist(
601
+ path, filename, GIT_SYSDIR_GLOBAL, "global");
602
+ }
603
+
604
+ int git_sysdir_find_xdg_file(git_str *path, const char *filename)
605
+ {
606
+ return git_sysdir_find_in_dirlist(
607
+ path, filename, GIT_SYSDIR_XDG, "global/xdg");
608
+ }
609
+
610
+ int git_sysdir_find_programdata_file(git_str *path, const char *filename)
611
+ {
612
+ return git_sysdir_find_in_dirlist(
613
+ path, filename, GIT_SYSDIR_PROGRAMDATA, "ProgramData");
614
+ }
615
+
616
+ int git_sysdir_find_template_dir(git_str *path)
617
+ {
618
+ return git_sysdir_find_in_dirlist(
619
+ path, NULL, GIT_SYSDIR_TEMPLATE, "template");
620
+ }
621
+
622
+ int git_sysdir_find_homedir(git_str *path)
623
+ {
624
+ return git_sysdir_find_in_dirlist(
625
+ path, NULL, GIT_SYSDIR_HOME, "home directory");
626
+ }
627
+
628
+ int git_sysdir_expand_global_file(git_str *path, const char *filename)
629
+ {
630
+ int error;
631
+
632
+ if ((error = git_sysdir_find_global_file(path, NULL)) == 0) {
633
+ if (filename)
634
+ error = git_str_joinpath(path, path->ptr, filename);
635
+ }
636
+
637
+ return error;
638
+ }
639
+
640
+ int git_sysdir_expand_homedir_file(git_str *path, const char *filename)
641
+ {
642
+ int error;
643
+
644
+ if ((error = git_sysdir_find_homedir(path)) == 0) {
645
+ if (filename)
646
+ error = git_str_joinpath(path, path->ptr, filename);
647
+ }
648
+
649
+ return error;
650
+ }