rugged 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -31,19 +31,18 @@ extern int git_attr_cache__get(
31
31
  git_attr_file **file,
32
32
  git_repository *repo,
33
33
  git_attr_session *attr_session,
34
- git_attr_file_source source,
35
- const char *base,
36
- const char *filename,
34
+ git_attr_file_source *source,
37
35
  git_attr_file_parser parser,
38
36
  bool allow_macros);
39
37
 
40
38
  extern bool git_attr_cache__is_cached(
41
39
  git_repository *repo,
42
- git_attr_file_source source,
43
- const char *path);
40
+ git_attr_file_source_t source_type,
41
+ const char *filename);
44
42
 
45
43
  extern int git_attr_cache__alloc_file_entry(
46
44
  git_attr_file_entry **out,
45
+ git_repository *repo,
47
46
  const char *base,
48
47
  const char *path,
49
48
  git_pool *pool);
@@ -76,6 +76,14 @@ static git_blame_hunk* new_hunk(
76
76
  return hunk;
77
77
  }
78
78
 
79
+ static void free_hunk(git_blame_hunk *hunk)
80
+ {
81
+ git__free((void*)hunk->orig_path);
82
+ git_signature_free(hunk->final_signature);
83
+ git_signature_free(hunk->orig_signature);
84
+ git__free(hunk);
85
+ }
86
+
79
87
  static git_blame_hunk* dup_hunk(git_blame_hunk *hunk)
80
88
  {
81
89
  git_blame_hunk *newhunk = new_hunk(
@@ -90,17 +98,14 @@ static git_blame_hunk* dup_hunk(git_blame_hunk *hunk)
90
98
  git_oid_cpy(&newhunk->orig_commit_id, &hunk->orig_commit_id);
91
99
  git_oid_cpy(&newhunk->final_commit_id, &hunk->final_commit_id);
92
100
  newhunk->boundary = hunk->boundary;
93
- git_signature_dup(&newhunk->final_signature, hunk->final_signature);
94
- git_signature_dup(&newhunk->orig_signature, hunk->orig_signature);
95
- return newhunk;
96
- }
97
101
 
98
- static void free_hunk(git_blame_hunk *hunk)
99
- {
100
- git__free((void*)hunk->orig_path);
101
- git_signature_free(hunk->final_signature);
102
- git_signature_free(hunk->orig_signature);
103
- git__free(hunk);
102
+ if (git_signature_dup(&newhunk->final_signature, hunk->final_signature) < 0 ||
103
+ git_signature_dup(&newhunk->orig_signature, hunk->orig_signature) < 0) {
104
+ free_hunk(newhunk);
105
+ return NULL;
106
+ }
107
+
108
+ return newhunk;
104
109
  }
105
110
 
106
111
  /* Starting with the hunk that includes start_line, shift all following hunks'
@@ -171,20 +176,21 @@ void git_blame_free(git_blame *blame)
171
176
 
172
177
  uint32_t git_blame_get_hunk_count(git_blame *blame)
173
178
  {
174
- assert(blame);
179
+ GIT_ASSERT_ARG(blame);
175
180
  return (uint32_t)blame->hunks.length;
176
181
  }
177
182
 
178
183
  const git_blame_hunk *git_blame_get_hunk_byindex(git_blame *blame, uint32_t index)
179
184
  {
180
- assert(blame);
185
+ GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
181
186
  return (git_blame_hunk*)git_vector_get(&blame->hunks, index);
182
187
  }
183
188
 
184
189
  const git_blame_hunk *git_blame_get_hunk_byline(git_blame *blame, size_t lineno)
185
190
  {
186
191
  size_t i, new_lineno = lineno;
187
- assert(blame);
192
+
193
+ GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
188
194
 
189
195
  if (!git_vector_bsearch2(&i, &blame->hunks, hunk_byfinalline_search_cmp, &new_lineno)) {
190
196
  return git_blame_get_hunk_byindex(blame, (uint32_t)i);
@@ -388,7 +394,10 @@ int git_blame_file(
388
394
  git_blame_options normOptions = GIT_BLAME_OPTIONS_INIT;
389
395
  git_blame *blame = NULL;
390
396
 
391
- assert(out && repo && path);
397
+ GIT_ASSERT_ARG(out);
398
+ GIT_ASSERT_ARG(repo);
399
+ GIT_ASSERT_ARG(path);
400
+
392
401
  if ((error = normalize_options(&normOptions, options, repo)) < 0)
393
402
  goto on_error;
394
403
 
@@ -509,7 +518,9 @@ int git_blame_buffer(
509
518
 
510
519
  diffopts.context_lines = 0;
511
520
 
512
- assert(out && reference && buffer && buffer_len);
521
+ GIT_ASSERT_ARG(out);
522
+ GIT_ASSERT_ARG(reference);
523
+ GIT_ASSERT_ARG(buffer && buffer_len);
513
524
 
514
525
  blame = git_blame__alloc(reference->repository, reference->options, reference->path);
515
526
  GIT_ERROR_CHECK_ALLOC(blame);
@@ -538,7 +549,9 @@ int git_blame_options_init(git_blame_options *opts, unsigned int version)
538
549
  return 0;
539
550
  }
540
551
 
552
+ #ifndef GIT_DEPRECATE_HARD
541
553
  int git_blame_init_options(git_blame_options *opts, unsigned int version)
542
554
  {
543
555
  return git_blame_options_init(opts, version);
544
556
  }
557
+ #endif
@@ -365,11 +365,14 @@ static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
365
365
  b->size -= trimmed - recovered;
366
366
  }
367
367
 
368
- static int diff_hunks(mmfile_t file_a, mmfile_t file_b, void *cb_data)
368
+ static int diff_hunks(mmfile_t file_a, mmfile_t file_b, void *cb_data, git_blame_options *options)
369
369
  {
370
- xpparam_t xpp = {0};
371
370
  xdemitconf_t xecfg = {0};
372
371
  xdemitcb_t ecb = {0};
372
+ xpparam_t xpp = {0};
373
+
374
+ if (options->flags & GIT_BLAME_IGNORE_WHITESPACE)
375
+ xpp.flags |= XDF_IGNORE_WHITESPACE;
373
376
 
374
377
  xecfg.hunk_func = my_emit;
375
378
  ecb.priv = cb_data;
@@ -409,7 +412,7 @@ static int pass_blame_to_parent(
409
412
  fill_origin_blob(parent, &file_p);
410
413
  fill_origin_blob(target, &file_o);
411
414
 
412
- if (diff_hunks(file_p, file_o, &d) < 0)
415
+ if (diff_hunks(file_p, file_o, &d, &blame->options) < 0)
413
416
  return -1;
414
417
 
415
418
  /* The reset (i.e. anything after tlno) are the same as the parent */
@@ -14,11 +14,11 @@
14
14
 
15
15
  #include "filebuf.h"
16
16
  #include "filter.h"
17
- #include "buf_text.h"
18
17
 
19
18
  const void *git_blob_rawcontent(const git_blob *blob)
20
19
  {
21
- assert(blob);
20
+ GIT_ASSERT_ARG_WITH_RETVAL(blob, NULL);
21
+
22
22
  if (blob->raw)
23
23
  return blob->data.raw.data;
24
24
  else
@@ -27,7 +27,8 @@ const void *git_blob_rawcontent(const git_blob *blob)
27
27
 
28
28
  git_object_size_t git_blob_rawsize(const git_blob *blob)
29
29
  {
30
- assert(blob);
30
+ GIT_ASSERT_ARG(blob);
31
+
31
32
  if (blob->raw)
32
33
  return blob->data.raw.size;
33
34
  else
@@ -53,7 +54,9 @@ void git_blob__free(void *_blob)
53
54
  int git_blob__parse_raw(void *_blob, const char *data, size_t size)
54
55
  {
55
56
  git_blob *blob = (git_blob *) _blob;
56
- assert(blob);
57
+
58
+ GIT_ASSERT_ARG(blob);
59
+
57
60
  blob->raw = 1;
58
61
  blob->data.raw.data = data;
59
62
  blob->data.raw.size = size;
@@ -63,7 +66,9 @@ int git_blob__parse_raw(void *_blob, const char *data, size_t size)
63
66
  int git_blob__parse(void *_blob, git_odb_object *odb_obj)
64
67
  {
65
68
  git_blob *blob = (git_blob *) _blob;
66
- assert(blob);
69
+
70
+ GIT_ASSERT_ARG(blob);
71
+
67
72
  git_cached_obj_incref((git_cached_obj *)odb_obj);
68
73
  blob->raw = 0;
69
74
  blob->data.odb = odb_obj;
@@ -77,7 +82,8 @@ int git_blob_create_from_buffer(
77
82
  git_odb *odb;
78
83
  git_odb_stream *stream;
79
84
 
80
- assert(id && repo);
85
+ GIT_ASSERT_ARG(id);
86
+ GIT_ASSERT_ARG(repo);
81
87
 
82
88
  if ((error = git_repository_odb__weakptr(&odb, repo)) < 0 ||
83
89
  (error = git_odb_open_wstream(&stream, odb, len, GIT_OBJECT_BLOB)) < 0)
@@ -188,14 +194,10 @@ int git_blob__create_from_paths(
188
194
  mode_t mode;
189
195
  git_buf path = GIT_BUF_INIT;
190
196
 
191
- assert(hint_path || !try_load_filters);
197
+ GIT_ASSERT_ARG(hint_path || !try_load_filters);
192
198
 
193
199
  if (!content_path) {
194
- if (git_repository__ensure_not_bare(repo, "create blob from file") < 0)
195
- return GIT_EBAREREPO;
196
-
197
- if (git_buf_joinpath(
198
- &path, git_repository_workdir(repo), hint_path) < 0)
200
+ if (git_repository_workdir_path(&path, repo, hint_path) < 0)
199
201
  return -1;
200
202
 
201
203
  content_path = path.ptr;
@@ -331,7 +333,8 @@ int git_blob_create_from_stream(git_writestream **out, git_repository *repo, con
331
333
  git_buf path = GIT_BUF_INIT;
332
334
  blob_writestream *stream;
333
335
 
334
- assert(out && repo);
336
+ GIT_ASSERT_ARG(out);
337
+ GIT_ASSERT_ARG(repo);
335
338
 
336
339
  stream = git__calloc(1, sizeof(blob_writestream));
337
340
  GIT_ERROR_CHECK_ALLOC(stream);
@@ -391,13 +394,22 @@ int git_blob_is_binary(const git_blob *blob)
391
394
  git_buf content = GIT_BUF_INIT;
392
395
  git_object_size_t size;
393
396
 
394
- assert(blob);
397
+ GIT_ASSERT_ARG(blob);
395
398
 
396
399
  size = git_blob_rawsize(blob);
397
400
 
398
401
  git_buf_attach_notowned(&content, git_blob_rawcontent(blob),
399
402
  (size_t)min(size, GIT_FILTER_BYTES_TO_CHECK_NUL));
400
- return git_buf_text_is_binary(&content);
403
+ return git_buf_is_binary(&content);
404
+ }
405
+
406
+ int git_blob_filter_options_init(
407
+ git_blob_filter_options *opts,
408
+ unsigned int version)
409
+ {
410
+ GIT_INIT_STRUCTURE_FROM_TEMPLATE(opts, version,
411
+ git_blob_filter_options, GIT_BLOB_FILTER_OPTIONS_INIT);
412
+ return 0;
401
413
  }
402
414
 
403
415
  int git_blob_filter(
@@ -409,15 +421,18 @@ int git_blob_filter(
409
421
  int error = 0;
410
422
  git_filter_list *fl = NULL;
411
423
  git_blob_filter_options opts = GIT_BLOB_FILTER_OPTIONS_INIT;
412
- git_filter_flag_t flags = GIT_FILTER_DEFAULT;
413
-
414
- assert(blob && path && out);
424
+ git_filter_options filter_opts = GIT_FILTER_OPTIONS_INIT;
415
425
 
416
- git_buf_sanitize(out);
426
+ GIT_ASSERT_ARG(blob);
427
+ GIT_ASSERT_ARG(path);
428
+ GIT_ASSERT_ARG(out);
417
429
 
418
430
  GIT_ERROR_CHECK_VERSION(
419
431
  given_opts, GIT_BLOB_FILTER_OPTIONS_VERSION, "git_blob_filter_options");
420
432
 
433
+ if (git_buf_sanitize(out) < 0)
434
+ return -1;
435
+
421
436
  if (given_opts != NULL)
422
437
  memcpy(&opts, given_opts, sizeof(git_blob_filter_options));
423
438
 
@@ -426,14 +441,19 @@ int git_blob_filter(
426
441
  return 0;
427
442
 
428
443
  if ((opts.flags & GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES) != 0)
429
- flags |= GIT_FILTER_NO_SYSTEM_ATTRIBUTES;
444
+ filter_opts.flags |= GIT_FILTER_NO_SYSTEM_ATTRIBUTES;
430
445
 
431
- if ((opts.flags & GIT_BLOB_FILTER_ATTTRIBUTES_FROM_HEAD) != 0)
432
- flags |= GIT_FILTER_ATTRIBUTES_FROM_HEAD;
446
+ if ((opts.flags & GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD) != 0)
447
+ filter_opts.flags |= GIT_FILTER_ATTRIBUTES_FROM_HEAD;
448
+
449
+ if ((opts.flags & GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT) != 0) {
450
+ filter_opts.flags |= GIT_FILTER_ATTRIBUTES_FROM_COMMIT;
451
+ filter_opts.commit_id = opts.commit_id;
452
+ }
433
453
 
434
- if (!(error = git_filter_list_load(
454
+ if (!(error = git_filter_list_load_ext(
435
455
  &fl, git_blob_owner(blob), blob, path,
436
- GIT_FILTER_TO_WORKTREE, flags))) {
456
+ GIT_FILTER_TO_WORKTREE, &filter_opts))) {
437
457
 
438
458
  error = git_filter_list_apply_to_blob(out, fl, blob);
439
459
 
@@ -445,6 +465,7 @@ int git_blob_filter(
445
465
 
446
466
  /* Deprecated functions */
447
467
 
468
+ #ifndef GIT_DEPRECATE_HARD
448
469
  int git_blob_create_frombuffer(
449
470
  git_oid *id, git_repository *repo, const void *buffer, size_t len)
450
471
  {
@@ -491,3 +512,4 @@ int git_blob_filtered_content(
491
512
 
492
513
  return git_blob_filter(out, blob, path, &opts);
493
514
  }
515
+ #endif
@@ -67,8 +67,10 @@ static int create_branch(
67
67
  int error = -1;
68
68
  int bare = git_repository_is_bare(repository);
69
69
 
70
- assert(branch_name && commit && ref_out);
71
- assert(git_object_owner((const git_object *)commit) == repository);
70
+ GIT_ASSERT_ARG(branch_name);
71
+ GIT_ASSERT_ARG(commit);
72
+ GIT_ASSERT_ARG(ref_out);
73
+ GIT_ASSERT_ARG(git_commit_owner(commit) == repository);
72
74
 
73
75
  if (!git__strcmp(branch_name, "HEAD")) {
74
76
  git_error_set(GIT_ERROR_REFERENCE, "'HEAD' is not a valid branch name");
@@ -134,39 +136,39 @@ int git_branch_create_from_annotated(
134
136
  repository, branch_name, commit->commit, commit->description, force);
135
137
  }
136
138
 
137
- static int branch_equals(git_repository *repo, const char *path, void *payload)
139
+ static int branch_is_checked_out(git_repository *worktree, void *payload)
138
140
  {
139
141
  git_reference *branch = (git_reference *) payload;
140
142
  git_reference *head = NULL;
141
- int equal = 0;
143
+ int error;
142
144
 
143
- if (git_reference__read_head(&head, repo, path) < 0 ||
144
- git_reference_type(head) != GIT_REFERENCE_SYMBOLIC)
145
- goto done;
145
+ if (git_repository_is_bare(worktree))
146
+ return 0;
146
147
 
147
- equal = !git__strcmp(head->target.symbolic, branch->name);
148
+ if ((error = git_reference_lookup(&head, worktree, GIT_HEAD_FILE)) < 0) {
149
+ if (error == GIT_ENOTFOUND)
150
+ error = 0;
151
+ goto out;
152
+ }
148
153
 
149
- done:
154
+ if (git_reference_type(head) != GIT_REFERENCE_SYMBOLIC)
155
+ goto out;
156
+
157
+ error = !git__strcmp(head->target.symbolic, branch->name);
158
+
159
+ out:
150
160
  git_reference_free(head);
151
- return equal;
161
+ return error;
152
162
  }
153
163
 
154
164
  int git_branch_is_checked_out(const git_reference *branch)
155
165
  {
156
- git_repository *repo;
157
- int flags = 0;
158
-
159
- assert(branch);
166
+ GIT_ASSERT_ARG(branch);
160
167
 
161
168
  if (!git_reference_is_branch(branch))
162
169
  return 0;
163
-
164
- repo = git_reference_owner(branch);
165
-
166
- if (git_repository_is_bare(repo))
167
- flags |= GIT_REPOSITORY_FOREACH_HEAD_SKIP_REPO;
168
-
169
- return git_repository_foreach_head(repo, branch_equals, flags, (void *) branch) == 1;
170
+ return git_repository_foreach_worktree(git_reference_owner(branch),
171
+ branch_is_checked_out, (void *)branch) == 1;
170
172
  }
171
173
 
172
174
  int git_branch_delete(git_reference *branch)
@@ -175,7 +177,7 @@ int git_branch_delete(git_reference *branch)
175
177
  git_buf config_section = GIT_BUF_INIT;
176
178
  int error = -1;
177
179
 
178
- assert(branch);
180
+ GIT_ASSERT_ARG(branch);
179
181
 
180
182
  if (!git_reference_is_branch(branch) && !git_reference_is_remote(branch)) {
181
183
  git_error_set(GIT_ERROR_INVALID, "reference '%s' is not a valid branch.",
@@ -290,7 +292,8 @@ int git_branch_move(
290
292
  log_message = GIT_BUF_INIT;
291
293
  int error;
292
294
 
293
- assert(branch && new_branch_name);
295
+ GIT_ASSERT_ARG(branch);
296
+ GIT_ASSERT_ARG(new_branch_name);
294
297
 
295
298
  if (!git_reference_is_branch(branch))
296
299
  return not_a_local_branch(git_reference_name(branch));
@@ -335,7 +338,10 @@ int git_branch_lookup(
335
338
  git_branch_t branch_type)
336
339
  {
337
340
  int error = -1;
338
- assert(ref_out && repo && branch_name);
341
+
342
+ GIT_ASSERT_ARG(ref_out);
343
+ GIT_ASSERT_ARG(repo);
344
+ GIT_ASSERT_ARG(branch_name);
339
345
 
340
346
  switch (branch_type) {
341
347
  case GIT_BRANCH_LOCAL:
@@ -348,7 +354,7 @@ int git_branch_lookup(
348
354
  error = retrieve_branch_reference(ref_out, repo, branch_name, true);
349
355
  break;
350
356
  default:
351
- assert(false);
357
+ GIT_ASSERT(false);
352
358
  }
353
359
  return error;
354
360
  }
@@ -359,7 +365,8 @@ int git_branch_name(
359
365
  {
360
366
  const char *branch_name;
361
367
 
362
- assert(out && ref);
368
+ GIT_ASSERT_ARG(out);
369
+ GIT_ASSERT_ARG(ref);
363
370
 
364
371
  branch_name = ref->name;
365
372
 
@@ -407,9 +414,11 @@ int git_branch_upstream_name(
407
414
  const git_refspec *refspec;
408
415
  git_config *config;
409
416
 
410
- assert(out && refname);
417
+ GIT_ASSERT_ARG(out);
418
+ GIT_ASSERT_ARG(refname);
411
419
 
412
- git_buf_sanitize(out);
420
+ if ((error = git_buf_sanitize(out)) < 0)
421
+ return error;
413
422
 
414
423
  if (!git_reference__is_branch(refname))
415
424
  return not_a_local_branch(refname);
@@ -459,7 +468,7 @@ cleanup:
459
468
  return error;
460
469
  }
461
470
 
462
- int git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *refname)
471
+ static int git_branch_upstream_with_format(git_buf *buf, git_repository *repo, const char *refname, const char *format, const char *format_name)
463
472
  {
464
473
  int error;
465
474
  git_config *cfg;
@@ -470,13 +479,12 @@ int git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *r
470
479
  if ((error = git_repository_config__weakptr(&cfg, repo)) < 0)
471
480
  return error;
472
481
 
473
- git_buf_sanitize(buf);
474
-
475
- if ((error = retrieve_upstream_configuration(buf, cfg, refname, "branch.%s.remote")) < 0)
482
+ if ((error = git_buf_sanitize(buf)) < 0 ||
483
+ (error = retrieve_upstream_configuration(buf, cfg, refname, format)) < 0)
476
484
  return error;
477
485
 
478
486
  if (git_buf_len(buf) == 0) {
479
- git_error_set(GIT_ERROR_REFERENCE, "branch '%s' does not have an upstream remote", refname);
487
+ git_error_set(GIT_ERROR_REFERENCE, "branch '%s' does not have an upstream %s", refname, format_name);
480
488
  error = GIT_ENOTFOUND;
481
489
  git_buf_clear(buf);
482
490
  }
@@ -484,6 +492,16 @@ int git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *r
484
492
  return error;
485
493
  }
486
494
 
495
+ int git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *refname)
496
+ {
497
+ return git_branch_upstream_with_format(buf, repo, refname, "branch.%s.remote", "remote");
498
+ }
499
+
500
+ int git_branch_upstream_merge(git_buf *buf, git_repository *repo, const char *refname)
501
+ {
502
+ return git_branch_upstream_with_format(buf, repo, refname, "branch.%s.merge", "merge");
503
+ }
504
+
487
505
  int git_branch_remote_name(git_buf *buf, git_repository *repo, const char *refname)
488
506
  {
489
507
  git_strarray remote_list = {0};
@@ -493,9 +511,12 @@ int git_branch_remote_name(git_buf *buf, git_repository *repo, const char *refna
493
511
  int error = 0;
494
512
  char *remote_name = NULL;
495
513
 
496
- assert(buf && repo && refname);
514
+ GIT_ASSERT_ARG(buf);
515
+ GIT_ASSERT_ARG(repo);
516
+ GIT_ASSERT_ARG(refname);
497
517
 
498
- git_buf_sanitize(buf);
518
+ if ((error = git_buf_sanitize(buf)) < 0)
519
+ return error;
499
520
 
500
521
  /* Verify that this is a remote branch */
501
522
  if (!git_reference__is_remote(refname)) {
@@ -548,7 +569,7 @@ cleanup:
548
569
  if (error < 0)
549
570
  git_buf_dispose(buf);
550
571
 
551
- git_strarray_free(&remote_list);
572
+ git_strarray_dispose(&remote_list);
552
573
  return error;
553
574
  }
554
575
 
@@ -704,7 +725,7 @@ int git_branch_is_head(
704
725
  bool is_same = false;
705
726
  int error;
706
727
 
707
- assert(branch);
728
+ GIT_ASSERT_ARG(branch);
708
729
 
709
730
  if (!git_reference_is_branch(branch))
710
731
  return false;
@@ -725,3 +746,32 @@ int git_branch_is_head(
725
746
 
726
747
  return is_same;
727
748
  }
749
+
750
+ int git_branch_name_is_valid(int *valid, const char *name)
751
+ {
752
+ git_buf ref_name = GIT_BUF_INIT;
753
+ int error = 0;
754
+
755
+ GIT_ASSERT(valid);
756
+
757
+ *valid = 0;
758
+
759
+ /*
760
+ * Discourage branch name starting with dash,
761
+ * https://github.com/git/git/commit/6348624010888b
762
+ * and discourage HEAD as branch name,
763
+ * https://github.com/git/git/commit/a625b092cc5994
764
+ */
765
+ if (!name || name[0] == '-' || !git__strcmp(name, "HEAD"))
766
+ goto done;
767
+
768
+ if ((error = git_buf_puts(&ref_name, GIT_REFS_HEADS_DIR)) < 0 ||
769
+ (error = git_buf_puts(&ref_name, name)) < 0)
770
+ goto done;
771
+
772
+ error = git_reference_name_is_valid(valid, ref_name.ptr);
773
+
774
+ done:
775
+ git_buf_dispose(&ref_name);
776
+ return error;
777
+ }