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,358 @@
1
+ /*
2
+ * Copyright (C) 2009-2011 the libgit2 contributors
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
+ #include "common.h"
8
+ #include "fileops.h"
9
+ #include <ctype.h>
10
+
11
+ int git_futils_mkpath2file(const char *file_path, const mode_t mode)
12
+ {
13
+ int error = GIT_SUCCESS;
14
+ char target_folder_path[GIT_PATH_MAX];
15
+
16
+ error = git_path_dirname_r(target_folder_path, sizeof(target_folder_path), file_path);
17
+ if (error < GIT_SUCCESS)
18
+ return git__throw(GIT_EINVALIDPATH, "Failed to recursively build `%s` tree structure. Unable to parse parent folder name", file_path);
19
+
20
+ /* Does the containing folder exist? */
21
+ if (git_futils_isdir(target_folder_path)) {
22
+ git_path_join(target_folder_path, target_folder_path, ""); /* Ensure there's a trailing slash */
23
+
24
+ /* Let's create the tree structure */
25
+ error = git_futils_mkdir_r(target_folder_path, mode);
26
+ if (error < GIT_SUCCESS)
27
+ return error; /* The callee already takes care of setting the correct error message. */
28
+ }
29
+
30
+ return GIT_SUCCESS;
31
+ }
32
+
33
+ int git_futils_mktmp(char *path_out, const char *filename)
34
+ {
35
+ int fd;
36
+
37
+ strcpy(path_out, filename);
38
+ strcat(path_out, "_git2_XXXXXX");
39
+
40
+ if ((fd = p_mkstemp(path_out)) < 0)
41
+ return git__throw(GIT_EOSERR, "Failed to create temporary file %s", path_out);
42
+
43
+ return fd;
44
+ }
45
+
46
+ int git_futils_creat_withpath(const char *path, const mode_t dirmode, const mode_t mode)
47
+ {
48
+ if (git_futils_mkpath2file(path, dirmode) < GIT_SUCCESS)
49
+ return git__throw(GIT_EOSERR, "Failed to create file %s", path);
50
+
51
+ return p_creat(path, mode);
52
+ }
53
+
54
+ int git_futils_creat_locked(const char *path, const mode_t mode)
55
+ {
56
+ int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_EXCL, mode);
57
+ return fd >= 0 ? fd : git__throw(GIT_EOSERR, "Failed to create locked file. Could not open %s", path);
58
+ }
59
+
60
+ int git_futils_creat_locked_withpath(const char *path, const mode_t dirmode, const mode_t mode)
61
+ {
62
+ if (git_futils_mkpath2file(path, dirmode) < GIT_SUCCESS)
63
+ return git__throw(GIT_EOSERR, "Failed to create locked file %s", path);
64
+
65
+ return git_futils_creat_locked(path, mode);
66
+ }
67
+
68
+ int git_futils_isdir(const char *path)
69
+ {
70
+ #ifdef GIT_WIN32
71
+ DWORD attr = GetFileAttributes(path);
72
+ if (attr == INVALID_FILE_ATTRIBUTES)
73
+ return GIT_ERROR;
74
+
75
+ return (attr & FILE_ATTRIBUTE_DIRECTORY) ? GIT_SUCCESS : GIT_ERROR;
76
+
77
+ #else
78
+ struct stat st;
79
+ if (p_stat(path, &st) < GIT_SUCCESS)
80
+ return GIT_ERROR;
81
+
82
+ return S_ISDIR(st.st_mode) ? GIT_SUCCESS : GIT_ERROR;
83
+ #endif
84
+ }
85
+
86
+ int git_futils_isfile(const char *path)
87
+ {
88
+ struct stat st;
89
+ int stat_error;
90
+
91
+ assert(path);
92
+ stat_error = p_stat(path, &st);
93
+
94
+ if (stat_error < GIT_SUCCESS)
95
+ return -1;
96
+
97
+ if (!S_ISREG(st.st_mode))
98
+ return -1;
99
+
100
+ return 0;
101
+ }
102
+
103
+ int git_futils_exists(const char *path)
104
+ {
105
+ assert(path);
106
+ return p_access(path, F_OK);
107
+ }
108
+
109
+ git_off_t git_futils_filesize(git_file fd)
110
+ {
111
+ struct stat sb;
112
+ if (p_fstat(fd, &sb))
113
+ return GIT_ERROR;
114
+
115
+ return sb.st_size;
116
+ }
117
+
118
+ int git_futils_readbuffer_updated(git_fbuffer *obj, const char *path, time_t *mtime, int *updated)
119
+ {
120
+ git_file fd;
121
+ size_t len;
122
+ struct stat st;
123
+ unsigned char *buff;
124
+
125
+ assert(obj && path && *path);
126
+
127
+ if (updated != NULL)
128
+ *updated = 0;
129
+
130
+ if (p_stat(path, &st) < 0)
131
+ return git__throw(GIT_ENOTFOUND, "Failed to stat file %s", path);
132
+
133
+ if (S_ISDIR(st.st_mode))
134
+ return git__throw(GIT_ERROR, "Can't read a dir into a buffer");
135
+
136
+ /*
137
+ * If we were given a time, we only want to read the file if it
138
+ * has been modified.
139
+ */
140
+ if (mtime != NULL && *mtime >= st.st_mtime)
141
+ return GIT_SUCCESS;
142
+
143
+ if (mtime != NULL)
144
+ *mtime = st.st_mtime;
145
+ if (!git__is_sizet(st.st_size+1))
146
+ return git__throw(GIT_ERROR, "Failed to read file `%s`. An error occured while calculating its size", path);
147
+
148
+ len = (size_t) st.st_size;
149
+
150
+ if ((fd = p_open(path, O_RDONLY)) < 0)
151
+ return git__throw(GIT_EOSERR, "Failed to open %s for reading", path);
152
+
153
+ if ((buff = git__malloc(len + 1)) == NULL) {
154
+ p_close(fd);
155
+ return GIT_ENOMEM;
156
+ }
157
+
158
+ if (p_read(fd, buff, len) < 0) {
159
+ p_close(fd);
160
+ git__free(buff);
161
+ return git__throw(GIT_ERROR, "Failed to read file `%s`", path);
162
+ }
163
+ buff[len] = '\0';
164
+
165
+ p_close(fd);
166
+
167
+ if (mtime != NULL)
168
+ *mtime = st.st_mtime;
169
+ if (updated != NULL)
170
+ *updated = 1;
171
+
172
+ obj->data = buff;
173
+ obj->len = len;
174
+
175
+ return GIT_SUCCESS;
176
+ }
177
+
178
+ int git_futils_readbuffer(git_fbuffer *obj, const char *path)
179
+ {
180
+ return git_futils_readbuffer_updated(obj, path, NULL, NULL);
181
+ }
182
+
183
+ void git_futils_freebuffer(git_fbuffer *obj)
184
+ {
185
+ assert(obj);
186
+ git__free(obj->data);
187
+ obj->data = NULL;
188
+ }
189
+
190
+
191
+ int git_futils_mv_withpath(const char *from, const char *to, const mode_t dirmode)
192
+ {
193
+ if (git_futils_mkpath2file(to, dirmode) < GIT_SUCCESS)
194
+ return GIT_EOSERR; /* The callee already takes care of setting the correct error message. */
195
+
196
+ return p_rename(from, to); /* The callee already takes care of setting the correct error message. */
197
+ }
198
+
199
+ int git_futils_mmap_ro(git_map *out, git_file fd, git_off_t begin, size_t len)
200
+ {
201
+ return p_mmap(out, len, GIT_PROT_READ, GIT_MAP_SHARED, fd, begin);
202
+ }
203
+
204
+ void git_futils_mmap_free(git_map *out)
205
+ {
206
+ p_munmap(out);
207
+ }
208
+
209
+ /* Taken from git.git */
210
+ GIT_INLINE(int) is_dot_or_dotdot(const char *name)
211
+ {
212
+ return (name[0] == '.' &&
213
+ (name[1] == '\0' ||
214
+ (name[1] == '.' && name[2] == '\0')));
215
+ }
216
+
217
+ int git_futils_direach(
218
+ char *path,
219
+ size_t path_sz,
220
+ int (*fn)(void *, char *),
221
+ void *arg)
222
+ {
223
+ size_t wd_len = strlen(path);
224
+ DIR *dir;
225
+ struct dirent *de;
226
+
227
+ if (!wd_len || path_sz < wd_len + 2)
228
+ return git__throw(GIT_EINVALIDARGS, "Failed to process `%s` tree structure. Path is either empty or buffer size is too short", path);
229
+
230
+ while (path[wd_len - 1] == '/')
231
+ wd_len--;
232
+ path[wd_len++] = '/';
233
+ path[wd_len] = '\0';
234
+
235
+ dir = opendir(path);
236
+ if (!dir)
237
+ return git__throw(GIT_EOSERR, "Failed to process `%s` tree structure. An error occured while opening the directory", path);
238
+
239
+ while ((de = readdir(dir)) != NULL) {
240
+ size_t de_len;
241
+ int result;
242
+
243
+ if (is_dot_or_dotdot(de->d_name))
244
+ continue;
245
+
246
+ de_len = strlen(de->d_name);
247
+ if (path_sz < wd_len + de_len + 1) {
248
+ closedir(dir);
249
+ return git__throw(GIT_ERROR, "Failed to process `%s` tree structure. Buffer size is too short", path);
250
+ }
251
+
252
+ strcpy(path + wd_len, de->d_name);
253
+ result = fn(arg, path);
254
+ if (result < GIT_SUCCESS) {
255
+ closedir(dir);
256
+ return result; /* The callee is reponsible for setting the correct error message */
257
+ }
258
+ if (result > 0) {
259
+ closedir(dir);
260
+ return result;
261
+ }
262
+ }
263
+
264
+ closedir(dir);
265
+ return GIT_SUCCESS;
266
+ }
267
+
268
+ int git_futils_mkdir_r(const char *path, const mode_t mode)
269
+ {
270
+ int error, root_path_offset;
271
+ char *pp, *sp;
272
+ char *path_copy = git__strdup(path);
273
+
274
+ if (path_copy == NULL)
275
+ return GIT_ENOMEM;
276
+
277
+ error = GIT_SUCCESS;
278
+ pp = path_copy;
279
+
280
+ root_path_offset = git_path_root(pp);
281
+ if (root_path_offset > 0)
282
+ pp += root_path_offset; /* On Windows, will skip the drive name (eg. C: or D:) */
283
+
284
+ while (error == GIT_SUCCESS && (sp = strchr(pp, '/')) != NULL) {
285
+ if (sp != pp && git_futils_isdir(path_copy) < GIT_SUCCESS) {
286
+ *sp = 0;
287
+ error = p_mkdir(path_copy, mode);
288
+
289
+ /* Do not choke while trying to recreate an existing directory */
290
+ if (errno == EEXIST)
291
+ error = GIT_SUCCESS;
292
+
293
+ *sp = '/';
294
+ }
295
+
296
+ pp = sp + 1;
297
+ }
298
+
299
+ if (*pp != '\0' && error == GIT_SUCCESS) {
300
+ error = p_mkdir(path, mode);
301
+ if (errno == EEXIST)
302
+ error = GIT_SUCCESS;
303
+ }
304
+
305
+ git__free(path_copy);
306
+
307
+ if (error < GIT_SUCCESS)
308
+ return git__throw(error, "Failed to recursively create `%s` tree structure", path);
309
+
310
+ return GIT_SUCCESS;
311
+ }
312
+
313
+ static int _rmdir_recurs_foreach(void *opaque, char *path)
314
+ {
315
+ int error = GIT_SUCCESS;
316
+ int force = *(int *)opaque;
317
+
318
+ if (git_futils_isdir(path) == GIT_SUCCESS) {
319
+ size_t root_size = strlen(path);
320
+
321
+ if ((error = git_futils_direach(path, GIT_PATH_MAX, _rmdir_recurs_foreach, opaque)) < GIT_SUCCESS)
322
+ return git__rethrow(error, "Failed to remove directory `%s`", path);
323
+
324
+ path[root_size] = '\0';
325
+ return p_rmdir(path);
326
+
327
+ } else if (force) {
328
+ return p_unlink(path);
329
+ }
330
+
331
+ return git__rethrow(error, "Failed to remove directory. `%s` is not empty", path);
332
+ }
333
+
334
+ int git_futils_rmdir_r(const char *path, int force)
335
+ {
336
+ char p[GIT_PATH_MAX];
337
+ strncpy(p, path, GIT_PATH_MAX);
338
+ return _rmdir_recurs_foreach(&force, p);
339
+ }
340
+
341
+ int git_futils_cmp_path(const char *name1, int len1, int isdir1,
342
+ const char *name2, int len2, int isdir2)
343
+ {
344
+ int len = len1 < len2 ? len1 : len2;
345
+ int cmp;
346
+
347
+ cmp = memcmp(name1, name2, len);
348
+ if (cmp)
349
+ return cmp;
350
+ if (len1 < len2)
351
+ return ((!isdir1 && !isdir2) ? -1 :
352
+ (isdir1 ? '/' - name2[len1] : name2[len1] - '/'));
353
+ if (len1 > len2)
354
+ return ((!isdir1 && !isdir2) ? 1 :
355
+ (isdir2 ? name1[len2] - '/' : '/' - name1[len2]));
356
+ return 0;
357
+ }
358
+
@@ -0,0 +1,151 @@
1
+ /*
2
+ * Copyright (C) 2009-2011 the libgit2 contributors
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_fileops_h__
8
+ #define INCLUDE_fileops_h__
9
+
10
+ #include "common.h"
11
+ #include "map.h"
12
+ #include "dir.h"
13
+ #include "posix.h"
14
+ #include "path.h"
15
+
16
+ /**
17
+ * Filebuffer methods
18
+ *
19
+ * Read whole files into an in-memory buffer for processing
20
+ */
21
+ #define GIT_FBUFFER_INIT {NULL, 0}
22
+
23
+ typedef struct { /* file io buffer */
24
+ void *data; /* data bytes */
25
+ size_t len; /* data length */
26
+ } git_fbuffer;
27
+
28
+ extern int git_futils_readbuffer(git_fbuffer *obj, const char *path);
29
+ extern int git_futils_readbuffer_updated(git_fbuffer *obj, const char *path, time_t *mtime, int *updated);
30
+ extern void git_futils_freebuffer(git_fbuffer *obj);
31
+
32
+ /**
33
+ * File utils
34
+ *
35
+ * These are custom filesystem-related helper methods. They are
36
+ * rather high level, and wrap the underlying POSIX methods
37
+ *
38
+ * All these methods return GIT_SUCCESS on success,
39
+ * or an error code on failure and an error message is set.
40
+ */
41
+
42
+ /**
43
+ * Check if a file exists and can be accessed.
44
+ */
45
+ extern int git_futils_exists(const char *path);
46
+
47
+ /**
48
+ * Create and open a file, while also
49
+ * creating all the folders in its path
50
+ */
51
+ extern int git_futils_creat_withpath(const char *path, const mode_t dirmode, const mode_t mode);
52
+
53
+ /**
54
+ * Create an open a process-locked file
55
+ */
56
+ extern int git_futils_creat_locked(const char *path, const mode_t mode);
57
+
58
+ /**
59
+ * Create an open a process-locked file, while
60
+ * also creating all the folders in its path
61
+ */
62
+ extern int git_futils_creat_locked_withpath(const char *path, const mode_t dirmode, const mode_t mode);
63
+
64
+ /**
65
+ * Check if the given path points to a directory
66
+ */
67
+ extern int git_futils_isdir(const char *path);
68
+
69
+ /**
70
+ * Check if the given path points to a regular file
71
+ */
72
+ extern int git_futils_isfile(const char *path);
73
+
74
+ /**
75
+ * Create a path recursively
76
+ */
77
+ extern int git_futils_mkdir_r(const char *path, const mode_t mode);
78
+
79
+ /**
80
+ * Create all the folders required to contain
81
+ * the full path of a file
82
+ */
83
+ extern int git_futils_mkpath2file(const char *path, const mode_t mode);
84
+
85
+ extern int git_futils_rmdir_r(const char *path, int force);
86
+
87
+ /**
88
+ * Create and open a temporary file with a `_git2_` suffix
89
+ */
90
+ extern int git_futils_mktmp(char *path_out, const char *filename);
91
+
92
+ /**
93
+ * Move a file on the filesystem, create the
94
+ * destination path if it doesn't exist
95
+ */
96
+ extern int git_futils_mv_withpath(const char *from, const char *to, const mode_t dirmode);
97
+
98
+
99
+ /**
100
+ * Get the filesize in bytes of a file
101
+ */
102
+ extern git_off_t git_futils_filesize(git_file fd);
103
+
104
+ /**
105
+ * Read-only map all or part of a file into memory.
106
+ * When possible this function should favor a virtual memory
107
+ * style mapping over some form of malloc()+read(), as the
108
+ * data access will be random and is not likely to touch the
109
+ * majority of the region requested.
110
+ *
111
+ * @param out buffer to populate with the mapping information.
112
+ * @param fd open descriptor to configure the mapping from.
113
+ * @param begin first byte to map, this should be page aligned.
114
+ * @param end number of bytes to map.
115
+ * @return
116
+ * - GIT_SUCCESS on success;
117
+ * - GIT_EOSERR on an unspecified OS related error.
118
+ */
119
+ extern int git_futils_mmap_ro(
120
+ git_map *out,
121
+ git_file fd,
122
+ git_off_t begin,
123
+ size_t len);
124
+
125
+ /**
126
+ * Release the memory associated with a previous memory mapping.
127
+ * @param map the mapping description previously configured.
128
+ */
129
+ extern void git_futils_mmap_free(git_map *map);
130
+
131
+ /**
132
+ * Walk each directory entry, except '.' and '..', calling fn(state).
133
+ *
134
+ * @param pathbuf buffer the function reads the initial directory
135
+ * path from, and updates with each successive entry's name.
136
+ * @param pathmax maximum allocation of pathbuf.
137
+ * @param fn function to invoke with each entry. The first arg is
138
+ * the input state and the second arg is pathbuf. The function
139
+ * may modify the pathbuf, but only by appending new text.
140
+ * @param state to pass to fn as the first arg.
141
+ */
142
+ extern int git_futils_direach(
143
+ char *pathbuf,
144
+ size_t pathmax,
145
+ int (*fn)(void *, char *),
146
+ void *state);
147
+
148
+ extern int git_futils_cmp_path(const char *name1, int len1, int isdir1,
149
+ const char *name2, int len2, int isdir2);
150
+
151
+ #endif /* INCLUDE_fileops_h__ */