rugged 1.4.2 → 1.5.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 (439) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +1 -0
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_remote.c +10 -10
  7. data/ext/rugged/rugged_repo.c +2 -7
  8. data/ext/rugged/rugged_settings.c +5 -0
  9. data/lib/rugged/tree.rb +4 -0
  10. data/lib/rugged/version.rb +1 -1
  11. data/vendor/libgit2/CMakeLists.txt +16 -3
  12. data/vendor/libgit2/COPYING +40 -0
  13. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  14. data/vendor/libgit2/cmake/FindPCRE.cmake +3 -4
  15. data/vendor/libgit2/cmake/FindPCRE2.cmake +1 -1
  16. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +1 -1
  17. data/vendor/libgit2/cmake/SelectHashes.cmake +62 -14
  18. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  19. data/vendor/libgit2/deps/zlib/adler32.c +7 -0
  20. data/vendor/libgit2/deps/zlib/crc32.c +975 -288
  21. data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
  22. data/vendor/libgit2/deps/zlib/deflate.c +83 -31
  23. data/vendor/libgit2/deps/zlib/deflate.h +12 -15
  24. data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
  25. data/vendor/libgit2/deps/zlib/infback.c +2 -1
  26. data/vendor/libgit2/deps/zlib/inffast.c +14 -14
  27. data/vendor/libgit2/deps/zlib/inflate.c +39 -8
  28. data/vendor/libgit2/deps/zlib/inflate.h +3 -2
  29. data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
  30. data/vendor/libgit2/deps/zlib/trees.c +27 -48
  31. data/vendor/libgit2/deps/zlib/zlib.h +126 -100
  32. data/vendor/libgit2/deps/zlib/zutil.c +2 -2
  33. data/vendor/libgit2/deps/zlib/zutil.h +12 -9
  34. data/vendor/libgit2/include/git2/branch.h +2 -2
  35. data/vendor/libgit2/include/git2/common.h +22 -1
  36. data/vendor/libgit2/include/git2/config.h +6 -6
  37. data/vendor/libgit2/include/git2/deprecated.h +2 -0
  38. data/vendor/libgit2/include/git2/errors.h +19 -4
  39. data/vendor/libgit2/include/git2/merge.h +1 -1
  40. data/vendor/libgit2/include/git2/status.h +5 -2
  41. data/vendor/libgit2/include/git2/sys/remote.h +15 -0
  42. data/vendor/libgit2/include/git2/sys/transport.h +9 -5
  43. data/vendor/libgit2/include/git2/version.h +27 -6
  44. data/vendor/libgit2/src/CMakeLists.txt +104 -214
  45. data/vendor/libgit2/src/README.md +12 -0
  46. data/vendor/libgit2/src/cli/CMakeLists.txt +53 -0
  47. data/vendor/libgit2/src/cli/README.md +26 -0
  48. data/vendor/libgit2/src/cli/cli.h +20 -0
  49. data/vendor/libgit2/src/cli/cmd.c +21 -0
  50. data/vendor/libgit2/src/cli/cmd.h +33 -0
  51. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  52. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  53. data/vendor/libgit2/src/cli/cmd_hash_object.c +135 -0
  54. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  55. data/vendor/libgit2/src/cli/error.h +51 -0
  56. data/vendor/libgit2/src/cli/main.c +106 -0
  57. data/vendor/libgit2/src/cli/opt.c +669 -0
  58. data/vendor/libgit2/src/cli/opt.h +349 -0
  59. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  60. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  61. data/vendor/libgit2/src/cli/progress.c +345 -0
  62. data/vendor/libgit2/src/cli/progress.h +117 -0
  63. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  64. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  65. data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  66. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  67. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  68. data/vendor/libgit2/src/features.h.in +9 -0
  69. data/vendor/libgit2/src/libgit2/CMakeLists.txt +131 -0
  70. data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +0 -0
  71. data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +0 -0
  72. data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +0 -0
  73. data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +0 -0
  74. data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +0 -0
  75. data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  76. data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +0 -0
  77. data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +0 -0
  78. data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +0 -0
  79. data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  80. data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +0 -0
  81. data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  82. data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +0 -0
  83. data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  84. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +1 -1
  85. data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +0 -0
  86. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +14 -9
  87. data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +0 -0
  88. data/vendor/libgit2/src/{buf.c → libgit2/buf.c} +0 -0
  89. data/vendor/libgit2/src/{buf.h → libgit2/buf.h} +0 -0
  90. data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  91. data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  92. data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +0 -0
  93. data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  94. data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +0 -0
  95. data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +0 -0
  96. data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  97. data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +0 -0
  98. data/vendor/libgit2/src/{commit.h → libgit2/commit.h} +0 -0
  99. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +20 -17
  100. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +1 -1
  101. data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +0 -0
  102. data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  103. data/vendor/libgit2/src/libgit2/common.h +55 -0
  104. data/vendor/libgit2/src/{config.c → libgit2/config.c} +14 -7
  105. data/vendor/libgit2/src/{config.h → libgit2/config.h} +0 -0
  106. data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  107. data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  108. data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  109. data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  110. data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +0 -0
  111. data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +0 -0
  112. data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +0 -0
  113. data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  114. data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  115. data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +0 -0
  116. data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  117. data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  118. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +0 -0
  119. data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +0 -0
  120. data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +0 -0
  121. data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +0 -0
  122. data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +0 -0
  123. data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +0 -0
  124. data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  125. data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +0 -0
  126. data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +0 -0
  127. data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  128. data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  129. data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +5 -0
  130. data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +0 -0
  131. data/vendor/libgit2/src/{diff_stats.h → libgit2/diff_stats.h} +0 -0
  132. data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +0 -0
  133. data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  134. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +1 -0
  135. data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  136. data/vendor/libgit2/src/{email.c → libgit2/email.c} +0 -0
  137. data/vendor/libgit2/src/{email.h → libgit2/email.h} +0 -0
  138. data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +0 -0
  139. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  140. data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +5 -2
  141. data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +0 -0
  142. data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +0 -0
  143. data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  144. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +31 -1
  145. data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +0 -0
  146. data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  147. data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  148. data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  149. data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +0 -0
  150. data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  151. data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  152. data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +0 -0
  153. data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +0 -0
  154. data/vendor/libgit2/src/{index.c → libgit2/index.c} +6 -6
  155. data/vendor/libgit2/src/{index.h → libgit2/index.h} +0 -0
  156. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +2 -2
  157. data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  158. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +3 -3
  159. data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +0 -0
  160. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +13 -0
  161. data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  162. data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +0 -0
  163. data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  164. data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +0 -0
  165. data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +0 -0
  166. data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +0 -0
  167. data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  168. data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +0 -0
  169. data/vendor/libgit2/src/{message.c → libgit2/message.c} +0 -0
  170. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +28 -26
  171. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +2 -1
  172. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +9 -9
  173. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +1 -1
  174. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +0 -1
  175. data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +0 -0
  176. data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +0 -0
  177. data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  178. data/vendor/libgit2/src/{object.c → libgit2/object.c} +1 -0
  179. data/vendor/libgit2/src/{object.h → libgit2/object.h} +0 -0
  180. data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  181. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +2 -2
  182. data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +0 -0
  183. data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +0 -0
  184. data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +0 -0
  185. data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +0 -0
  186. data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  187. data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  188. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +2 -21
  189. data/vendor/libgit2/src/{oid.h → libgit2/oid.h} +35 -2
  190. data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  191. data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  192. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  193. data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  194. data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +0 -0
  195. data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +0 -0
  196. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +24 -18
  197. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +3 -2
  198. data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +0 -0
  199. data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  200. data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +0 -0
  201. data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +0 -0
  202. data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +0 -0
  203. data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +0 -0
  204. data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +0 -0
  205. data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  206. data/vendor/libgit2/src/{path.c → libgit2/path.c} +1 -0
  207. data/vendor/libgit2/src/{path.h → libgit2/path.h} +0 -0
  208. data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +0 -0
  209. data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +0 -0
  210. data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +0 -0
  211. data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +0 -0
  212. data/vendor/libgit2/src/{push.c → libgit2/push.c} +0 -0
  213. data/vendor/libgit2/src/{push.h → libgit2/push.h} +0 -0
  214. data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +0 -0
  215. data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +0 -0
  216. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +11 -1
  217. data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  218. data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  219. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +6 -2
  220. data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +0 -0
  221. data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +0 -0
  222. data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +0 -0
  223. data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +0 -0
  224. data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +0 -0
  225. data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +0 -0
  226. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +6 -3
  227. data/vendor/libgit2/src/{remote.h → libgit2/remote.h} +1 -1
  228. data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  229. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +155 -22
  230. data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +1 -0
  231. data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +0 -0
  232. data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +0 -0
  233. data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +0 -0
  234. data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +0 -0
  235. data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  236. data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  237. data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +0 -0
  238. data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +0 -0
  239. data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +0 -0
  240. data/vendor/libgit2/src/{status.c → libgit2/status.c} +0 -0
  241. data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  242. data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +0 -0
  243. data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  244. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +0 -0
  245. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  246. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +0 -0
  247. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  248. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +0 -0
  249. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +0 -0
  250. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  251. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  252. data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  253. data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  254. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +0 -0
  255. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  256. data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  257. data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  258. data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  259. data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  260. data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +0 -0
  261. data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +0 -0
  262. data/vendor/libgit2/src/{sysdir.c → libgit2/sysdir.c} +0 -0
  263. data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +0 -0
  264. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +15 -5
  265. data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +0 -0
  266. data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +0 -0
  267. data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +0 -0
  268. data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +0 -0
  269. data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +0 -0
  270. data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +0 -0
  271. data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +0 -0
  272. data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  273. data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +0 -0
  274. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +0 -0
  275. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +0 -0
  276. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +0 -0
  277. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  278. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +0 -0
  279. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -0
  280. data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  281. data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  282. data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +0 -0
  283. data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +0 -0
  284. data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -0
  285. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +1 -1
  286. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +0 -0
  287. data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +0 -0
  288. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +12 -0
  289. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +0 -0
  290. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +0 -0
  291. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +0 -0
  292. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +0 -0
  293. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  294. data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +0 -0
  295. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +1 -1
  296. data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +0 -0
  297. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +16 -23
  298. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +1 -1
  299. data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  300. data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +0 -0
  301. data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +0 -0
  302. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/git-xdiff.h +0 -0
  303. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +0 -0
  304. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +0 -0
  305. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  306. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +0 -0
  307. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  308. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +0 -0
  309. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +0 -0
  310. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  311. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +0 -0
  312. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +0 -0
  313. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +0 -0
  314. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  315. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  316. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +0 -0
  317. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  318. data/vendor/libgit2/src/util/CMakeLists.txt +74 -0
  319. data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  320. data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  321. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  322. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  323. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  324. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  325. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  326. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  327. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  328. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  329. data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  330. data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +0 -0
  331. data/vendor/libgit2/src/{date.c → util/date.c} +4 -3
  332. data/vendor/libgit2/src/{date.h → util/date.h} +0 -0
  333. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +1 -1
  334. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +1 -1
  335. data/vendor/libgit2/src/{fs_path.c → util/fs_path.c} +219 -65
  336. data/vendor/libgit2/src/{fs_path.h → util/fs_path.h} +47 -9
  337. data/vendor/libgit2/src/{futils.c → util/futils.c} +44 -2
  338. data/vendor/libgit2/src/{futils.h → util/futils.h} +2 -1
  339. data/vendor/libgit2/src/{common.h → util/git2_util.h} +13 -59
  340. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  341. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  342. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +1 -1
  343. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  344. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.c +55 -0
  345. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  346. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.c +46 -0
  347. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  348. data/vendor/libgit2/src/util/hash/openssl.c +194 -0
  349. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  350. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +355 -0
  351. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  352. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  353. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +0 -0
  354. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  355. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  356. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  357. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  358. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  359. data/vendor/libgit2/src/{hash.c → util/hash.c} +17 -1
  360. data/vendor/libgit2/src/{hash.h → util/hash.h} +5 -3
  361. data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  362. data/vendor/libgit2/src/{khash.h → util/khash.h} +0 -0
  363. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  364. data/vendor/libgit2/src/{net.c → util/net.c} +0 -1
  365. data/vendor/libgit2/src/{net.h → util/net.h} +1 -1
  366. data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  367. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  368. data/vendor/libgit2/src/{posix.c → util/posix.c} +0 -0
  369. data/vendor/libgit2/src/{posix.h → util/posix.h} +1 -1
  370. data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  371. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +1 -1
  372. data/vendor/libgit2/src/{rand.c → util/rand.c} +7 -3
  373. data/vendor/libgit2/src/{rand.h → util/rand.h} +1 -1
  374. data/vendor/libgit2/src/{regexp.c → util/regexp.c} +0 -0
  375. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  376. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  377. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  378. data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +0 -0
  379. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +1 -1
  380. data/vendor/libgit2/src/{str.c → util/str.c} +0 -0
  381. data/vendor/libgit2/src/{str.h → util/str.h} +1 -1
  382. data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  383. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  384. data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  385. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  386. data/vendor/libgit2/src/{thread.h → util/thread.h} +0 -0
  387. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  388. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -1
  389. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -1
  390. data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  391. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -1
  392. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  393. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  394. data/vendor/libgit2/src/{util.c → util/util.c} +1 -1
  395. data/vendor/libgit2/src/{util.h → util/util.h} +1 -1
  396. data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  397. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  398. data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  399. data/vendor/libgit2/src/{vector.h → util/vector.h} +1 -1
  400. data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  401. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  402. data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  403. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  404. data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  405. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  406. data/vendor/libgit2/src/{win32 → util/win32}/findfile.c +0 -0
  407. data/vendor/libgit2/src/{win32 → util/win32}/findfile.h +1 -1
  408. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  409. data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  410. data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  411. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +0 -0
  412. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +1 -1
  413. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -1
  414. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +1 -1
  415. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  416. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  417. data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  418. data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  419. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  420. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  421. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  422. data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  423. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +0 -0
  424. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +1 -1
  425. data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  426. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +0 -0
  427. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  428. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  429. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  430. data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
  431. data/vendor/libgit2/src/{zstream.c → util/zstream.c} +0 -0
  432. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +1 -1
  433. metadata +394 -365
  434. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  435. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  436. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  437. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  438. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  439. data/vendor/libgit2/src/hash/sha1.h +0 -40
@@ -1001,13 +1001,14 @@ int get_delta_base(
1001
1001
  base_offset = delta_obj_offset - unsigned_base_offset;
1002
1002
  *curpos += used;
1003
1003
  } else if (type == GIT_OBJECT_REF_DELTA) {
1004
+ git_oid base_oid;
1005
+ git_oid_fromraw(&base_oid, base_info);
1006
+
1004
1007
  /* If we have the cooperative cache, search in it first */
1005
1008
  if (p->has_cache) {
1006
1009
  struct git_pack_entry *entry;
1007
- git_oid oid;
1008
1010
 
1009
- git_oid_fromraw(&oid, base_info);
1010
- if ((entry = git_oidmap_get(p->idx_cache, &oid)) != NULL) {
1011
+ if ((entry = git_oidmap_get(p->idx_cache, &base_oid)) != NULL) {
1011
1012
  if (entry->offset == 0)
1012
1013
  return packfile_error("delta offset is zero");
1013
1014
 
@@ -1024,7 +1025,7 @@ int get_delta_base(
1024
1025
  }
1025
1026
 
1026
1027
  /* The base entry _must_ be in the same pack */
1027
- if (pack_entry_find_offset(&base_offset, &unused, p, (git_oid *)base_info, GIT_OID_HEXSZ) < 0)
1028
+ if (pack_entry_find_offset(&base_offset, &unused, p, &base_oid, GIT_OID_HEXSZ) < 0)
1028
1029
  return packfile_error("base entry delta is not in the same pack");
1029
1030
  *curpos += 20;
1030
1031
  } else
@@ -1082,7 +1083,7 @@ static int packfile_open_locked(struct git_pack_file *p)
1082
1083
  {
1083
1084
  struct stat st;
1084
1085
  struct git_pack_header hdr;
1085
- git_oid sha1;
1086
+ unsigned char sha1[GIT_OID_RAWSZ];
1086
1087
  unsigned char *idx_sha1;
1087
1088
 
1088
1089
  if (pack_index_open_locked(p) < 0)
@@ -1130,12 +1131,12 @@ static int packfile_open_locked(struct git_pack_file *p)
1130
1131
 
1131
1132
  /* Verify the pack matches its index. */
1132
1133
  if (p->num_objects != ntohl(hdr.hdr_entries) ||
1133
- p_pread(p->mwf.fd, sha1.id, GIT_OID_RAWSZ, p->mwf.size - GIT_OID_RAWSZ) < 0)
1134
+ p_pread(p->mwf.fd, sha1, GIT_OID_RAWSZ, p->mwf.size - GIT_OID_RAWSZ) < 0)
1134
1135
  goto cleanup;
1135
1136
 
1136
1137
  idx_sha1 = ((unsigned char *)p->index_map.data) + p->index_map.len - 40;
1137
1138
 
1138
- if (git_oid__cmp(&sha1, (git_oid *)idx_sha1) != 0)
1139
+ if (git_oid_raw_cmp(sha1, idx_sha1) != 0)
1139
1140
  goto cleanup;
1140
1141
 
1141
1142
  if (git_mwindow_file_register(&p->mwf) < 0)
@@ -1340,10 +1341,14 @@ int git_pack_foreach_entry(
1340
1341
  }
1341
1342
 
1342
1343
  git_vector_free(&offsets);
1343
- p->oids = (git_oid **)git_vector_detach(NULL, NULL, &oids);
1344
+ p->oids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
1344
1345
  }
1345
1346
 
1346
- /* We need to copy the OIDs to another array before we relinquish the lock to avoid races. */
1347
+ /*
1348
+ * We need to copy the OIDs to another array before we
1349
+ * relinquish the lock to avoid races. We can also take
1350
+ * this opportunity to put them into normal form.
1351
+ */
1347
1352
  git_array_init_to_size(oids, p->num_objects);
1348
1353
  if (!oids.ptr) {
1349
1354
  git_mutex_unlock(&p->lock);
@@ -1357,7 +1362,7 @@ int git_pack_foreach_entry(
1357
1362
  git_array_clear(oids);
1358
1363
  GIT_ERROR_CHECK_ALLOC(oid);
1359
1364
  }
1360
- git_oid_cpy(oid, p->oids[i]);
1365
+ git_oid_fromraw(oid, p->oids[i]);
1361
1366
  }
1362
1367
 
1363
1368
  git_mutex_unlock(&p->lock);
@@ -1380,7 +1385,7 @@ int git_pack_foreach_entry_offset(
1380
1385
  {
1381
1386
  const unsigned char *index;
1382
1387
  off64_t current_offset;
1383
- const git_oid *current_oid;
1388
+ git_oid current_oid;
1384
1389
  uint32_t i;
1385
1390
  int error = 0;
1386
1391
 
@@ -1422,8 +1427,9 @@ int git_pack_foreach_entry_offset(
1422
1427
  current_offset = (((off64_t)ntohl(*((uint32_t *)(large_offset_ptr + 0)))) << 32) |
1423
1428
  ntohl(*((uint32_t *)(large_offset_ptr + 4)));
1424
1429
  }
1425
- current_oid = (const git_oid *)(index + 20 * i);
1426
- if ((error = cb(current_oid, current_offset, data)) != 0) {
1430
+
1431
+ git_oid_fromraw(&current_oid, (index + 20 * i));
1432
+ if ((error = cb(&current_oid, current_offset, data)) != 0) {
1427
1433
  error = git_error_set_after_callback(error);
1428
1434
  goto cleanup;
1429
1435
  }
@@ -1431,8 +1437,8 @@ int git_pack_foreach_entry_offset(
1431
1437
  } else {
1432
1438
  for (i = 0; i < p->num_objects; i++) {
1433
1439
  current_offset = ntohl(*(const uint32_t *)(index + 24 * i));
1434
- current_oid = (const git_oid *)(index + 24 * i + 4);
1435
- if ((error = cb(current_oid, current_offset, data)) != 0) {
1440
+ git_oid_fromraw(&current_oid, (index + 24 * i + 4));
1441
+ if ((error = cb(&current_oid, current_offset, data)) != 0) {
1436
1442
  error = git_error_set_after_callback(error);
1437
1443
  goto cleanup;
1438
1444
  }
@@ -1451,7 +1457,7 @@ int git_pack__lookup_sha1(const void *oid_lookup_table, size_t stride, unsigned
1451
1457
 
1452
1458
  while (lo < hi) {
1453
1459
  unsigned mi = (lo + hi) / 2;
1454
- int cmp = git_oid__hashcmp(base + mi * stride, oid_prefix);
1460
+ int cmp = git_oid_raw_cmp(base + mi * stride, oid_prefix);
1455
1461
 
1456
1462
  if (!cmp)
1457
1463
  return mi;
@@ -1530,7 +1536,7 @@ static int pack_entry_find_offset(
1530
1536
  if (pos < (int)p->num_objects) {
1531
1537
  current = index + pos * stride;
1532
1538
 
1533
- if (!git_oid_ncmp(short_oid, (const git_oid *)current, len))
1539
+ if (!git_oid_raw_ncmp(short_oid->id, current, len))
1534
1540
  found = 1;
1535
1541
  }
1536
1542
  }
@@ -1539,7 +1545,7 @@ static int pack_entry_find_offset(
1539
1545
  /* Check for ambiguousity */
1540
1546
  const unsigned char *next = current + stride;
1541
1547
 
1542
- if (!git_oid_ncmp(short_oid, (const git_oid *)next, len)) {
1548
+ if (!git_oid_raw_ncmp(short_oid->id, next, len)) {
1543
1549
  found = 2;
1544
1550
  }
1545
1551
  }
@@ -19,6 +19,7 @@
19
19
  #include "offmap.h"
20
20
  #include "oidmap.h"
21
21
  #include "zstream.h"
22
+ #include "oid.h"
22
23
 
23
24
  /**
24
25
  * Function type for callbacks from git_pack_foreach_entry_offset.
@@ -32,7 +33,7 @@ typedef int git_pack_foreach_entry_offset_cb(
32
33
 
33
34
  #define PACK_SIGNATURE 0x5041434b /* "PACK" */
34
35
  #define PACK_VERSION 2
35
- #define pack_version_ok(v) ((v) == htonl(2) || (v) == htonl(3))
36
+ #define pack_version_ok(v) ((v) == htonl(2))
36
37
  struct git_pack_header {
37
38
  uint32_t hdr_signature;
38
39
  uint32_t hdr_version;
@@ -104,7 +105,7 @@ struct git_pack_file {
104
105
  git_time_t mtime;
105
106
  unsigned pack_local:1, pack_keep:1, has_cache:1;
106
107
  git_oidmap *idx_cache;
107
- git_oid **oids;
108
+ unsigned char **oids;
108
109
 
109
110
  git_pack_cache bases; /* delta base cache */
110
111
 
File without changes
File without changes
File without changes
File without changes
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include "repository.h"
11
11
  #include "fs_path.h"
12
+ #include "utf8.h"
12
13
 
13
14
  typedef struct {
14
15
  git_repository *repo;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -35,6 +35,7 @@
35
35
  #define ONTO_FILE "onto"
36
36
  #define ONTO_NAME_FILE "onto_name"
37
37
  #define QUIET_FILE "quiet"
38
+ #define INTERACTIVE_FILE "interactive"
38
39
 
39
40
  #define MSGNUM_FILE "msgnum"
40
41
  #define END_FILE "end"
@@ -92,6 +93,7 @@ static int rebase_state_type(
92
93
  git_repository *repo)
93
94
  {
94
95
  git_str path = GIT_STR_INIT;
96
+ git_str interactive_path = GIT_STR_INIT;
95
97
  git_rebase_t type = GIT_REBASE_NONE;
96
98
 
97
99
  if (git_str_joinpath(&path, repo->gitdir, REBASE_APPLY_DIR) < 0)
@@ -107,7 +109,14 @@ static int rebase_state_type(
107
109
  return -1;
108
110
 
109
111
  if (git_fs_path_isdir(git_str_cstr(&path))) {
110
- type = GIT_REBASE_MERGE;
112
+ if (git_str_joinpath(&interactive_path, path.ptr, INTERACTIVE_FILE) < 0)
113
+ return -1;
114
+
115
+ if (git_fs_path_isfile(interactive_path.ptr))
116
+ type = GIT_REBASE_INTERACTIVE;
117
+ else
118
+ type = GIT_REBASE_MERGE;
119
+
111
120
  goto done;
112
121
  }
113
122
 
@@ -118,6 +127,7 @@ done:
118
127
  *path_out = git_str_detach(&path);
119
128
 
120
129
  git_str_dispose(&path);
130
+ git_str_dispose(&interactive_path);
121
131
 
122
132
  return 0;
123
133
  }
File without changes
File without changes
@@ -740,7 +740,7 @@ static int packed_lookup(
740
740
  return 0;
741
741
  }
742
742
  }
743
- return GIT_ENOTFOUND;
743
+ return ref_error_notfound(ref_name);
744
744
 
745
745
  parse_failed:
746
746
  git_error_set(GIT_ERROR_REFERENCE, "corrupted packed references file");
@@ -1361,7 +1361,11 @@ static int packed_write(refdb_fs_backend *backend)
1361
1361
 
1362
1362
  for (i = 0; i < git_sortedcache_entrycount(refcache); ++i) {
1363
1363
  struct packref *ref = git_sortedcache_entry(refcache, i);
1364
- GIT_ASSERT(ref);
1364
+
1365
+ GIT_ASSERT_WITH_CLEANUP(ref, {
1366
+ error = -1;
1367
+ goto fail;
1368
+ });
1365
1369
 
1366
1370
  if ((error = packed_find_peel(backend, ref)) < 0)
1367
1371
  goto fail;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1830,7 +1830,7 @@ static int update_one_tip(
1830
1830
  }
1831
1831
 
1832
1832
  if (error == GIT_ENOTFOUND) {
1833
- memset(&old, 0, GIT_OID_RAWSZ);
1833
+ memset(&old, 0, sizeof(git_oid));
1834
1834
  error = 0;
1835
1835
 
1836
1836
  if (autotag && (error = git_vector_insert(update_heads, head)) < 0)
@@ -1895,8 +1895,11 @@ static int update_tips_for_spec(
1895
1895
  if (git_oid__is_hexstr(spec->src)) {
1896
1896
  git_oid id;
1897
1897
 
1898
- if ((error = git_oid_fromstr(&id, spec->src)) < 0 ||
1899
- (error = update_ref(remote, spec->dst, &id, log_message, callbacks)) < 0)
1898
+ if ((error = git_oid_fromstr(&id, spec->src)) < 0)
1899
+ goto on_error;
1900
+
1901
+ if (spec->dst &&
1902
+ (error = update_ref(remote, spec->dst, &id, log_message, callbacks)) < 0)
1900
1903
  goto on_error;
1901
1904
 
1902
1905
  git_oid_cpy(&oid_head.oid, &id);
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include "git2/remote.h"
13
13
  #include "git2/transport.h"
14
+ #include "git2/sys/remote.h"
14
15
  #include "git2/sys/transport.h"
15
16
 
16
17
  #include "refspec.h"
@@ -53,7 +54,6 @@ int git_remote_connect_options_normalize(
53
54
  git_remote_connect_options *dst,
54
55
  git_repository *repo,
55
56
  const git_remote_connect_options *src);
56
- void git_remote_connect_options_dispose(git_remote_connect_options *opts);
57
57
 
58
58
  int git_remote_capabilities(unsigned int *out, git_remote *remote);
59
59
 
@@ -39,6 +39,7 @@
39
39
  # include "win32/w32_util.h"
40
40
  #endif
41
41
 
42
+ bool git_repository__validate_ownership = true;
42
43
  bool git_repository__fsync_gitdir = false;
43
44
 
44
45
  static const struct {
@@ -65,6 +66,7 @@ static const struct {
65
66
 
66
67
  static int check_repositoryformatversion(int *version, git_config *config);
67
68
  static int check_extensions(git_config *config, int version);
69
+ static int load_global_config(git_config **config);
68
70
 
69
71
  #define GIT_COMMONDIR_FILE "commondir"
70
72
  #define GIT_GITDIR_FILE "gitdir"
@@ -483,6 +485,116 @@ static int read_gitfile(git_str *path_out, const char *file_path)
483
485
  return error;
484
486
  }
485
487
 
488
+ typedef struct {
489
+ const char *repo_path;
490
+ git_str tmp;
491
+ bool *is_safe;
492
+ } validate_ownership_data;
493
+
494
+ static int validate_ownership_cb(const git_config_entry *entry, void *payload)
495
+ {
496
+ validate_ownership_data *data = payload;
497
+
498
+ if (strcmp(entry->value, "") == 0)
499
+ *data->is_safe = false;
500
+
501
+ if (git_fs_path_prettify_dir(&data->tmp, entry->value, NULL) == 0 &&
502
+ strcmp(data->tmp.ptr, data->repo_path) == 0)
503
+ *data->is_safe = true;
504
+
505
+ return 0;
506
+ }
507
+
508
+ static int validate_ownership_config(bool *is_safe, const char *path)
509
+ {
510
+ validate_ownership_data ownership_data = {
511
+ path, GIT_STR_INIT, is_safe
512
+ };
513
+ git_config *config;
514
+ int error;
515
+
516
+ if (load_global_config(&config) != 0)
517
+ return 0;
518
+
519
+ error = git_config_get_multivar_foreach(config,
520
+ "safe.directory", NULL,
521
+ validate_ownership_cb,
522
+ &ownership_data);
523
+
524
+ git_config_free(config);
525
+ git_str_dispose(&ownership_data.tmp);
526
+
527
+ return error;
528
+ }
529
+
530
+ static int validate_ownership_path(bool *is_safe, const char *path)
531
+ {
532
+ git_fs_path_owner_t owner_level =
533
+ GIT_FS_PATH_OWNER_CURRENT_USER |
534
+ GIT_FS_PATH_USER_IS_ADMINISTRATOR |
535
+ GIT_FS_PATH_OWNER_RUNNING_SUDO;
536
+ int error = 0;
537
+
538
+ if (path)
539
+ error = git_fs_path_owner_is(is_safe, path, owner_level);
540
+
541
+ if (error == GIT_ENOTFOUND) {
542
+ *is_safe = true;
543
+ error = 0;
544
+ }
545
+
546
+ return error;
547
+ }
548
+
549
+ static int validate_ownership(git_repository *repo)
550
+ {
551
+ const char *validation_paths[3] = { NULL }, *path;
552
+ size_t validation_len = 0, i;
553
+ bool is_safe = false;
554
+ int error = 0;
555
+
556
+ /*
557
+ * If there's a worktree, validate the permissions to it *and*
558
+ * the git directory, and use the worktree as the configuration
559
+ * key for allowlisting the directory. In a bare setup, only
560
+ * look at the gitdir and use that as the allowlist. So we
561
+ * examine all `validation_paths` but use only the first as
562
+ * the configuration lookup.
563
+ */
564
+
565
+ if (repo->workdir)
566
+ validation_paths[validation_len++] = repo->workdir;
567
+
568
+ if (repo->gitlink)
569
+ validation_paths[validation_len++] = repo->gitlink;
570
+
571
+ validation_paths[validation_len++] = repo->gitdir;
572
+
573
+ for (i = 0; i < validation_len; i++) {
574
+ path = validation_paths[i];
575
+
576
+ if ((error = validate_ownership_path(&is_safe, path)) < 0)
577
+ goto done;
578
+
579
+ if (!is_safe)
580
+ break;
581
+ }
582
+
583
+ if (is_safe ||
584
+ (error = validate_ownership_config(&is_safe, validation_paths[0])) < 0)
585
+ goto done;
586
+
587
+ if (!is_safe) {
588
+ git_error_set(GIT_ERROR_CONFIG,
589
+ "repository path '%s' is not owned by current user",
590
+ path);
591
+ error = GIT_EOWNER;
592
+ }
593
+
594
+ done:
595
+ return error;
596
+ }
597
+
486
598
  static int find_repo(
487
599
  git_str *gitdir_path,
488
600
  git_str *workdir_path,
@@ -904,16 +1016,23 @@ int git_repository_open_ext(
904
1016
  if ((error = check_extensions(config, version)) < 0)
905
1017
  goto cleanup;
906
1018
 
907
- if ((flags & GIT_REPOSITORY_OPEN_BARE) != 0)
1019
+ if ((flags & GIT_REPOSITORY_OPEN_BARE) != 0) {
908
1020
  repo->is_bare = 1;
909
- else {
910
-
1021
+ } else {
911
1022
  if (config &&
912
1023
  ((error = load_config_data(repo, config)) < 0 ||
913
1024
  (error = load_workdir(repo, config, &workdir)) < 0))
914
1025
  goto cleanup;
915
1026
  }
916
1027
 
1028
+ /*
1029
+ * Ensure that the git directory and worktree are
1030
+ * owned by the current user.
1031
+ */
1032
+ if (git_repository__validate_ownership &&
1033
+ (error = validate_ownership(repo)) < 0)
1034
+ goto cleanup;
1035
+
917
1036
  cleanup:
918
1037
  git_str_dispose(&gitdir);
919
1038
  git_str_dispose(&workdir);
@@ -1462,6 +1581,7 @@ static int check_valid_extension(const git_config_entry *entry, void *payload)
1462
1581
  }
1463
1582
 
1464
1583
  for (i = 0; i < ARRAY_SIZE(builtin_extensions); i++) {
1584
+ git_str_clear(&cfg);
1465
1585
  extension = builtin_extensions[i];
1466
1586
 
1467
1587
  if ((error = git_str_printf(&cfg, "extensions.%s", extension)) < 0)
@@ -1606,13 +1726,40 @@ static bool is_filesystem_case_insensitive(const char *gitdir_path)
1606
1726
  return is_insensitive;
1607
1727
  }
1608
1728
 
1609
- static bool are_symlinks_supported(const char *wd_path)
1729
+ /*
1730
+ * Return a configuration object with only the global and system
1731
+ * configurations; no repository-level configuration.
1732
+ */
1733
+ static int load_global_config(git_config **config)
1610
1734
  {
1611
- git_config *config = NULL;
1612
1735
  git_str global_buf = GIT_STR_INIT;
1613
1736
  git_str xdg_buf = GIT_STR_INIT;
1614
1737
  git_str system_buf = GIT_STR_INIT;
1615
1738
  git_str programdata_buf = GIT_STR_INIT;
1739
+ int error;
1740
+
1741
+ git_config__find_global(&global_buf);
1742
+ git_config__find_xdg(&xdg_buf);
1743
+ git_config__find_system(&system_buf);
1744
+ git_config__find_programdata(&programdata_buf);
1745
+
1746
+ error = load_config(config, NULL,
1747
+ path_unless_empty(&global_buf),
1748
+ path_unless_empty(&xdg_buf),
1749
+ path_unless_empty(&system_buf),
1750
+ path_unless_empty(&programdata_buf));
1751
+
1752
+ git_str_dispose(&global_buf);
1753
+ git_str_dispose(&xdg_buf);
1754
+ git_str_dispose(&system_buf);
1755
+ git_str_dispose(&programdata_buf);
1756
+
1757
+ return error;
1758
+ }
1759
+
1760
+ static bool are_symlinks_supported(const char *wd_path)
1761
+ {
1762
+ git_config *config = NULL;
1616
1763
  int symlinks = 0;
1617
1764
 
1618
1765
  /*
@@ -1623,19 +1770,9 @@ static bool are_symlinks_supported(const char *wd_path)
1623
1770
  * _not_ set, then we do not test or enable symlink support.
1624
1771
  */
1625
1772
  #ifdef GIT_WIN32
1626
- git_config__find_global(&global_buf);
1627
- git_config__find_xdg(&xdg_buf);
1628
- git_config__find_system(&system_buf);
1629
- git_config__find_programdata(&programdata_buf);
1630
-
1631
- if (load_config(&config, NULL,
1632
- path_unless_empty(&global_buf),
1633
- path_unless_empty(&xdg_buf),
1634
- path_unless_empty(&system_buf),
1635
- path_unless_empty(&programdata_buf)) < 0)
1636
- goto done;
1637
-
1638
- if (git_config_get_bool(&symlinks, config, "core.symlinks") < 0 || !symlinks)
1773
+ if (load_global_config(&config) < 0 ||
1774
+ git_config_get_bool(&symlinks, config, "core.symlinks") < 0 ||
1775
+ !symlinks)
1639
1776
  goto done;
1640
1777
  #endif
1641
1778
 
@@ -1643,10 +1780,6 @@ static bool are_symlinks_supported(const char *wd_path)
1643
1780
  goto done;
1644
1781
 
1645
1782
  done:
1646
- git_str_dispose(&global_buf);
1647
- git_str_dispose(&xdg_buf);
1648
- git_str_dispose(&system_buf);
1649
- git_str_dispose(&programdata_buf);
1650
1783
  git_config_free(config);
1651
1784
  return symlinks != 0;
1652
1785
  }
@@ -34,6 +34,7 @@
34
34
  #define GIT_DIR_SHORTNAME "GIT~1"
35
35
 
36
36
  extern bool git_repository__fsync_gitdir;
37
+ extern bool git_repository__validate_ownership;
37
38
 
38
39
  /** Cvar cache identifiers */
39
40
  typedef enum {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes