rugged 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +1 -1
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_object.c +1 -1
  6. data/ext/rugged/rugged_repo.c +3 -3
  7. data/lib/rugged/repository.rb +2 -2
  8. data/lib/rugged/version.rb +1 -1
  9. data/vendor/libgit2/CMakeLists.txt +11 -6
  10. data/vendor/libgit2/COPYING +109 -1
  11. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +4 -0
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +1 -0
  14. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  15. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +18 -5
  16. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -34
  17. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  18. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  19. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  20. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  21. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  22. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  23. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  24. data/vendor/libgit2/deps/ntlmclient/ntlm.c +156 -124
  25. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  26. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  27. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  29. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  30. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  32. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  33. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  34. data/vendor/libgit2/include/git2/apply.h +2 -0
  35. data/vendor/libgit2/include/git2/attr.h +89 -0
  36. data/vendor/libgit2/include/git2/blame.h +93 -42
  37. data/vendor/libgit2/include/git2/blob.h +31 -3
  38. data/vendor/libgit2/include/git2/branch.h +25 -0
  39. data/vendor/libgit2/include/git2/cert.h +42 -5
  40. data/vendor/libgit2/include/git2/checkout.h +28 -12
  41. data/vendor/libgit2/include/git2/commit.h +35 -19
  42. data/vendor/libgit2/include/git2/common.h +19 -4
  43. data/vendor/libgit2/include/git2/config.h +1 -1
  44. data/vendor/libgit2/include/git2/deprecated.h +206 -6
  45. data/vendor/libgit2/include/git2/diff.h +35 -20
  46. data/vendor/libgit2/include/git2/errors.h +6 -6
  47. data/vendor/libgit2/include/git2/filter.h +57 -17
  48. data/vendor/libgit2/include/git2/graph.h +20 -2
  49. data/vendor/libgit2/include/git2/index.h +3 -3
  50. data/vendor/libgit2/include/git2/indexer.h +2 -1
  51. data/vendor/libgit2/include/git2/odb.h +44 -20
  52. data/vendor/libgit2/include/git2/patch.h +8 -0
  53. data/vendor/libgit2/include/git2/rebase.h +25 -1
  54. data/vendor/libgit2/include/git2/refs.h +9 -5
  55. data/vendor/libgit2/include/git2/remote.h +59 -6
  56. data/vendor/libgit2/include/git2/repository.h +95 -52
  57. data/vendor/libgit2/include/git2/revparse.h +5 -5
  58. data/vendor/libgit2/include/git2/status.h +115 -59
  59. data/vendor/libgit2/include/git2/submodule.h +9 -0
  60. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  61. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  62. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  63. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  64. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  65. data/vendor/libgit2/include/git2/tag.h +12 -0
  66. data/vendor/libgit2/include/git2/transport.h +1 -1
  67. data/vendor/libgit2/include/git2/tree.h +2 -14
  68. data/vendor/libgit2/include/git2/types.h +9 -0
  69. data/vendor/libgit2/include/git2/version.h +3 -3
  70. data/vendor/libgit2/include/git2/worktree.h +1 -0
  71. data/vendor/libgit2/src/CMakeLists.txt +25 -4
  72. data/vendor/libgit2/src/alloc.c +21 -8
  73. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  74. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  75. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  76. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  77. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  78. data/vendor/libgit2/src/annotated_commit.c +21 -9
  79. data/vendor/libgit2/src/apply.c +16 -7
  80. data/vendor/libgit2/src/array.h +11 -11
  81. data/vendor/libgit2/src/attr.c +181 -74
  82. data/vendor/libgit2/src/attr_file.c +84 -39
  83. data/vendor/libgit2/src/attr_file.h +32 -11
  84. data/vendor/libgit2/src/attrcache.c +42 -37
  85. data/vendor/libgit2/src/attrcache.h +4 -5
  86. data/vendor/libgit2/src/blame.c +26 -15
  87. data/vendor/libgit2/src/blob.c +44 -24
  88. data/vendor/libgit2/src/branch.c +69 -17
  89. data/vendor/libgit2/src/buffer.c +334 -25
  90. data/vendor/libgit2/src/buffer.h +153 -2
  91. data/vendor/libgit2/src/cache.c +2 -2
  92. data/vendor/libgit2/src/cache.h +7 -7
  93. data/vendor/libgit2/src/cc-compat.h +10 -2
  94. data/vendor/libgit2/src/checkout.c +48 -26
  95. data/vendor/libgit2/src/cherrypick.c +6 -2
  96. data/vendor/libgit2/src/clone.c +26 -11
  97. data/vendor/libgit2/src/commit.c +41 -28
  98. data/vendor/libgit2/src/commit_graph.c +1209 -0
  99. data/vendor/libgit2/src/commit_graph.h +162 -0
  100. data/vendor/libgit2/src/commit_list.c +46 -0
  101. data/vendor/libgit2/src/commit_list.h +2 -0
  102. data/vendor/libgit2/src/common.h +25 -2
  103. data/vendor/libgit2/src/config.c +37 -15
  104. data/vendor/libgit2/src/config_cache.c +9 -4
  105. data/vendor/libgit2/src/config_file.c +16 -8
  106. data/vendor/libgit2/src/config_parse.c +4 -6
  107. data/vendor/libgit2/src/crlf.c +16 -6
  108. data/vendor/libgit2/src/date.c +4 -3
  109. data/vendor/libgit2/src/delta.c +1 -1
  110. data/vendor/libgit2/src/describe.c +6 -3
  111. data/vendor/libgit2/src/diff.c +11 -8
  112. data/vendor/libgit2/src/diff_driver.c +21 -17
  113. data/vendor/libgit2/src/diff_file.c +2 -6
  114. data/vendor/libgit2/src/diff_generate.c +46 -17
  115. data/vendor/libgit2/src/diff_print.c +19 -6
  116. data/vendor/libgit2/src/diff_stats.c +7 -5
  117. data/vendor/libgit2/src/diff_tform.c +11 -10
  118. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  119. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  120. data/vendor/libgit2/src/errors.c +24 -19
  121. data/vendor/libgit2/src/features.h.in +5 -1
  122. data/vendor/libgit2/src/fetch.c +5 -2
  123. data/vendor/libgit2/src/fetchhead.c +8 -4
  124. data/vendor/libgit2/src/filebuf.c +9 -7
  125. data/vendor/libgit2/src/filter.c +206 -110
  126. data/vendor/libgit2/src/filter.h +24 -5
  127. data/vendor/libgit2/src/futils.c +5 -5
  128. data/vendor/libgit2/src/futils.h +1 -1
  129. data/vendor/libgit2/src/graph.c +64 -9
  130. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  131. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  132. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  133. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  134. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  135. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  136. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  137. data/vendor/libgit2/src/hash.c +16 -13
  138. data/vendor/libgit2/src/hash.h +1 -1
  139. data/vendor/libgit2/src/hashsig.c +23 -10
  140. data/vendor/libgit2/src/ident.c +13 -3
  141. data/vendor/libgit2/src/ignore.c +35 -19
  142. data/vendor/libgit2/src/index.c +112 -75
  143. data/vendor/libgit2/src/index.h +1 -1
  144. data/vendor/libgit2/src/indexer.c +50 -32
  145. data/vendor/libgit2/src/integer.h +79 -2
  146. data/vendor/libgit2/src/iterator.c +36 -24
  147. data/vendor/libgit2/src/iterator.h +1 -1
  148. data/vendor/libgit2/src/khash.h +2 -11
  149. data/vendor/libgit2/src/{settings.c → libgit2.c} +117 -50
  150. data/vendor/libgit2/src/libgit2.h +15 -0
  151. data/vendor/libgit2/src/mailmap.c +23 -10
  152. data/vendor/libgit2/src/map.h +3 -3
  153. data/vendor/libgit2/src/merge.c +75 -32
  154. data/vendor/libgit2/src/merge.h +2 -1
  155. data/vendor/libgit2/src/merge_driver.c +19 -13
  156. data/vendor/libgit2/src/merge_file.c +11 -3
  157. data/vendor/libgit2/src/message.c +3 -1
  158. data/vendor/libgit2/src/midx.c +471 -10
  159. data/vendor/libgit2/src/midx.h +28 -1
  160. data/vendor/libgit2/src/mwindow.c +106 -60
  161. data/vendor/libgit2/src/mwindow.h +3 -3
  162. data/vendor/libgit2/src/net.c +127 -3
  163. data/vendor/libgit2/src/net.h +16 -2
  164. data/vendor/libgit2/src/netops.c +6 -4
  165. data/vendor/libgit2/src/netops.h +2 -2
  166. data/vendor/libgit2/src/notes.c +10 -10
  167. data/vendor/libgit2/src/object.c +22 -14
  168. data/vendor/libgit2/src/odb.c +289 -51
  169. data/vendor/libgit2/src/odb.h +16 -2
  170. data/vendor/libgit2/src/odb_loose.c +28 -18
  171. data/vendor/libgit2/src/odb_mempack.c +1 -1
  172. data/vendor/libgit2/src/odb_pack.c +391 -114
  173. data/vendor/libgit2/src/oid.c +5 -4
  174. data/vendor/libgit2/src/pack-objects.c +54 -48
  175. data/vendor/libgit2/src/pack.c +339 -125
  176. data/vendor/libgit2/src/pack.h +25 -7
  177. data/vendor/libgit2/src/patch.c +14 -7
  178. data/vendor/libgit2/src/patch_generate.c +2 -2
  179. data/vendor/libgit2/src/patch_parse.c +2 -1
  180. data/vendor/libgit2/src/path.c +98 -53
  181. data/vendor/libgit2/src/path.h +79 -6
  182. data/vendor/libgit2/src/pathspec.c +8 -8
  183. data/vendor/libgit2/src/pool.c +13 -7
  184. data/vendor/libgit2/src/posix.c +43 -12
  185. data/vendor/libgit2/src/posix.h +9 -0
  186. data/vendor/libgit2/src/reader.c +10 -6
  187. data/vendor/libgit2/src/rebase.c +93 -49
  188. data/vendor/libgit2/src/refdb.c +30 -13
  189. data/vendor/libgit2/src/refdb_fs.c +125 -71
  190. data/vendor/libgit2/src/reflog.c +19 -14
  191. data/vendor/libgit2/src/refs.c +91 -43
  192. data/vendor/libgit2/src/refs.h +1 -1
  193. data/vendor/libgit2/src/refspec.c +80 -44
  194. data/vendor/libgit2/src/remote.c +281 -105
  195. data/vendor/libgit2/src/remote.h +2 -1
  196. data/vendor/libgit2/src/repository.c +191 -118
  197. data/vendor/libgit2/src/repository.h +13 -2
  198. data/vendor/libgit2/src/reset.c +7 -6
  199. data/vendor/libgit2/src/revert.c +6 -2
  200. data/vendor/libgit2/src/revparse.c +14 -9
  201. data/vendor/libgit2/src/revwalk.c +32 -15
  202. data/vendor/libgit2/src/runtime.c +162 -0
  203. data/vendor/libgit2/src/runtime.h +62 -0
  204. data/vendor/libgit2/src/settings.h +11 -0
  205. data/vendor/libgit2/src/signature.c +6 -5
  206. data/vendor/libgit2/src/sortedcache.h +10 -8
  207. data/vendor/libgit2/src/stash.c +3 -1
  208. data/vendor/libgit2/src/status.c +7 -4
  209. data/vendor/libgit2/src/strarray.c +2 -1
  210. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  211. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  212. data/vendor/libgit2/src/streams/openssl.c +101 -201
  213. data/vendor/libgit2/src/streams/openssl.h +9 -1
  214. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  215. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  216. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  217. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  218. data/vendor/libgit2/src/streams/registry.c +5 -6
  219. data/vendor/libgit2/src/streams/socket.c +6 -2
  220. data/vendor/libgit2/src/streams/stransport.c +6 -3
  221. data/vendor/libgit2/src/streams/tls.c +5 -3
  222. data/vendor/libgit2/src/submodule.c +128 -62
  223. data/vendor/libgit2/src/submodule.h +9 -9
  224. data/vendor/libgit2/src/sysdir.c +4 -6
  225. data/vendor/libgit2/src/tag.c +47 -11
  226. data/vendor/libgit2/src/thread.c +140 -0
  227. data/vendor/libgit2/src/thread.h +479 -0
  228. data/vendor/libgit2/src/threadstate.c +83 -0
  229. data/vendor/libgit2/src/threadstate.h +24 -0
  230. data/vendor/libgit2/src/trace.c +2 -2
  231. data/vendor/libgit2/src/trace.h +17 -13
  232. data/vendor/libgit2/src/transaction.c +19 -8
  233. data/vendor/libgit2/src/transport.c +3 -3
  234. data/vendor/libgit2/src/transports/auth.c +1 -1
  235. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  236. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  237. data/vendor/libgit2/src/transports/credential.c +15 -7
  238. data/vendor/libgit2/src/transports/git.c +1 -3
  239. data/vendor/libgit2/src/transports/http.c +19 -17
  240. data/vendor/libgit2/src/transports/http.h +1 -0
  241. data/vendor/libgit2/src/transports/httpclient.c +62 -30
  242. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  243. data/vendor/libgit2/src/transports/local.c +3 -3
  244. data/vendor/libgit2/src/transports/smart.c +12 -7
  245. data/vendor/libgit2/src/transports/smart.h +1 -1
  246. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  247. data/vendor/libgit2/src/transports/ssh.c +51 -17
  248. data/vendor/libgit2/src/transports/winhttp.c +138 -81
  249. data/vendor/libgit2/src/tree.c +100 -77
  250. data/vendor/libgit2/src/tree.h +1 -0
  251. data/vendor/libgit2/src/tsort.c +0 -2
  252. data/vendor/libgit2/src/unix/map.c +3 -1
  253. data/vendor/libgit2/src/unix/posix.h +3 -0
  254. data/vendor/libgit2/src/unix/pthread.h +2 -1
  255. data/vendor/libgit2/src/utf8.c +150 -0
  256. data/vendor/libgit2/src/utf8.h +52 -0
  257. data/vendor/libgit2/src/util.c +53 -129
  258. data/vendor/libgit2/src/util.h +33 -39
  259. data/vendor/libgit2/src/vector.c +23 -19
  260. data/vendor/libgit2/src/vector.h +4 -2
  261. data/vendor/libgit2/src/win32/findfile.c +4 -2
  262. data/vendor/libgit2/src/win32/map.c +1 -1
  263. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  264. data/vendor/libgit2/src/win32/path_w32.c +22 -24
  265. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  266. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  267. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  268. data/vendor/libgit2/src/win32/reparse.h +4 -4
  269. data/vendor/libgit2/src/win32/thread.c +24 -15
  270. data/vendor/libgit2/src/win32/thread.h +1 -1
  271. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  272. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  273. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  274. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  275. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  276. data/vendor/libgit2/src/worktree.c +32 -14
  277. data/vendor/libgit2/src/zstream.c +1 -1
  278. metadata +32 -16
  279. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  280. data/vendor/libgit2/src/buf_text.c +0 -316
  281. data/vendor/libgit2/src/buf_text.h +0 -122
  282. data/vendor/libgit2/src/global.c +0 -363
  283. data/vendor/libgit2/src/global.h +0 -41
  284. data/vendor/libgit2/src/thread-utils.c +0 -58
  285. data/vendor/libgit2/src/thread-utils.h +0 -364
  286. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  287. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  288. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -54,7 +54,7 @@ GIT_INLINE(git_filemode_t) normalize_filemode(git_filemode_t filemode)
54
54
  static int valid_entry_name(git_repository *repo, const char *filename)
55
55
  {
56
56
  return *filename != '\0' &&
57
- git_path_isvalid(repo, filename, 0,
57
+ git_path_validate(repo, filename, 0,
58
58
  GIT_PATH_REJECT_TRAVERSAL | GIT_PATH_REJECT_DOT_GIT | GIT_PATH_REJECT_SLASH);
59
59
  }
60
60
 
@@ -228,7 +228,7 @@ int git_tree_entry_dup(git_tree_entry **dest, const git_tree_entry *source)
228
228
  {
229
229
  git_tree_entry *cpy;
230
230
 
231
- assert(source);
231
+ GIT_ASSERT_ARG(source);
232
232
 
233
233
  cpy = alloc_entry(source->filename, source->filename_len, source->oid);
234
234
  if (cpy == NULL)
@@ -261,19 +261,19 @@ git_filemode_t git_tree_entry_filemode_raw(const git_tree_entry *entry)
261
261
 
262
262
  const char *git_tree_entry_name(const git_tree_entry *entry)
263
263
  {
264
- assert(entry);
264
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
265
265
  return entry->filename;
266
266
  }
267
267
 
268
268
  const git_oid *git_tree_entry_id(const git_tree_entry *entry)
269
269
  {
270
- assert(entry);
270
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
271
271
  return entry->oid;
272
272
  }
273
273
 
274
274
  git_object_t git_tree_entry_type(const git_tree_entry *entry)
275
275
  {
276
- assert(entry);
276
+ GIT_ASSERT_ARG_WITH_RETVAL(entry, GIT_OBJECT_INVALID);
277
277
 
278
278
  if (S_ISGITLINK(entry->attr))
279
279
  return GIT_OBJECT_COMMIT;
@@ -288,7 +288,9 @@ int git_tree_entry_to_object(
288
288
  git_repository *repo,
289
289
  const git_tree_entry *entry)
290
290
  {
291
- assert(entry && object_out);
291
+ GIT_ASSERT_ARG(entry);
292
+ GIT_ASSERT_ARG(object_out);
293
+
292
294
  return git_object_lookup(object_out, repo, entry->oid, GIT_OBJECT_ANY);
293
295
  }
294
296
 
@@ -306,7 +308,8 @@ static const git_tree_entry *entry_fromname(
306
308
  const git_tree_entry *git_tree_entry_byname(
307
309
  const git_tree *tree, const char *filename)
308
310
  {
309
- assert(tree && filename);
311
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
312
+ GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
310
313
 
311
314
  return entry_fromname(tree, filename, strlen(filename));
312
315
  }
@@ -314,7 +317,7 @@ const git_tree_entry *git_tree_entry_byname(
314
317
  const git_tree_entry *git_tree_entry_byindex(
315
318
  const git_tree *tree, size_t idx)
316
319
  {
317
- assert(tree);
320
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
318
321
  return git_array_get(tree->entries, idx);
319
322
  }
320
323
 
@@ -324,7 +327,7 @@ const git_tree_entry *git_tree_entry_byid(
324
327
  size_t i;
325
328
  const git_tree_entry *e;
326
329
 
327
- assert(tree);
330
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
328
331
 
329
332
  git_array_foreach(tree->entries, i, e) {
330
333
  if (memcmp(&e->oid->id, &id->id, sizeof(id->id)) == 0)
@@ -336,13 +339,13 @@ const git_tree_entry *git_tree_entry_byid(
336
339
 
337
340
  size_t git_tree_entrycount(const git_tree *tree)
338
341
  {
339
- assert(tree);
342
+ GIT_ASSERT_ARG_WITH_RETVAL(tree, 0);
340
343
  return tree->entries.size;
341
344
  }
342
345
 
343
346
  size_t git_treebuilder_entrycount(git_treebuilder *bld)
344
347
  {
345
- assert(bld);
348
+ GIT_ASSERT_ARG_WITH_RETVAL(bld, 0);
346
349
 
347
350
  return git_strmap_size(bld->map);
348
351
  }
@@ -489,6 +492,56 @@ static int check_entry(git_repository *repo, const char *filename, const git_oid
489
492
  return 0;
490
493
  }
491
494
 
495
+ static int git_treebuilder__write_with_buffer(
496
+ git_oid *oid,
497
+ git_treebuilder *bld,
498
+ git_buf *buf)
499
+ {
500
+ int error = 0;
501
+ size_t i, entrycount;
502
+ git_odb *odb;
503
+ git_tree_entry *entry;
504
+ git_vector entries = GIT_VECTOR_INIT;
505
+
506
+ git_buf_clear(buf);
507
+
508
+ entrycount = git_strmap_size(bld->map);
509
+ if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
510
+ goto out;
511
+
512
+ if (buf->asize == 0 &&
513
+ (error = git_buf_grow(buf, entrycount * 72)) < 0)
514
+ goto out;
515
+
516
+ git_strmap_foreach_value(bld->map, entry, {
517
+ if ((error = git_vector_insert(&entries, entry)) < 0)
518
+ goto out;
519
+ });
520
+
521
+ git_vector_sort(&entries);
522
+
523
+ for (i = 0; i < entries.length && !error; ++i) {
524
+ entry = git_vector_get(&entries, i);
525
+
526
+ git_buf_printf(buf, "%o ", entry->attr);
527
+ git_buf_put(buf, entry->filename, entry->filename_len + 1);
528
+ git_buf_put(buf, (char *)entry->oid->id, GIT_OID_RAWSZ);
529
+
530
+ if (git_buf_oom(buf)) {
531
+ error = -1;
532
+ goto out;
533
+ }
534
+ }
535
+
536
+ if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
537
+ error = git_odb_write(oid, odb, buf->ptr, buf->size, GIT_OBJECT_TREE);
538
+
539
+ out:
540
+ git_vector_free(&entries);
541
+
542
+ return error;
543
+ }
544
+
492
545
  static int append_entry(
493
546
  git_treebuilder *bld,
494
547
  const char *filename,
@@ -607,7 +660,7 @@ static int write_tree(
607
660
  }
608
661
  }
609
662
 
610
- if (git_treebuilder_write_with_buffer(oid, bld, shared_buf) < 0)
663
+ if (git_treebuilder__write_with_buffer(oid, bld, shared_buf) < 0)
611
664
  goto on_error;
612
665
 
613
666
  git_treebuilder_free(bld);
@@ -626,7 +679,9 @@ int git_tree__write_index(
626
679
  git_buf shared_buf = GIT_BUF_INIT;
627
680
  bool old_ignore_case = false;
628
681
 
629
- assert(oid && index && repo);
682
+ GIT_ASSERT_ARG(oid);
683
+ GIT_ASSERT_ARG(index);
684
+ GIT_ASSERT_ARG(repo);
630
685
 
631
686
  if (git_index_has_conflicts(index)) {
632
687
  git_error_set(GIT_ERROR_INDEX,
@@ -680,7 +735,8 @@ int git_treebuilder_new(
680
735
  git_treebuilder *bld;
681
736
  size_t i;
682
737
 
683
- assert(builder_p && repo);
738
+ GIT_ASSERT_ARG(builder_p);
739
+ GIT_ASSERT_ARG(repo);
684
740
 
685
741
  bld = git__calloc(1, sizeof(git_treebuilder));
686
742
  GIT_ERROR_CHECK_ALLOC(bld);
@@ -723,7 +779,9 @@ int git_treebuilder_insert(
723
779
  git_tree_entry *entry;
724
780
  int error;
725
781
 
726
- assert(bld && id && filename);
782
+ GIT_ASSERT_ARG(bld);
783
+ GIT_ASSERT_ARG(id);
784
+ GIT_ASSERT_ARG(filename);
727
785
 
728
786
  if ((error = check_entry(bld->repo, filename, id, filemode)) < 0)
729
787
  return error;
@@ -751,7 +809,9 @@ int git_treebuilder_insert(
751
809
 
752
810
  static git_tree_entry *treebuilder_get(git_treebuilder *bld, const char *filename)
753
811
  {
754
- assert(bld && filename);
812
+ GIT_ASSERT_ARG_WITH_RETVAL(bld, NULL);
813
+ GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
814
+
755
815
  return git_strmap_get(bld->map, filename);
756
816
  }
757
817
 
@@ -775,63 +835,10 @@ int git_treebuilder_remove(git_treebuilder *bld, const char *filename)
775
835
 
776
836
  int git_treebuilder_write(git_oid *oid, git_treebuilder *bld)
777
837
  {
778
- int error;
779
- git_buf buffer = GIT_BUF_INIT;
780
-
781
- error = git_treebuilder_write_with_buffer(oid, bld, &buffer);
782
-
783
- git_buf_dispose(&buffer);
784
- return error;
785
- }
786
-
787
- int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *tree)
788
- {
789
- int error = 0;
790
- size_t i, entrycount;
791
- git_odb *odb;
792
- git_tree_entry *entry;
793
- git_vector entries = GIT_VECTOR_INIT;
794
-
795
- assert(bld);
796
- assert(tree);
797
-
798
- git_buf_clear(tree);
799
-
800
- entrycount = git_strmap_size(bld->map);
801
- if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
802
- goto out;
803
-
804
- if (tree->asize == 0 &&
805
- (error = git_buf_grow(tree, entrycount * 72)) < 0)
806
- goto out;
807
-
808
- git_strmap_foreach_value(bld->map, entry, {
809
- if ((error = git_vector_insert(&entries, entry)) < 0)
810
- goto out;
811
- });
812
-
813
- git_vector_sort(&entries);
838
+ GIT_ASSERT_ARG(oid);
839
+ GIT_ASSERT_ARG(bld);
814
840
 
815
- for (i = 0; i < entries.length && !error; ++i) {
816
- entry = git_vector_get(&entries, i);
817
-
818
- git_buf_printf(tree, "%o ", entry->attr);
819
- git_buf_put(tree, entry->filename, entry->filename_len + 1);
820
- git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
821
-
822
- if (git_buf_oom(tree)) {
823
- error = -1;
824
- goto out;
825
- }
826
- }
827
-
828
- if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
829
- error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJECT_TREE);
830
-
831
- out:
832
- git_vector_free(&entries);
833
-
834
- return error;
841
+ return git_treebuilder__write_with_buffer(oid, bld, &bld->write_cache);
835
842
  }
836
843
 
837
844
  int git_treebuilder_filter(
@@ -842,7 +849,8 @@ int git_treebuilder_filter(
842
849
  const char *filename;
843
850
  git_tree_entry *entry;
844
851
 
845
- assert(bld && filter);
852
+ GIT_ASSERT_ARG(bld);
853
+ GIT_ASSERT_ARG(filter);
846
854
 
847
855
  git_strmap_foreach(bld->map, filename, entry, {
848
856
  if (filter(entry, payload)) {
@@ -858,7 +866,7 @@ int git_treebuilder_clear(git_treebuilder *bld)
858
866
  {
859
867
  git_tree_entry *e;
860
868
 
861
- assert(bld);
869
+ GIT_ASSERT_ARG(bld);
862
870
 
863
871
  git_strmap_foreach_value(bld->map, e, git_tree_entry_free(e));
864
872
  git_strmap_clear(bld->map);
@@ -871,6 +879,7 @@ void git_treebuilder_free(git_treebuilder *bld)
871
879
  if (bld == NULL)
872
880
  return;
873
881
 
882
+ git_buf_dispose(&bld->write_cache);
874
883
  git_treebuilder_clear(bld);
875
884
  git_strmap_free(bld->map);
876
885
  git__free(bld);
@@ -1174,10 +1183,10 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
1174
1183
 
1175
1184
  for (j = 0; j < steps_up; j++) {
1176
1185
  tree_stack_entry *current, *popped = git_array_pop(stack);
1177
- assert(popped);
1186
+ GIT_ASSERT(popped);
1178
1187
 
1179
1188
  current = git_array_last(stack);
1180
- assert(current);
1189
+ GIT_ASSERT(current);
1181
1190
 
1182
1191
  if ((error = create_popped_tree(current, popped, &component)) < 0)
1183
1192
  goto cleanup;
@@ -1242,8 +1251,9 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
1242
1251
  }
1243
1252
  case GIT_TREE_UPDATE_REMOVE:
1244
1253
  {
1254
+ tree_stack_entry *last = git_array_last(stack);
1245
1255
  char *basename = git_path_basename(update->path);
1246
- error = git_treebuilder_remove(git_array_last(stack)->bld, basename);
1256
+ error = git_treebuilder_remove(last->bld, basename);
1247
1257
  git__free(basename);
1248
1258
  break;
1249
1259
  }
@@ -1295,3 +1305,16 @@ cleanup:
1295
1305
  git_vector_free(&entries);
1296
1306
  return error;
1297
1307
  }
1308
+
1309
+ /* Deprecated Functions */
1310
+
1311
+ #ifndef GIT_DEPRECATE_HARD
1312
+
1313
+ int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *buf)
1314
+ {
1315
+ GIT_UNUSED(buf);
1316
+
1317
+ return git_treebuilder_write(oid, bld);
1318
+ }
1319
+
1320
+ #endif
@@ -32,6 +32,7 @@ struct git_tree {
32
32
  struct git_treebuilder {
33
33
  git_repository *repo;
34
34
  git_strmap *map;
35
+ git_buf write_cache;
35
36
  };
36
37
 
37
38
  GIT_INLINE(bool) git_tree_entry__is_tree(const struct git_tree_entry *e)
@@ -29,8 +29,6 @@ static int binsearch(
29
29
  int l, c, r;
30
30
  void *lx, *cx;
31
31
 
32
- assert(size > 0);
33
-
34
32
  l = 0;
35
33
  r = (int)size - 1;
36
34
  c = r >> 1;
@@ -66,8 +66,10 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, off64_t offset
66
66
 
67
67
  int p_munmap(git_map *map)
68
68
  {
69
- assert(map != NULL);
69
+ GIT_ASSERT_ARG(map);
70
70
  munmap(map->data, map->len);
71
+ map->data = NULL;
72
+ map->len = 0;
71
73
 
72
74
  return 0;
73
75
  }
@@ -101,4 +101,7 @@ GIT_INLINE(int) p_futimes(int f, const struct p_timeval t[2])
101
101
  # define p_futimes futimes
102
102
  #endif
103
103
 
104
+ #define p_pread(f, d, s, o) pread(f, d, s, o)
105
+ #define p_pwrite(f, d, s, o) pwrite(f, d, s, o)
106
+
104
107
  #endif
@@ -12,7 +12,8 @@ typedef struct {
12
12
  pthread_t thread;
13
13
  } git_thread;
14
14
 
15
- #define git_threads_init() (void)0
15
+ GIT_INLINE(int) git_threads_global_init(void) { return 0; }
16
+
16
17
  #define git_thread_create(git_thread_ptr, start_routine, arg) \
17
18
  pthread_create(&(git_thread_ptr)->thread, NULL, start_routine, arg)
18
19
  #define git_thread_join(git_thread_ptr, status) \
@@ -0,0 +1,150 @@
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 "utf8.h"
9
+
10
+ #include "common.h"
11
+
12
+ /*
13
+ * git_utf8_iterate is taken from the utf8proc project,
14
+ * http://www.public-software-group.org/utf8proc
15
+ *
16
+ * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
17
+ *
18
+ * Permission is hereby granted, free of charge, to any person obtaining a
19
+ * copy of this software and associated documentation files (the ""Software""),
20
+ * to deal in the Software without restriction, including without limitation
21
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
22
+ * and/or sell copies of the Software, and to permit persons to whom the
23
+ * Software is furnished to do so, subject to the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be included in
26
+ * all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
33
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
34
+ * DEALINGS IN THE SOFTWARE.
35
+ */
36
+
37
+ static const uint8_t utf8proc_utf8class[256] = {
38
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
39
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
40
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
41
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
42
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
43
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
44
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
45
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
50
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
51
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
52
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
53
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
54
+ };
55
+
56
+ static int utf8_charlen(const uint8_t *str, size_t str_len)
57
+ {
58
+ uint8_t length;
59
+ size_t i;
60
+
61
+ length = utf8proc_utf8class[str[0]];
62
+ if (!length)
63
+ return -1;
64
+
65
+ if (str_len > 0 && length > str_len)
66
+ return -1;
67
+
68
+ for (i = 1; i < length; i++) {
69
+ if ((str[i] & 0xC0) != 0x80)
70
+ return -1;
71
+ }
72
+
73
+ return (int)length;
74
+ }
75
+
76
+ int git_utf8_iterate(uint32_t *out, const char *_str, size_t str_len)
77
+ {
78
+ const uint8_t *str = (const uint8_t *)_str;
79
+ uint32_t uc = 0;
80
+ int length;
81
+
82
+ *out = 0;
83
+
84
+ if ((length = utf8_charlen(str, str_len)) < 0)
85
+ return -1;
86
+
87
+ switch (length) {
88
+ case 1:
89
+ uc = str[0];
90
+ break;
91
+ case 2:
92
+ uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
93
+ if (uc < 0x80) uc = -1;
94
+ break;
95
+ case 3:
96
+ uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6)
97
+ + (str[2] & 0x3F);
98
+ if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) ||
99
+ (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1;
100
+ break;
101
+ case 4:
102
+ uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
103
+ + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
104
+ if (uc < 0x10000 || uc >= 0x110000) uc = -1;
105
+ break;
106
+ default:
107
+ return -1;
108
+ }
109
+
110
+ if ((uc & 0xFFFF) >= 0xFFFE)
111
+ return -1;
112
+
113
+ *out = uc;
114
+ return length;
115
+ }
116
+
117
+ size_t git_utf8_char_length(const char *_str, size_t str_len)
118
+ {
119
+ const uint8_t *str = (const uint8_t *)_str;
120
+ size_t offset = 0, count = 0;
121
+
122
+ while (offset < str_len) {
123
+ int length = utf8_charlen(str + offset, str_len - offset);
124
+
125
+ if (length < 0)
126
+ length = 1;
127
+
128
+ offset += length;
129
+ count++;
130
+ }
131
+
132
+ return count;
133
+ }
134
+
135
+ size_t git_utf8_valid_buf_length(const char *_str, size_t str_len)
136
+ {
137
+ const uint8_t *str = (const uint8_t *)_str;
138
+ size_t offset = 0;
139
+
140
+ while (offset < str_len) {
141
+ int length = utf8_charlen(str + offset, str_len - offset);
142
+
143
+ if (length < 0)
144
+ break;
145
+
146
+ offset += length;
147
+ }
148
+
149
+ return offset;
150
+ }
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_utf8_h__
8
+ #define INCLUDE_utf8_h__
9
+
10
+ #include "common.h"
11
+
12
+ /*
13
+ * Iterate through an UTF-8 string, yielding one codepoint at a time.
14
+ *
15
+ * @param out pointer where to store the current codepoint
16
+ * @param str current position in the string
17
+ * @param str_len size left in the string
18
+ * @return length in bytes of the read codepoint; -1 if the codepoint was invalid
19
+ */
20
+ extern int git_utf8_iterate(uint32_t *out, const char *str, size_t str_len);
21
+
22
+ /**
23
+ * Returns the number of characters in the given string.
24
+ *
25
+ * This function will count invalid codepoints; if any given byte is
26
+ * not part of a valid UTF-8 codepoint, then it will be counted toward
27
+ * the length in characters.
28
+ *
29
+ * In other words:
30
+ * 0x24 (U+0024 "$") has length 1
31
+ * 0xc2 0xa2 (U+00A2 "¢") has length 1
32
+ * 0x24 0xc2 0xa2 (U+0024 U+00A2 "$¢") has length 2
33
+ * 0xf0 0x90 0x8d 0x88 (U+10348 "𐍈") has length 1
34
+ * 0x24 0xc0 0xc1 0x34 (U+0024 <invalid> <invalid> "4) has length 4
35
+ *
36
+ * @param str string to scan
37
+ * @param str_len size of the string
38
+ * @return length in characters of the string
39
+ */
40
+ extern size_t git_utf8_char_length(const char *str, size_t str_len);
41
+
42
+ /**
43
+ * Iterate through an UTF-8 string and stops after finding any invalid UTF-8
44
+ * codepoints.
45
+ *
46
+ * @param str string to scan
47
+ * @param str_len size of the string
48
+ * @return length in bytes of the string that contains valid data
49
+ */
50
+ extern size_t git_utf8_valid_buf_length(const char *str, size_t str_len);
51
+
52
+ #endif