rugged 0.1.2 → 0.16.0b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (277) hide show
  1. data/README.md +25 -36
  2. data/Rakefile +20 -98
  3. data/ext/rugged/extconf.rb +44 -4
  4. data/ext/rugged/remote.c +215 -0
  5. data/ext/rugged/rugged.c +171 -0
  6. data/ext/rugged/rugged.h +126 -0
  7. data/ext/rugged/rugged_blob.c +99 -0
  8. data/ext/rugged/rugged_commit.c +224 -0
  9. data/ext/rugged/rugged_config.c +238 -0
  10. data/ext/rugged/rugged_index.c +440 -0
  11. data/ext/rugged/rugged_object.c +203 -0
  12. data/ext/rugged/rugged_reference.c +401 -0
  13. data/ext/rugged/rugged_repo.c +482 -0
  14. data/ext/rugged/rugged_revwalk.c +138 -0
  15. data/ext/rugged/rugged_signature.c +80 -0
  16. data/ext/rugged/rugged_tag.c +216 -0
  17. data/ext/rugged/rugged_tree.c +322 -0
  18. data/ext/rugged/vendor/libgit2-dist.tar.gz +0 -0
  19. data/ext/rugged/vendor/libgit2-dist/deps/http-parser/http_parser.c +1778 -0
  20. data/ext/rugged/vendor/libgit2-dist/deps/http-parser/http_parser.h +267 -0
  21. data/ext/rugged/vendor/libgit2-dist/deps/zlib/adler32.c +169 -0
  22. data/ext/rugged/vendor/libgit2-dist/deps/zlib/crc32.c +442 -0
  23. data/ext/rugged/vendor/libgit2-dist/deps/zlib/crc32.h +441 -0
  24. data/ext/rugged/vendor/libgit2-dist/deps/zlib/deflate.c +1834 -0
  25. data/ext/rugged/vendor/libgit2-dist/deps/zlib/deflate.h +342 -0
  26. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inffast.c +340 -0
  27. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inffast.h +11 -0
  28. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inffixed.h +94 -0
  29. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inflate.c +1480 -0
  30. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inflate.h +122 -0
  31. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inftrees.c +330 -0
  32. data/ext/rugged/vendor/libgit2-dist/deps/zlib/inftrees.h +62 -0
  33. data/ext/rugged/vendor/libgit2-dist/deps/zlib/trees.c +1244 -0
  34. data/ext/rugged/vendor/libgit2-dist/deps/zlib/trees.h +128 -0
  35. data/ext/rugged/vendor/libgit2-dist/deps/zlib/zconf.h +54 -0
  36. data/ext/rugged/vendor/libgit2-dist/deps/zlib/zlib.h +1613 -0
  37. data/ext/rugged/vendor/libgit2-dist/deps/zlib/zutil.c +318 -0
  38. data/ext/rugged/vendor/libgit2-dist/deps/zlib/zutil.h +274 -0
  39. data/ext/rugged/vendor/libgit2-dist/examples/general.c +451 -0
  40. data/ext/rugged/vendor/libgit2-dist/examples/network/common.h +14 -0
  41. data/ext/rugged/vendor/libgit2-dist/examples/network/fetch.c +97 -0
  42. data/ext/rugged/vendor/libgit2-dist/examples/network/git2.c +58 -0
  43. data/ext/rugged/vendor/libgit2-dist/examples/network/index-pack.c +47 -0
  44. data/ext/rugged/vendor/libgit2-dist/examples/network/ls-remote.c +76 -0
  45. data/ext/rugged/vendor/libgit2-dist/examples/showindex.c +43 -0
  46. data/ext/rugged/vendor/libgit2-dist/include/git2.h +44 -0
  47. data/ext/rugged/vendor/libgit2-dist/include/git2/blob.h +120 -0
  48. data/ext/rugged/vendor/libgit2-dist/include/git2/branch.h +15 -0
  49. data/ext/rugged/vendor/libgit2-dist/include/git2/commit.h +263 -0
  50. data/ext/rugged/vendor/libgit2-dist/include/git2/common.h +103 -0
  51. data/ext/rugged/vendor/libgit2-dist/include/git2/config.h +278 -0
  52. data/ext/rugged/vendor/libgit2-dist/include/git2/errors.h +144 -0
  53. data/ext/rugged/vendor/libgit2-dist/include/git2/index.h +306 -0
  54. data/ext/rugged/vendor/libgit2-dist/include/git2/indexer.h +76 -0
  55. data/ext/rugged/vendor/libgit2-dist/include/git2/inttypes.h +305 -0
  56. data/ext/rugged/vendor/libgit2-dist/include/git2/net.h +51 -0
  57. data/ext/rugged/vendor/libgit2-dist/include/git2/object.h +173 -0
  58. data/ext/rugged/vendor/libgit2-dist/include/git2/odb.h +331 -0
  59. data/ext/rugged/vendor/libgit2-dist/include/git2/odb_backend.h +100 -0
  60. data/ext/rugged/vendor/libgit2-dist/include/git2/oid.h +218 -0
  61. data/ext/rugged/vendor/libgit2-dist/include/git2/reflog.h +128 -0
  62. data/ext/rugged/vendor/libgit2-dist/include/git2/refs.h +309 -0
  63. data/ext/rugged/vendor/libgit2-dist/include/git2/refspec.h +60 -0
  64. data/ext/rugged/vendor/libgit2-dist/include/git2/remote.h +176 -0
  65. data/ext/rugged/vendor/libgit2-dist/include/git2/repository.h +290 -0
  66. data/ext/rugged/vendor/libgit2-dist/include/git2/revwalk.h +169 -0
  67. data/ext/rugged/vendor/libgit2-dist/include/git2/signature.h +65 -0
  68. data/ext/rugged/vendor/libgit2-dist/include/git2/status.h +63 -0
  69. data/ext/rugged/vendor/libgit2-dist/include/git2/stdint.h +247 -0
  70. data/ext/rugged/vendor/libgit2-dist/include/git2/tag.h +279 -0
  71. data/ext/rugged/vendor/libgit2-dist/include/git2/threads.h +48 -0
  72. data/ext/rugged/vendor/libgit2-dist/include/git2/tree.h +318 -0
  73. data/ext/rugged/vendor/libgit2-dist/include/git2/types.h +169 -0
  74. data/ext/rugged/vendor/libgit2-dist/include/git2/version.h +15 -0
  75. data/ext/rugged/vendor/libgit2-dist/include/git2/windows.h +59 -0
  76. data/ext/rugged/vendor/libgit2-dist/include/git2/zlib.h +40 -0
  77. data/ext/rugged/vendor/libgit2-dist/src/blob.c +135 -0
  78. data/ext/rugged/vendor/libgit2-dist/src/blob.h +23 -0
  79. data/ext/rugged/vendor/libgit2-dist/src/bswap.h +97 -0
  80. data/ext/rugged/vendor/libgit2-dist/src/buffer.c +113 -0
  81. data/ext/rugged/vendor/libgit2-dist/src/buffer.h +32 -0
  82. data/ext/rugged/vendor/libgit2-dist/src/cache.c +111 -0
  83. data/ext/rugged/vendor/libgit2-dist/src/cache.h +64 -0
  84. data/ext/rugged/vendor/libgit2-dist/src/cc-compat.h +67 -0
  85. data/ext/rugged/vendor/libgit2-dist/src/commit.c +299 -0
  86. data/ext/rugged/vendor/libgit2-dist/src/commit.h +34 -0
  87. data/ext/rugged/vendor/libgit2-dist/src/common.h +64 -0
  88. data/ext/rugged/vendor/libgit2-dist/src/config.c +418 -0
  89. data/ext/rugged/vendor/libgit2-dist/src/config.h +24 -0
  90. data/ext/rugged/vendor/libgit2-dist/src/config_file.c +1210 -0
  91. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.c +115 -0
  92. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.h +33 -0
  93. data/ext/rugged/vendor/libgit2-dist/src/dir.h +47 -0
  94. data/ext/rugged/vendor/libgit2-dist/src/errors.c +104 -0
  95. data/ext/rugged/vendor/libgit2-dist/src/fetch.c +172 -0
  96. data/ext/rugged/vendor/libgit2-dist/src/fetch.h +18 -0
  97. data/ext/rugged/vendor/libgit2-dist/src/filebuf.c +400 -0
  98. data/ext/rugged/vendor/libgit2-dist/src/filebuf.h +72 -0
  99. data/ext/rugged/vendor/libgit2-dist/src/fileops.c +358 -0
  100. data/ext/rugged/vendor/libgit2-dist/src/fileops.h +151 -0
  101. data/ext/rugged/vendor/libgit2-dist/src/global.c +134 -0
  102. data/ext/rugged/vendor/libgit2-dist/src/global.h +24 -0
  103. data/ext/rugged/vendor/libgit2-dist/src/hash.c +74 -0
  104. data/ext/rugged/vendor/libgit2-dist/src/hash.h +29 -0
  105. data/ext/rugged/vendor/libgit2-dist/src/hashtable.c +243 -0
  106. data/ext/rugged/vendor/libgit2-dist/src/hashtable.h +80 -0
  107. data/ext/rugged/vendor/libgit2-dist/src/index.c +918 -0
  108. data/ext/rugged/vendor/libgit2-dist/src/index.h +34 -0
  109. data/ext/rugged/vendor/libgit2-dist/src/indexer.c +401 -0
  110. data/ext/rugged/vendor/libgit2-dist/src/map.h +37 -0
  111. data/ext/rugged/vendor/libgit2-dist/src/mwindow.c +272 -0
  112. data/ext/rugged/vendor/libgit2-dist/src/mwindow.h +45 -0
  113. data/ext/rugged/vendor/libgit2-dist/src/netops.c +198 -0
  114. data/ext/rugged/vendor/libgit2-dist/src/netops.h +36 -0
  115. data/ext/rugged/vendor/libgit2-dist/src/object.c +295 -0
  116. data/ext/rugged/vendor/libgit2-dist/src/odb.c +672 -0
  117. data/ext/rugged/vendor/libgit2-dist/src/odb.h +43 -0
  118. data/ext/rugged/vendor/libgit2-dist/src/odb_loose.c +855 -0
  119. data/ext/rugged/vendor/libgit2-dist/src/odb_pack.c +485 -0
  120. data/ext/rugged/vendor/libgit2-dist/src/oid.c +388 -0
  121. data/ext/rugged/vendor/libgit2-dist/src/pack.c +788 -0
  122. data/ext/rugged/vendor/libgit2-dist/src/pack.h +99 -0
  123. data/ext/rugged/vendor/libgit2-dist/src/path.c +270 -0
  124. data/ext/rugged/vendor/libgit2-dist/src/path.h +84 -0
  125. data/ext/rugged/vendor/libgit2-dist/src/pkt.c +426 -0
  126. data/ext/rugged/vendor/libgit2-dist/src/pkt.h +77 -0
  127. data/ext/rugged/vendor/libgit2-dist/src/posix.c +94 -0
  128. data/ext/rugged/vendor/libgit2-dist/src/posix.h +69 -0
  129. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.c +70 -0
  130. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.h +26 -0
  131. data/ext/rugged/vendor/libgit2-dist/src/pqueue.c +141 -0
  132. data/ext/rugged/vendor/libgit2-dist/src/pqueue.h +81 -0
  133. data/ext/rugged/vendor/libgit2-dist/src/protocol.c +50 -0
  134. data/ext/rugged/vendor/libgit2-dist/src/protocol.h +23 -0
  135. data/ext/rugged/vendor/libgit2-dist/src/reflog.c +318 -0
  136. data/ext/rugged/vendor/libgit2-dist/src/reflog.h +34 -0
  137. data/ext/rugged/vendor/libgit2-dist/src/refs.c +1693 -0
  138. data/ext/rugged/vendor/libgit2-dist/src/refs.h +58 -0
  139. data/ext/rugged/vendor/libgit2-dist/src/refspec.c +95 -0
  140. data/ext/rugged/vendor/libgit2-dist/src/refspec.h +23 -0
  141. data/ext/rugged/vendor/libgit2-dist/src/remote.c +339 -0
  142. data/ext/rugged/vendor/libgit2-dist/src/remote.h +25 -0
  143. data/ext/rugged/vendor/libgit2-dist/src/repository.c +849 -0
  144. data/ext/rugged/vendor/libgit2-dist/src/repository.h +60 -0
  145. data/ext/rugged/vendor/libgit2-dist/src/revwalk.c +569 -0
  146. data/ext/rugged/vendor/libgit2-dist/src/sha1.c +280 -0
  147. data/ext/rugged/vendor/libgit2-dist/src/sha1.h +21 -0
  148. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.c +177 -0
  149. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.h +18 -0
  150. data/ext/rugged/vendor/libgit2-dist/src/signature.c +335 -0
  151. data/ext/rugged/vendor/libgit2-dist/src/signature.h +18 -0
  152. data/ext/rugged/vendor/libgit2-dist/src/status.c +696 -0
  153. data/ext/rugged/vendor/libgit2-dist/src/tag.c +446 -0
  154. data/ext/rugged/vendor/libgit2-dist/src/tag.h +28 -0
  155. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.c +55 -0
  156. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.h +108 -0
  157. data/ext/rugged/vendor/libgit2-dist/src/transport.c +85 -0
  158. data/ext/rugged/vendor/libgit2-dist/src/transport.h +110 -0
  159. data/ext/rugged/vendor/libgit2-dist/src/transports/git.c +502 -0
  160. data/ext/rugged/vendor/libgit2-dist/src/transports/http.c +756 -0
  161. data/ext/rugged/vendor/libgit2-dist/src/transports/local.c +235 -0
  162. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.c +201 -0
  163. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.h +31 -0
  164. data/ext/rugged/vendor/libgit2-dist/src/tree.c +758 -0
  165. data/ext/rugged/vendor/libgit2-dist/src/tree.h +37 -0
  166. data/ext/rugged/vendor/libgit2-dist/src/tsort.c +365 -0
  167. data/ext/rugged/vendor/libgit2-dist/src/unix/map.c +70 -0
  168. data/ext/rugged/vendor/libgit2-dist/src/unix/posix.h +25 -0
  169. data/ext/rugged/vendor/libgit2-dist/src/util.c +381 -0
  170. data/ext/rugged/vendor/libgit2-dist/src/util.h +137 -0
  171. data/ext/rugged/vendor/libgit2-dist/src/vector.c +174 -0
  172. data/ext/rugged/vendor/libgit2-dist/src/vector.h +45 -0
  173. data/ext/rugged/vendor/libgit2-dist/src/win32/dir.c +115 -0
  174. data/ext/rugged/vendor/libgit2-dist/src/win32/fnmatch.c +180 -0
  175. data/ext/rugged/vendor/libgit2-dist/src/win32/fnmatch.h +27 -0
  176. data/ext/rugged/vendor/libgit2-dist/src/win32/map.c +131 -0
  177. data/ext/rugged/vendor/libgit2-dist/src/win32/mingw-compat.h +24 -0
  178. data/ext/rugged/vendor/libgit2-dist/src/win32/msvc-compat.h +38 -0
  179. data/ext/rugged/vendor/libgit2-dist/src/win32/posix.h +53 -0
  180. data/ext/rugged/vendor/libgit2-dist/src/win32/posix_w32.c +404 -0
  181. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.c +65 -0
  182. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.h +40 -0
  183. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.c +88 -0
  184. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.h +17 -0
  185. data/ext/rugged/vendor/libgit2-dist/tests-clay/buf/basic.c +29 -0
  186. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay.h +187 -0
  187. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_libgit2.h +28 -0
  188. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_main.c +1073 -0
  189. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/add.c +37 -0
  190. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/new.c +36 -0
  191. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/read.c +209 -0
  192. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/stress.c +39 -0
  193. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/write.c +77 -0
  194. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/dirent.c +222 -0
  195. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/filebuf.c +106 -0
  196. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/oid.c +18 -0
  197. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/path.c +139 -0
  198. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/rmdir.c +50 -0
  199. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/string.c +28 -0
  200. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/strtol.c +37 -0
  201. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/vector.c +66 -0
  202. data/ext/rugged/vendor/libgit2-dist/tests-clay/index/rename.c +60 -0
  203. data/ext/rugged/vendor/libgit2-dist/tests-clay/network/remotes.c +50 -0
  204. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/chars.c +52 -0
  205. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/compare.c +124 -0
  206. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/convert.c +75 -0
  207. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/data.h +323 -0
  208. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/fromstr.c +30 -0
  209. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/hash.c +162 -0
  210. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/short.c +94 -0
  211. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/size.c +13 -0
  212. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/raw/type2string.c +54 -0
  213. data/ext/rugged/vendor/libgit2-dist/tests-clay/object/tree/frompath.c +75 -0
  214. data/ext/rugged/vendor/libgit2-dist/tests-clay/odb/loose.c +84 -0
  215. data/ext/rugged/vendor/libgit2-dist/tests-clay/odb/loose_data.h +522 -0
  216. data/ext/rugged/vendor/libgit2-dist/tests-clay/odb/pack_data.h +151 -0
  217. data/ext/rugged/vendor/libgit2-dist/tests-clay/odb/packed.c +78 -0
  218. data/ext/rugged/vendor/libgit2-dist/tests-clay/odb/sorting.c +71 -0
  219. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/getters.c +68 -0
  220. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/init.c +104 -0
  221. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/open.c +54 -0
  222. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/single.c +38 -0
  223. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/status_data.h +48 -0
  224. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/worktree.c +124 -0
  225. data/ext/rugged/vendor/libgit2-dist/tests/t00-core.c +628 -0
  226. data/ext/rugged/vendor/libgit2-dist/tests/t01-data.h +322 -0
  227. data/ext/rugged/vendor/libgit2-dist/tests/t01-rawobj.c +638 -0
  228. data/ext/rugged/vendor/libgit2-dist/tests/t03-data.h +344 -0
  229. data/ext/rugged/vendor/libgit2-dist/tests/t03-objwrite.c +255 -0
  230. data/ext/rugged/vendor/libgit2-dist/tests/t04-commit.c +788 -0
  231. data/ext/rugged/vendor/libgit2-dist/tests/t05-revwalk.c +140 -0
  232. data/ext/rugged/vendor/libgit2-dist/tests/t06-index.c +219 -0
  233. data/ext/rugged/vendor/libgit2-dist/tests/t07-hashtable.c +192 -0
  234. data/ext/rugged/vendor/libgit2-dist/tests/t08-tag.c +357 -0
  235. data/ext/rugged/vendor/libgit2-dist/tests/t09-tree.c +221 -0
  236. data/ext/rugged/vendor/libgit2-dist/tests/t10-refs.c +1294 -0
  237. data/ext/rugged/vendor/libgit2-dist/tests/t12-repo.c +174 -0
  238. data/ext/rugged/vendor/libgit2-dist/tests/t13-threads.c +41 -0
  239. data/ext/rugged/vendor/libgit2-dist/tests/t17-bufs.c +61 -0
  240. data/ext/rugged/vendor/libgit2-dist/tests/t18-status.c +448 -0
  241. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.c +310 -0
  242. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.h +83 -0
  243. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.c +198 -0
  244. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.h +54 -0
  245. data/ext/rugged/vendor/libgit2-dist/tests/test_main.c +89 -0
  246. data/lib/rugged.rb +4 -3
  247. data/lib/rugged/index.rb +0 -8
  248. data/lib/rugged/objects.rb +45 -0
  249. data/lib/rugged/repository.rb +29 -0
  250. data/lib/rugged/tree.rb +16 -6
  251. data/lib/rugged/version.rb +1 -1
  252. data/lib/rugged/walker.rb +5 -0
  253. data/test/blob_test.rb +18 -14
  254. data/test/commit_test.rb +28 -26
  255. data/test/coverage/HEAD.json +1 -0
  256. data/test/coverage/cover.rb +106 -0
  257. data/test/fixtures/testrepo.git/refs/heads/new_name +1 -0
  258. data/test/index_test.rb +101 -78
  259. data/test/lib_test.rb +4 -4
  260. data/test/object_test.rb +3 -3
  261. data/test/reference_test.rb +75 -0
  262. data/test/remote_test.rb +19 -0
  263. data/test/repo_pack_test.rb +4 -4
  264. data/test/repo_test.rb +44 -15
  265. data/test/tag_test.rb +7 -17
  266. data/test/test_helper.rb +24 -5
  267. data/test/tree_test.rb +30 -12
  268. data/test/walker_test.rb +40 -31
  269. metadata +273 -50
  270. data/lib/rugged/person.rb +0 -20
  271. data/lib/rugged/tree_entry.rb +0 -9
  272. data/test/fixtures/testrepo.git/objects/1d/83f106355e4309a293e42ad2a2c4b8bdbe77ae +0 -0
  273. data/test/fixtures/testrepo.git/objects/2f/3321418db5b2a841375b8b70880a8ab5a4148f +0 -0
  274. data/test/fixtures/testrepo.git/objects/36/9b00a7700cca3a506d79e301d6ad8bf735d9ee +0 -3
  275. data/test/fixtures/testrepo.git/objects/3d/b1b5ceace59ff65279757003763046fd4cbbe6 +0 -0
  276. data/test/fixtures/testrepo.git/objects/4c/d1604907792e2c43e03dcec1216f99d63e68c4 +0 -3
  277. data/test/fixtures/testrepo.git/objects/e0/f46d77041c149296549b01ed4a18b02c4b7400 +0 -0
@@ -0,0 +1,54 @@
1
+ #include "clay_libgit2.h"
2
+ #include "posix.h"
3
+
4
+ void test_repo_open__bare_empty_repo(void)
5
+ {
6
+ git_repository *repo;
7
+
8
+ cl_git_pass(git_repository_open(&repo, cl_fixture("empty_bare.git")));
9
+ cl_assert(git_repository_path(repo) != NULL);
10
+ cl_assert(git_repository_workdir(repo) == NULL);
11
+
12
+ git_repository_free(repo);
13
+ }
14
+
15
+ void test_repo_open__standard_empty_repo(void)
16
+ {
17
+ git_repository *repo;
18
+
19
+ cl_git_pass(git_repository_open(&repo, cl_fixture("empty_standard_repo/.gitted")));
20
+ cl_assert(git_repository_path(repo) != NULL);
21
+ cl_assert(git_repository_workdir(repo) != NULL);
22
+
23
+ git_repository_free(repo);
24
+ }
25
+
26
+ /* TODO TODO */
27
+ #if 0
28
+ BEGIN_TEST(open2, "Open a bare repository with a relative path escaping out of the current working directory")
29
+ char new_current_workdir[GIT_PATH_MAX];
30
+ char current_workdir[GIT_PATH_MAX];
31
+ char path_repository[GIT_PATH_MAX];
32
+
33
+ const mode_t mode = 0777;
34
+ git_repository* repo;
35
+
36
+ /* Setup the repository to open */
37
+ must_pass(p_getcwd(current_workdir, sizeof(current_workdir)));
38
+ strcpy(path_repository, current_workdir);
39
+ git_path_join_n(path_repository, 3, path_repository, TEMP_REPO_FOLDER, "a/d/e.git");
40
+ must_pass(copydir_recurs(REPOSITORY_FOLDER, path_repository));
41
+
42
+ /* Change the current working directory */
43
+ git_path_join(new_current_workdir, TEMP_REPO_FOLDER, "a/b/c/");
44
+ must_pass(git_futils_mkdir_r(new_current_workdir, mode));
45
+ must_pass(chdir(new_current_workdir));
46
+
47
+ must_pass(git_repository_open(&repo, "../../d/e.git"));
48
+
49
+ git_repository_free(repo);
50
+
51
+ must_pass(chdir(current_workdir));
52
+ must_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, 1));
53
+ END_TEST
54
+ #endif
@@ -0,0 +1,38 @@
1
+ #include "clay_libgit2.h"
2
+ #include "posix.h"
3
+
4
+ static void
5
+ cleanup__remove_file(void *_file)
6
+ {
7
+ cl_must_pass(p_unlink((char *)_file));
8
+ }
9
+
10
+ static void
11
+ file_create(const char *filename, const char *content)
12
+ {
13
+ int fd = p_creat(filename, 0666);
14
+ cl_assert(fd >= 0);
15
+ cl_must_pass(p_write(fd, content, strlen(content)));
16
+ cl_must_pass(p_close(fd));
17
+ }
18
+
19
+ /* test retrieving OID from a file apart from the ODB */
20
+ void test_status_single__hash_single_file(void)
21
+ {
22
+ static const char file_name[] = "new_file";
23
+ static const char file_contents[] = "new_file\n";
24
+ static const char file_hash[] = "d4fa8600b4f37d7516bef4816ae2c64dbf029e3a";
25
+
26
+ git_oid expected_id, actual_id;
27
+
28
+ /* initialization */
29
+ git_oid_fromstr(&expected_id, file_hash);
30
+ file_create(file_name, file_contents);
31
+ cl_set_cleanup(&cleanup__remove_file, (void *)file_name);
32
+
33
+ cl_git_pass(git_odb_hashfile(&actual_id, file_name, GIT_OBJ_BLOB));
34
+ cl_assert(git_oid_cmp(&expected_id, &actual_id) == 0);
35
+ }
36
+
37
+
38
+
@@ -0,0 +1,48 @@
1
+
2
+ struct status_entry_counts {
3
+ int wrong_status_flags_count;
4
+ int wrong_sorted_path;
5
+ int entry_count;
6
+ const unsigned int* expected_statuses;
7
+ const char** expected_paths;
8
+ int expected_entry_count;
9
+ };
10
+
11
+ static const char *entry_paths0[] = {
12
+ "file_deleted",
13
+ "modified_file",
14
+ "new_file",
15
+ "staged_changes",
16
+ "staged_changes_file_deleted",
17
+ "staged_changes_modified_file",
18
+ "staged_delete_file_deleted",
19
+ "staged_delete_modified_file",
20
+ "staged_new_file",
21
+ "staged_new_file_deleted_file",
22
+ "staged_new_file_modified_file",
23
+
24
+ "subdir/deleted_file",
25
+ "subdir/modified_file",
26
+ "subdir/new_file",
27
+ };
28
+
29
+ static const unsigned int entry_statuses0[] = {
30
+ GIT_STATUS_WT_DELETED,
31
+ GIT_STATUS_WT_MODIFIED,
32
+ GIT_STATUS_WT_NEW,
33
+ GIT_STATUS_INDEX_MODIFIED,
34
+ GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_DELETED,
35
+ GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_MODIFIED,
36
+ GIT_STATUS_INDEX_DELETED,
37
+ GIT_STATUS_INDEX_DELETED | GIT_STATUS_WT_NEW,
38
+ GIT_STATUS_INDEX_NEW,
39
+ GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_DELETED,
40
+ GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_MODIFIED,
41
+
42
+ GIT_STATUS_WT_DELETED,
43
+ GIT_STATUS_WT_MODIFIED,
44
+ GIT_STATUS_WT_NEW,
45
+ };
46
+
47
+ static const size_t entry_count0 = 14;
48
+
@@ -0,0 +1,124 @@
1
+ #include "clay_libgit2.h"
2
+ #include "fileops.h"
3
+ #include "status_data.h"
4
+
5
+
6
+ /**
7
+ * Test fixtures
8
+ */
9
+ static git_repository *_repository = NULL;
10
+
11
+
12
+ /**
13
+ * Auxiliary methods
14
+ */
15
+ static int
16
+ cb_status__normal( const char *path, unsigned int status_flags, void *payload)
17
+ {
18
+ struct status_entry_counts *counts = payload;
19
+
20
+ if (counts->entry_count >= counts->expected_entry_count) {
21
+ counts->wrong_status_flags_count++;
22
+ goto exit;
23
+ }
24
+
25
+ if (strcmp(path, counts->expected_paths[counts->entry_count])) {
26
+ counts->wrong_sorted_path++;
27
+ goto exit;
28
+ }
29
+
30
+ if (status_flags != counts->expected_statuses[counts->entry_count])
31
+ counts->wrong_status_flags_count++;
32
+
33
+ exit:
34
+ counts->entry_count++;
35
+ return GIT_SUCCESS;
36
+ }
37
+
38
+ static int
39
+ cb_status__count(const char *GIT_UNUSED(p), unsigned int GIT_UNUSED(s), void *payload)
40
+ {
41
+ volatile int *count = (int *)payload;
42
+
43
+ GIT_UNUSED_ARG(p);
44
+ GIT_UNUSED_ARG(s);
45
+
46
+ *count++;
47
+
48
+ return GIT_SUCCESS;
49
+ }
50
+
51
+
52
+
53
+ /**
54
+ * Initializer
55
+ *
56
+ * This method is called once before starting each
57
+ * test, and will load the required fixtures
58
+ */
59
+ void test_status_worktree__initialize(void)
60
+ {
61
+ /*
62
+ * Sandbox the `status/` repository from our Fixtures.
63
+ * This will copy the whole folder to our sandbox,
64
+ * so now it can be accessed with `./status`
65
+ */
66
+ cl_fixture_sandbox("status");
67
+
68
+ /*
69
+ * Rename `status/.gitted` to `status/.git`
70
+ * We do this because we cannot store a folder named `.git`
71
+ * inside the fixtures folder in our libgit2 repo.
72
+ */
73
+ cl_git_pass(
74
+ p_rename("status/.gitted", "status/.git")
75
+ );
76
+
77
+ /*
78
+ * Open the sandboxed "status" repository
79
+ */
80
+ cl_git_pass(git_repository_open(&_repository, "status/.git"));
81
+ }
82
+
83
+ /**
84
+ * Cleanup
85
+ *
86
+ * This will be called once after each test finishes, even
87
+ * if the test failed
88
+ */
89
+ void test_status_worktree__cleanup(void)
90
+ {
91
+ git_repository_free(_repository);
92
+ _repository = NULL;
93
+
94
+ cl_fixture_cleanup("status");
95
+ }
96
+
97
+ /**
98
+ * Tests - Status determination on a working tree
99
+ */
100
+ void test_status_worktree__whole_repository(void)
101
+ {
102
+ struct status_entry_counts counts;
103
+
104
+ memset(&counts, 0x0, sizeof(struct status_entry_counts));
105
+ counts.expected_entry_count = entry_count0;
106
+ counts.expected_paths = entry_paths0;
107
+ counts.expected_statuses = entry_statuses0;
108
+
109
+ cl_git_pass(
110
+ git_status_foreach(_repository, cb_status__normal, &counts)
111
+ );
112
+
113
+ cl_assert(counts.entry_count == counts.expected_entry_count);
114
+ cl_assert(counts.wrong_status_flags_count == 0);
115
+ cl_assert(counts.wrong_sorted_path == 0);
116
+ }
117
+
118
+ void test_status_worktree__empty_repository(void)
119
+ {
120
+ int count = 0;
121
+
122
+ git_status_foreach(_repository, cb_status__count, &count);
123
+ cl_assert(count == 0);
124
+ }
@@ -0,0 +1,628 @@
1
+ /*
2
+ * This file is free software; you can redistribute it and/or modify
3
+ * it under the terms of the GNU General Public License, version 2,
4
+ * as published by the Free Software Foundation.
5
+ *
6
+ * In addition to the permissions in the GNU General Public License,
7
+ * the authors give you unlimited permission to link the compiled
8
+ * version of this file into combinations with other programs,
9
+ * and to distribute those combinations without any restriction
10
+ * coming from the use of this file. (The General Public License
11
+ * restrictions do apply in other respects; for example, they cover
12
+ * modification of the file, and distribution when not linked into
13
+ * a combined executable.)
14
+ *
15
+ * This file is distributed in the hope that it will be useful, but
16
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
+ * General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program; see the file COPYING. If not, write to
22
+ * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
23
+ * Boston, MA 02110-1301, USA.
24
+ */
25
+ #include "test_lib.h"
26
+
27
+ #include "vector.h"
28
+ #include "fileops.h"
29
+ #include "filebuf.h"
30
+
31
+ BEGIN_TEST(string0, "compare prefixes")
32
+ must_be_true(git__prefixcmp("", "") == 0);
33
+ must_be_true(git__prefixcmp("a", "") == 0);
34
+ must_be_true(git__prefixcmp("", "a") < 0);
35
+ must_be_true(git__prefixcmp("a", "b") < 0);
36
+ must_be_true(git__prefixcmp("b", "a") > 0);
37
+ must_be_true(git__prefixcmp("ab", "a") == 0);
38
+ must_be_true(git__prefixcmp("ab", "ac") < 0);
39
+ must_be_true(git__prefixcmp("ab", "aa") > 0);
40
+ END_TEST
41
+
42
+ BEGIN_TEST(string1, "compare suffixes")
43
+ must_be_true(git__suffixcmp("", "") == 0);
44
+ must_be_true(git__suffixcmp("a", "") == 0);
45
+ must_be_true(git__suffixcmp("", "a") < 0);
46
+ must_be_true(git__suffixcmp("a", "b") < 0);
47
+ must_be_true(git__suffixcmp("b", "a") > 0);
48
+ must_be_true(git__suffixcmp("ba", "a") == 0);
49
+ must_be_true(git__suffixcmp("zaa", "ac") < 0);
50
+ must_be_true(git__suffixcmp("zaz", "ac") > 0);
51
+ END_TEST
52
+
53
+
54
+ BEGIN_TEST(vector0, "initial size of 1 would cause writing past array bounds")
55
+ git_vector x;
56
+ int i;
57
+ git_vector_init(&x, 1, NULL);
58
+ for (i = 0; i < 10; ++i) {
59
+ git_vector_insert(&x, (void*) 0xabc);
60
+ }
61
+ git_vector_free(&x);
62
+ END_TEST
63
+
64
+ BEGIN_TEST(vector1, "don't read past array bounds on remove()")
65
+ git_vector x;
66
+ // make initial capacity exact for our insertions.
67
+ git_vector_init(&x, 3, NULL);
68
+ git_vector_insert(&x, (void*) 0xabc);
69
+ git_vector_insert(&x, (void*) 0xdef);
70
+ git_vector_insert(&x, (void*) 0x123);
71
+
72
+ git_vector_remove(&x, 0); // used to read past array bounds.
73
+ git_vector_free(&x);
74
+ END_TEST
75
+
76
+ static int test_cmp(const void *a, const void *b)
77
+ {
78
+ return *(const int *)a - *(const int *)b;
79
+ }
80
+
81
+ BEGIN_TEST(vector2, "remove duplicates")
82
+ git_vector x;
83
+ int *ptrs[2];
84
+
85
+ ptrs[0] = git__malloc(sizeof(int));
86
+ ptrs[1] = git__malloc(sizeof(int));
87
+
88
+ *ptrs[0] = 2;
89
+ *ptrs[1] = 1;
90
+
91
+ must_pass(git_vector_init(&x, 5, test_cmp));
92
+ must_pass(git_vector_insert(&x, ptrs[0]));
93
+ must_pass(git_vector_insert(&x, ptrs[1]));
94
+ must_pass(git_vector_insert(&x, ptrs[1]));
95
+ must_pass(git_vector_insert(&x, ptrs[0]));
96
+ must_pass(git_vector_insert(&x, ptrs[1]));
97
+ must_be_true(x.length == 5);
98
+ git_vector_uniq(&x);
99
+ must_be_true(x.length == 2);
100
+ git_vector_free(&x);
101
+
102
+ git__free(ptrs[0]);
103
+ git__free(ptrs[1]);
104
+ END_TEST
105
+
106
+
107
+ BEGIN_TEST(path0, "get the dirname of a path")
108
+ char dir[64], *dir2;
109
+
110
+ #define DIRNAME_TEST(A, B) { \
111
+ must_be_true(git_path_dirname_r(dir, sizeof(dir), A) >= 0); \
112
+ must_be_true(strcmp(dir, B) == 0); \
113
+ must_be_true((dir2 = git_path_dirname(A)) != NULL); \
114
+ must_be_true(strcmp(dir2, B) == 0); \
115
+ git__free(dir2); \
116
+ }
117
+
118
+ DIRNAME_TEST(NULL, ".");
119
+ DIRNAME_TEST("", ".");
120
+ DIRNAME_TEST("a", ".");
121
+ DIRNAME_TEST("/", "/");
122
+ DIRNAME_TEST("/usr", "/");
123
+ DIRNAME_TEST("/usr/", "/");
124
+ DIRNAME_TEST("/usr/lib", "/usr");
125
+ DIRNAME_TEST("/usr/lib/", "/usr");
126
+ DIRNAME_TEST("/usr/lib//", "/usr");
127
+ DIRNAME_TEST("usr/lib", "usr");
128
+ DIRNAME_TEST("usr/lib/", "usr");
129
+ DIRNAME_TEST("usr/lib//", "usr");
130
+ DIRNAME_TEST(".git/", ".");
131
+
132
+ #undef DIRNAME_TEST
133
+
134
+ END_TEST
135
+
136
+ BEGIN_TEST(path1, "get the base name of a path")
137
+ char base[64], *base2;
138
+
139
+ #define BASENAME_TEST(A, B) { \
140
+ must_be_true(git_path_basename_r(base, sizeof(base), A) >= 0); \
141
+ must_be_true(strcmp(base, B) == 0); \
142
+ must_be_true((base2 = git_path_basename(A)) != NULL); \
143
+ must_be_true(strcmp(base2, B) == 0); \
144
+ git__free(base2); \
145
+ }
146
+
147
+ BASENAME_TEST(NULL, ".");
148
+ BASENAME_TEST("", ".");
149
+ BASENAME_TEST("a", "a");
150
+ BASENAME_TEST("/", "/");
151
+ BASENAME_TEST("/usr", "usr");
152
+ BASENAME_TEST("/usr/", "usr");
153
+ BASENAME_TEST("/usr/lib", "lib");
154
+ BASENAME_TEST("/usr/lib//", "lib");
155
+ BASENAME_TEST("usr/lib", "lib");
156
+
157
+ #undef BASENAME_TEST
158
+
159
+ END_TEST
160
+
161
+ BEGIN_TEST(path2, "get the latest component in a path")
162
+ const char *dir;
163
+
164
+ #define TOPDIR_TEST(A, B) { \
165
+ must_be_true((dir = git_path_topdir(A)) != NULL); \
166
+ must_be_true(strcmp(dir, B) == 0); \
167
+ }
168
+
169
+ TOPDIR_TEST(".git/", ".git/");
170
+ TOPDIR_TEST("/.git/", ".git/");
171
+ TOPDIR_TEST("usr/local/.git/", ".git/");
172
+ TOPDIR_TEST("./.git/", ".git/");
173
+ TOPDIR_TEST("/usr/.git/", ".git/");
174
+ TOPDIR_TEST("/", "/");
175
+ TOPDIR_TEST("a/", "a/");
176
+
177
+ must_be_true(git_path_topdir("/usr/.git") == NULL);
178
+ must_be_true(git_path_topdir(".") == NULL);
179
+ must_be_true(git_path_topdir("") == NULL);
180
+ must_be_true(git_path_topdir("a") == NULL);
181
+
182
+ #undef TOPDIR_TEST
183
+ END_TEST
184
+
185
+ static int ensure_joinpath(const char *path_a, const char *path_b, const char *expected_path)
186
+ {
187
+ char joined_path[GIT_PATH_MAX];
188
+ git_path_join(joined_path, path_a, path_b);
189
+ return strcmp(joined_path, expected_path) == 0 ? GIT_SUCCESS : GIT_ERROR;
190
+ }
191
+
192
+ BEGIN_TEST(path5, "properly join path components")
193
+ must_pass(ensure_joinpath("", "", ""));
194
+ must_pass(ensure_joinpath("", "a", "a"));
195
+ must_pass(ensure_joinpath("", "/a", "/a"));
196
+ must_pass(ensure_joinpath("a", "", "a/"));
197
+ must_pass(ensure_joinpath("a", "/", "a/"));
198
+ must_pass(ensure_joinpath("a", "b", "a/b"));
199
+ must_pass(ensure_joinpath("/", "a", "/a"));
200
+ must_pass(ensure_joinpath("/", "", "/"));
201
+ must_pass(ensure_joinpath("/a", "/b", "/a/b"));
202
+ must_pass(ensure_joinpath("/a", "/b/", "/a/b/"));
203
+ must_pass(ensure_joinpath("/a/", "b/", "/a/b/"));
204
+ must_pass(ensure_joinpath("/a/", "/b/", "/a/b/"));
205
+ END_TEST
206
+
207
+ static int ensure_joinpath_n(const char *path_a, const char *path_b, const char *path_c, const char *path_d, const char *expected_path)
208
+ {
209
+ char joined_path[GIT_PATH_MAX];
210
+ git_path_join_n(joined_path, 4, path_a, path_b, path_c, path_d);
211
+ return strcmp(joined_path, expected_path) == 0 ? GIT_SUCCESS : GIT_ERROR;
212
+ }
213
+
214
+ BEGIN_TEST(path6, "properly join path components for more than one path")
215
+ must_pass(ensure_joinpath_n("", "", "", "", ""));
216
+ must_pass(ensure_joinpath_n("", "a", "", "", "a/"));
217
+ must_pass(ensure_joinpath_n("a", "", "", "", "a/"));
218
+ must_pass(ensure_joinpath_n("", "", "", "a", "a"));
219
+ must_pass(ensure_joinpath_n("a", "b", "", "/c/d/", "a/b/c/d/"));
220
+ must_pass(ensure_joinpath_n("a", "b", "", "/c/d", "a/b/c/d"));
221
+ END_TEST
222
+
223
+ typedef struct name_data {
224
+ int count; /* return count */
225
+ char *name; /* filename */
226
+ } name_data;
227
+
228
+ typedef struct walk_data {
229
+ char *sub; /* sub-directory name */
230
+ name_data *names; /* name state data */
231
+ } walk_data;
232
+
233
+
234
+ static char path_buffer[GIT_PATH_MAX];
235
+ static char *top_dir = "dir-walk";
236
+ static walk_data *state_loc;
237
+
238
+ static int error(const char *fmt, ...)
239
+ {
240
+ va_list ap;
241
+
242
+ va_start(ap, fmt);
243
+ vfprintf(stderr, fmt, ap);
244
+ va_end(ap);
245
+ fprintf(stderr, "\n");
246
+ return -1;
247
+ }
248
+
249
+ static int setup(walk_data *d)
250
+ {
251
+ name_data *n;
252
+
253
+ if (p_mkdir(top_dir, 0777) < 0)
254
+ return error("can't mkdir(\"%s\")", top_dir);
255
+
256
+ if (p_chdir(top_dir) < 0)
257
+ return error("can't chdir(\"%s\")", top_dir);
258
+
259
+ if (strcmp(d->sub, ".") != 0)
260
+ if (p_mkdir(d->sub, 0777) < 0)
261
+ return error("can't mkdir(\"%s\")", d->sub);
262
+
263
+ strcpy(path_buffer, d->sub);
264
+ state_loc = d;
265
+
266
+ for (n = d->names; n->name; n++) {
267
+ git_file fd = p_creat(n->name, 0666);
268
+ if (fd < 0)
269
+ return GIT_ERROR;
270
+ p_close(fd);
271
+ n->count = 0;
272
+ }
273
+
274
+ return 0;
275
+ }
276
+
277
+ static int knockdown(walk_data *d)
278
+ {
279
+ name_data *n;
280
+
281
+ for (n = d->names; n->name; n++) {
282
+ if (p_unlink(n->name) < 0)
283
+ return error("can't unlink(\"%s\")", n->name);
284
+ }
285
+
286
+ if (strcmp(d->sub, ".") != 0)
287
+ if (p_rmdir(d->sub) < 0)
288
+ return error("can't rmdir(\"%s\")", d->sub);
289
+
290
+ if (p_chdir("..") < 0)
291
+ return error("can't chdir(\"..\")");
292
+
293
+ if (p_rmdir(top_dir) < 0)
294
+ return error("can't rmdir(\"%s\")", top_dir);
295
+
296
+ return 0;
297
+ }
298
+
299
+ static int check_counts(walk_data *d)
300
+ {
301
+ int ret = 0;
302
+ name_data *n;
303
+
304
+ for (n = d->names; n->name; n++) {
305
+ if (n->count != 1)
306
+ ret = error("count (%d, %s)", n->count, n->name);
307
+ }
308
+ return ret;
309
+ }
310
+
311
+ static int one_entry(void *state, char *path)
312
+ {
313
+ walk_data *d = (walk_data *) state;
314
+ name_data *n;
315
+
316
+ if (state != state_loc)
317
+ return GIT_ERROR;
318
+
319
+ if (path != path_buffer)
320
+ return GIT_ERROR;
321
+
322
+ for (n = d->names; n->name; n++) {
323
+ if (!strcmp(n->name, path)) {
324
+ n->count++;
325
+ return 0;
326
+ }
327
+ }
328
+
329
+ return GIT_ERROR;
330
+ }
331
+
332
+
333
+ static name_data dot_names[] = {
334
+ { 0, "./a" },
335
+ { 0, "./asdf" },
336
+ { 0, "./pack-foo.pack" },
337
+ { 0, NULL }
338
+ };
339
+ static walk_data dot = {
340
+ ".",
341
+ dot_names
342
+ };
343
+
344
+ BEGIN_TEST(dirent0, "make sure that the '.' folder is not traversed")
345
+
346
+ must_pass(setup(&dot));
347
+
348
+ must_pass(git_futils_direach(path_buffer,
349
+ sizeof(path_buffer),
350
+ one_entry,
351
+ &dot));
352
+
353
+ must_pass(check_counts(&dot));
354
+
355
+ must_pass(knockdown(&dot));
356
+ END_TEST
357
+
358
+ static name_data sub_names[] = {
359
+ { 0, "sub/a" },
360
+ { 0, "sub/asdf" },
361
+ { 0, "sub/pack-foo.pack" },
362
+ { 0, NULL }
363
+ };
364
+ static walk_data sub = {
365
+ "sub",
366
+ sub_names
367
+ };
368
+
369
+ BEGIN_TEST(dirent1, "traverse a subfolder")
370
+
371
+ must_pass(setup(&sub));
372
+
373
+ must_pass(git_futils_direach(path_buffer,
374
+ sizeof(path_buffer),
375
+ one_entry,
376
+ &sub));
377
+
378
+ must_pass(check_counts(&sub));
379
+
380
+ must_pass(knockdown(&sub));
381
+ END_TEST
382
+
383
+ static walk_data sub_slash = {
384
+ "sub/",
385
+ sub_names
386
+ };
387
+
388
+ BEGIN_TEST(dirent2, "traverse a slash-terminated subfolder")
389
+
390
+ must_pass(setup(&sub_slash));
391
+
392
+ must_pass(git_futils_direach(path_buffer,
393
+ sizeof(path_buffer),
394
+ one_entry,
395
+ &sub_slash));
396
+
397
+ must_pass(check_counts(&sub_slash));
398
+
399
+ must_pass(knockdown(&sub_slash));
400
+ END_TEST
401
+
402
+ static name_data empty_names[] = {
403
+ { 0, NULL }
404
+ };
405
+ static walk_data empty = {
406
+ "empty",
407
+ empty_names
408
+ };
409
+
410
+ static int dont_call_me(void *GIT_UNUSED(state), char *GIT_UNUSED(path))
411
+ {
412
+ GIT_UNUSED_ARG(state)
413
+ GIT_UNUSED_ARG(path)
414
+ return GIT_ERROR;
415
+ }
416
+
417
+ BEGIN_TEST(dirent3, "make sure that empty folders are not traversed")
418
+
419
+ must_pass(setup(&empty));
420
+
421
+ must_pass(git_futils_direach(path_buffer,
422
+ sizeof(path_buffer),
423
+ one_entry,
424
+ &empty));
425
+
426
+ must_pass(check_counts(&empty));
427
+
428
+ /* make sure callback not called */
429
+ must_pass(git_futils_direach(path_buffer,
430
+ sizeof(path_buffer),
431
+ dont_call_me,
432
+ &empty));
433
+
434
+ must_pass(knockdown(&empty));
435
+ END_TEST
436
+
437
+ static name_data odd_names[] = {
438
+ { 0, "odd/.a" },
439
+ { 0, "odd/..c" },
440
+ /* the following don't work on cygwin/win32 */
441
+ /* { 0, "odd/.b." }, */
442
+ /* { 0, "odd/..d.." }, */
443
+ { 0, NULL }
444
+ };
445
+ static walk_data odd = {
446
+ "odd",
447
+ odd_names
448
+ };
449
+
450
+ BEGIN_TEST(dirent4, "make sure that strange looking filenames ('..c') are traversed")
451
+
452
+ must_pass(setup(&odd));
453
+
454
+ must_pass(git_futils_direach(path_buffer,
455
+ sizeof(path_buffer),
456
+ one_entry,
457
+ &odd));
458
+
459
+ must_pass(check_counts(&odd));
460
+
461
+ must_pass(knockdown(&odd));
462
+ END_TEST
463
+
464
+ BEGIN_TEST(filebuf0, "make sure git_filebuf_open doesn't delete an existing lock")
465
+ git_filebuf file = GIT_FILEBUF_INIT;
466
+ int fd;
467
+ char test[] = "test", testlock[] = "test.lock";
468
+
469
+ fd = p_creat(testlock, 0744);
470
+ must_pass(fd);
471
+ must_pass(p_close(fd));
472
+ must_fail(git_filebuf_open(&file, test, 0));
473
+ must_pass(git_futils_exists(testlock));
474
+ must_pass(p_unlink(testlock));
475
+ END_TEST
476
+
477
+ BEGIN_TEST(filebuf1, "make sure GIT_FILEBUF_APPEND works as expected")
478
+ git_filebuf file = GIT_FILEBUF_INIT;
479
+ int fd;
480
+ char test[] = "test";
481
+
482
+ fd = p_creat(test, 0666);
483
+ must_pass(fd);
484
+ must_pass(p_write(fd, "libgit2 rocks\n", 14));
485
+ must_pass(p_close(fd));
486
+
487
+ must_pass(git_filebuf_open(&file, test, GIT_FILEBUF_APPEND));
488
+ must_pass(git_filebuf_printf(&file, "%s\n", "libgit2 rocks"));
489
+ must_pass(git_filebuf_commit(&file, 0666));
490
+
491
+ must_pass(p_unlink(test));
492
+ END_TEST
493
+
494
+ BEGIN_TEST(filebuf2, "make sure git_filebuf_write writes large buffer correctly")
495
+ git_filebuf file = GIT_FILEBUF_INIT;
496
+ char test[] = "test";
497
+ unsigned char buf[4096 * 4]; /* 2 * WRITE_BUFFER_SIZE */
498
+
499
+ memset(buf, 0xfe, sizeof(buf));
500
+ must_pass(git_filebuf_open(&file, test, 0));
501
+ must_pass(git_filebuf_write(&file, buf, sizeof(buf)));
502
+ must_pass(git_filebuf_commit(&file, 0666));
503
+
504
+ must_pass(p_unlink(test));
505
+ END_TEST
506
+
507
+ static char *empty_tmp_dir = "test_gitfo_rmdir_recurs_test";
508
+
509
+ static int setup_empty_tmp_dir(void)
510
+ {
511
+ char path[GIT_PATH_MAX];
512
+
513
+ if (p_mkdir(empty_tmp_dir, 0777))
514
+ return -1;
515
+
516
+ git_path_join(path, empty_tmp_dir, "/one");
517
+ if (p_mkdir(path, 0777))
518
+ return -1;
519
+
520
+ git_path_join(path, empty_tmp_dir, "/one/two_one");
521
+ if (p_mkdir(path, 0777))
522
+ return -1;
523
+
524
+ git_path_join(path, empty_tmp_dir, "/one/two_two");
525
+ if (p_mkdir(path, 0777))
526
+ return -1;
527
+
528
+ git_path_join(path, empty_tmp_dir, "/one/two_two/three");
529
+ if (p_mkdir(path, 0777))
530
+ return -1;
531
+
532
+ git_path_join(path, empty_tmp_dir, "/two");
533
+ if (p_mkdir(path, 0777))
534
+ return -1;
535
+
536
+ return 0;
537
+ }
538
+
539
+ BEGIN_TEST(rmdir0, "make sure empty dir can be deleted recusively")
540
+ must_pass(setup_empty_tmp_dir());
541
+ must_pass(git_futils_rmdir_r(empty_tmp_dir, 0));
542
+ END_TEST
543
+
544
+ BEGIN_TEST(rmdir1, "make sure non-empty dir cannot be deleted recusively")
545
+ char file[GIT_PATH_MAX];
546
+ int fd;
547
+
548
+ must_pass(setup_empty_tmp_dir());
549
+ git_path_join(file, empty_tmp_dir, "/two/file.txt");
550
+ fd = p_creat(file, 0777);
551
+ must_pass(fd);
552
+ must_pass(p_close(fd));
553
+ must_fail(git_futils_rmdir_r(empty_tmp_dir, 0));
554
+ must_pass(p_unlink(file));
555
+ must_pass(git_futils_rmdir_r(empty_tmp_dir, 0));
556
+ END_TEST
557
+
558
+ BEGIN_TEST(strtol0, "parsing out 32 integers from a string")
559
+ int32_t i;
560
+
561
+ must_pass(git__strtol32(&i, "123", NULL, 10));
562
+ must_be_true(i == 123);
563
+
564
+ must_pass(git__strtol32(&i, " +123 ", NULL, 10));
565
+ must_be_true(i == 123);
566
+
567
+ must_pass(git__strtol32(&i, " +2147483647 ", NULL, 10));
568
+ must_be_true(i == 2147483647);
569
+
570
+ must_pass(git__strtol32(&i, " -2147483648 ", NULL, 10));
571
+ must_be_true(i == -2147483648LL);
572
+
573
+ must_fail(git__strtol32(&i, " 2147483657 ", NULL, 10));
574
+ must_fail(git__strtol32(&i, " -2147483657 ", NULL, 10));
575
+ END_TEST
576
+
577
+ BEGIN_TEST(strtol1, "parsing out 64 integers from a string")
578
+ int64_t i;
579
+
580
+ must_pass(git__strtol64(&i, "123", NULL, 10));
581
+ must_be_true(i == 123);
582
+
583
+ must_pass(git__strtol64(&i, " +123 ", NULL, 10));
584
+ must_be_true(i == 123);
585
+
586
+ must_pass(git__strtol64(&i, " +2147483647 ", NULL, 10));
587
+ must_be_true(i == 2147483647);
588
+
589
+ must_pass(git__strtol64(&i, " -2147483648 ", NULL, 10));
590
+ must_be_true(i == -2147483648LL);
591
+
592
+ must_pass(git__strtol64(&i, " 2147483657 ", NULL, 10));
593
+ must_be_true(i == 2147483657LL);
594
+
595
+ must_pass(git__strtol64(&i, " -2147483657 ", NULL, 10));
596
+ must_be_true(i == -2147483657LL);
597
+ END_TEST
598
+
599
+ BEGIN_SUITE(core)
600
+ ADD_TEST(string0);
601
+ ADD_TEST(string1);
602
+
603
+ ADD_TEST(vector0);
604
+ ADD_TEST(vector1);
605
+ ADD_TEST(vector2);
606
+
607
+ ADD_TEST(path0);
608
+ ADD_TEST(path1);
609
+ ADD_TEST(path2);
610
+ ADD_TEST(path5);
611
+ ADD_TEST(path6);
612
+
613
+ ADD_TEST(dirent0);
614
+ ADD_TEST(dirent1);
615
+ ADD_TEST(dirent2);
616
+ ADD_TEST(dirent3);
617
+ ADD_TEST(dirent4);
618
+
619
+ ADD_TEST(filebuf0);
620
+ ADD_TEST(filebuf1);
621
+ ADD_TEST(filebuf2);
622
+
623
+ ADD_TEST(rmdir0);
624
+ ADD_TEST(rmdir1);
625
+
626
+ ADD_TEST(strtol0);
627
+ ADD_TEST(strtol1);
628
+ END_SUITE