git 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of git might be problematic. Click here for more details.

Files changed (268) hide show
  1. data/README +69 -0
  2. data/doc/classes/Git.html +87 -6
  3. data/doc/classes/Git/Author.html +175 -0
  4. data/doc/classes/Git/Base.html +857 -297
  5. data/doc/classes/Git/Branch.html +118 -70
  6. data/doc/classes/Git/Branches.html +36 -36
  7. data/doc/classes/Git/Diff.html +64 -64
  8. data/doc/classes/Git/Diff/DiffFile.html +12 -12
  9. data/doc/classes/Git/Lib.html +560 -261
  10. data/doc/classes/Git/Object.html +19 -12
  11. data/doc/classes/Git/Object/AbstractObject.html +239 -66
  12. data/doc/classes/Git/Object/Blob.html +12 -11
  13. data/doc/classes/Git/Object/Commit.html +255 -10
  14. data/doc/classes/Git/Object/Tag.html +7 -33
  15. data/doc/classes/Git/Object/Tree.html +132 -10
  16. data/doc/classes/Git/Path.html +42 -18
  17. data/doc/classes/Git/Remote.html +42 -42
  18. data/doc/created.rid +1 -1
  19. data/doc/files/README.html +106 -1
  20. data/doc/files/lib/git/author_rb.html +101 -0
  21. data/doc/files/lib/git/base_rb.html +1 -1
  22. data/doc/files/lib/git/branch_rb.html +1 -1
  23. data/doc/files/lib/git/index_rb.html +1 -1
  24. data/doc/files/lib/git/lib_rb.html +8 -1
  25. data/doc/files/lib/git/object_rb.html +1 -1
  26. data/doc/files/lib/git/path_rb.html +1 -1
  27. data/doc/files/lib/git_rb.html +2 -1
  28. data/doc/fr_class_index.html +1 -0
  29. data/doc/fr_file_index.html +1 -0
  30. data/doc/fr_method_index.html +183 -134
  31. data/lib/git.rb +47 -1
  32. data/lib/git/base.rb +190 -9
  33. data/lib/git/branch.rb +9 -2
  34. data/lib/git/index.rb +1 -0
  35. data/lib/git/lib.rb +79 -3
  36. data/lib/git/object.rb +77 -34
  37. data/lib/git/path.rb +4 -0
  38. data/tests/files/working.git/objects/00/62cdf4c1e63069eececf54325535e91fd57c42 +0 -0
  39. data/tests/files/working.git/objects/00/ea60e1331b184386392037a7267dfb4a7c7d86 +0 -0
  40. data/tests/files/working.git/objects/01/0b7b79019cb510d8c5849704fd10541655916d +0 -0
  41. data/tests/files/working.git/objects/01/dd46ebe07fc30c10c85c2e926c70f2d7058a6b +0 -0
  42. data/tests/files/working.git/objects/02/b2a02844d00574c234d17bec6294e832f3c4c1 +0 -0
  43. data/tests/files/working.git/objects/06/f4e8a840d23fc0ab94895a5d16827a19f75fb7 +0 -0
  44. data/tests/files/working.git/objects/0b/2fe00801b62b7760c23d554796b05abc16af92 +0 -0
  45. data/tests/files/working.git/objects/0b/5262f6ee3552a99b7081a317e8289d6a4d8e72 +0 -0
  46. data/tests/files/working.git/objects/0d/2c47f07277b3ea30b0884f8e3acd68440507c8 +0 -0
  47. data/tests/files/working.git/objects/0d/519ca9c2eddc44431efe135d0fc8df00e0b975 +0 -0
  48. data/tests/files/working.git/objects/0f/845a0a981bc2f61354fcdd2b6eafe2b2c55c2d +3 -0
  49. data/tests/files/working.git/objects/0f/f4a0357c3d7221a2ef1e4c6b7d5c46d97fe250 +0 -0
  50. data/tests/files/working.git/objects/12/eb889f49f1464b32a51424d7724fb16f6c3a31 +0 -0
  51. data/tests/files/working.git/objects/15/34a65657edf4e5caaa5ce35652dca5e4c7d316 +0 -0
  52. data/tests/files/working.git/objects/15/378a1f3eafe4c5ab4f890883356df917ee5539 +2 -0
  53. data/tests/files/working.git/objects/16/9e6db43d4c09cd610179a7b9826483b4d94123 +0 -0
  54. data/tests/files/working.git/objects/16/d1f96acfd92d09c4f1f56d3441ac55dd30500e +0 -0
  55. data/tests/files/working.git/objects/16/ee5335538f11b4ffcc17b051f8d5db7570a055 +0 -0
  56. data/tests/files/working.git/objects/17/9ef0e0209e90af00f544ff414e0674dfb5f5c7 +0 -0
  57. data/tests/files/working.git/objects/19/9d2f8e60fddd1bb2a1b0bddedde35e5aa8b03f +0 -0
  58. data/tests/files/working.git/objects/1c/c8667014381e2788a94777532a788307f38d26 +1 -0
  59. data/tests/files/working.git/objects/1c/fcfba04eb4e461e9f930d22f528023ab1ddefc +0 -0
  60. data/tests/files/working.git/objects/1d/7be4117ded4534789d85c42ab579644cd3fa12 +0 -0
  61. data/tests/files/working.git/objects/1d/9e4767a95047ca5e395714985afaedb186f4cd +1 -0
  62. data/tests/files/working.git/objects/1f/09f2edb9c0d9275d15960771b363ca6940fbe3 +0 -0
  63. data/tests/files/working.git/objects/1f/691b879df15cf6742502ffc59833b4a40e7aef +0 -0
  64. data/tests/files/working.git/objects/23/751ef6c1fed1304ae1d07020aa73da6f2b93b0 +1 -0
  65. data/tests/files/working.git/objects/24/5582a71306d7360e40c07cd7d849a1aa14a31e +0 -0
  66. data/tests/files/working.git/objects/26/3e3c527004e7b742ed1f747c1bfb7e11825d7a +0 -0
  67. data/tests/files/working.git/objects/27/c0c003dda3e59ba236f53f6661faaf74432b5c +0 -0
  68. data/tests/files/working.git/objects/29/1b6be488d6abc586d3ee03ca61238766625a75 +0 -0
  69. data/tests/files/working.git/objects/2a/f6f7d51b7afdd404a871581ebb3b6ac07fb8cc +0 -0
  70. data/tests/files/working.git/objects/2c/ef51480d44dcc262d16be2812c692d940d5f29 +0 -0
  71. data/tests/files/working.git/objects/2e/20132e8fd40cb3e82248919a10900d31f1816a +0 -0
  72. data/tests/files/working.git/objects/2e/939fd37bbd2da971faa27c3e3de7d5aad40507 +0 -0
  73. data/tests/files/working.git/objects/2f/53e667d1d88e75b3fa300f9ab6e2d8ffd32a15 +0 -0
  74. data/tests/files/working.git/objects/32/4968b9dc40253f2c52a8e3856398c761dea856 +0 -0
  75. data/tests/files/working.git/objects/33/8ecb0183d507498aedb669b796b4f9e8880f00 +0 -0
  76. data/tests/files/working.git/objects/33/edabb4334cbe849a477a0d2893cdb768fa3091 +0 -0
  77. data/tests/files/working.git/objects/34/a566d193dc4702f03149969a2aad1443231560 +1 -0
  78. data/tests/files/working.git/objects/36/fe213c328fd280f33abe00069c4b92eb5a88d1 +0 -0
  79. data/tests/files/working.git/objects/39/66e9fa0e0b9fe9d3ef2fdaa6933f3d0bb82bc3 +0 -0
  80. data/tests/files/working.git/objects/3a/9f195756f5bd26b67c5e1fffd92d68d61be14e +2 -0
  81. data/tests/files/working.git/objects/3a/ac4b445017a8fc07502670ec2dbf744213dd48 +0 -0
  82. data/tests/files/working.git/objects/3b/6eeed9ce43ea893cf48d263da93448edae9f1c +0 -0
  83. data/tests/files/working.git/objects/3c/644f22b9b8edb06e7e298ecac8e71b133061f1 +0 -0
  84. data/tests/files/working.git/objects/3c/c71b13d906e445da52785ddeff40dad1163d49 +2 -0
  85. data/tests/files/working.git/objects/3c/f35bd14cf5f2dd08bbeef8698d700f3a038e5c +0 -0
  86. data/tests/files/working.git/objects/3d/331db92a8ead0565679efb76f328ae69ed1b77 +0 -0
  87. data/tests/files/working.git/objects/44/88516c3c936db58ea485ec2213dab9d13e6628 +0 -0
  88. data/tests/files/working.git/objects/44/987dd95c338fb573726541f270f1a7b55c9d51 +0 -0
  89. data/tests/files/working.git/objects/45/20c29b885e9db9b0df3c7bab7870157e1d00c3 +0 -0
  90. data/tests/files/working.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
  91. data/tests/files/working.git/objects/46/00557506be20eb1501a4f15a52e684d4b9ee61 +0 -0
  92. data/tests/files/working.git/objects/46/a60232117527e7b57ac0dd5ea4af2cd3fdb696 +0 -0
  93. data/tests/files/working.git/objects/47/0f6a87fa51dd25f6db0f4725ae37791d449356 +0 -0
  94. data/tests/files/working.git/objects/47/2650d42fa9454e2e61e3da9f5c158b8af6d298 +0 -0
  95. data/tests/files/working.git/objects/47/8e5ee111572790b248eaa99140c5a8f728abc7 +0 -0
  96. data/tests/files/working.git/objects/48/bbf0db7e813affab7d8dd2842b8455ff9876be +0 -0
  97. data/tests/files/working.git/objects/49/b352299735fda3a333c69c6273178b0c3dfa08 +0 -0
  98. data/tests/files/working.git/objects/4a/1e3e4500962c3631a479726bf2e40469594cba +0 -0
  99. data/tests/files/working.git/objects/4a/2bee50944e9285e8f82216c9b0b8a7d3cdd315 +0 -0
  100. data/tests/files/working.git/objects/4a/4e676afe275afecf23130390fe96d0e6d00057 +0 -0
  101. data/tests/files/working.git/objects/4a/de99433ac3e4bcc874cd7de488de29399e9096 +1 -0
  102. data/tests/files/working.git/objects/4b/7c90536eaa830d8c1f6ff49a7885b581d6acef +1 -0
  103. data/tests/files/working.git/objects/4c/411dc8e6ea6fcba0ed56e84aa7707f881d24c7 +0 -0
  104. data/tests/files/working.git/objects/4c/ce9432b2f80461324a61611f6143f8544cd80f +1 -0
  105. data/tests/files/working.git/objects/4c/e44a75510cbfe200b131fdbcc56a86f1b2dc08 +0 -0
  106. data/tests/files/working.git/objects/4d/35ba97a858072c240d327e3ce30c28b333a1b0 +0 -0
  107. data/tests/files/working.git/objects/4d/ff9ef38ef09cbf0e36031bbee22b7cf0c7a8fc +1 -0
  108. data/tests/files/working.git/objects/4e/aafb1d843aec4f8f1612d03de46a08c2143ea9 +0 -0
  109. data/tests/files/working.git/objects/4e/ebc1b62c53241b7fbf7fb33b5230362595bfdd +0 -0
  110. data/tests/files/working.git/objects/4f/4065121cb78fe6116ae7e3075f5c5a446bd08b +0 -0
  111. data/tests/files/working.git/objects/50/3d77289b054742f507d8a8ce7cc51d3841d5b9 +0 -0
  112. data/tests/files/working.git/objects/52/4038b20b297f40d78e7d83e04e38049457312b +0 -0
  113. data/tests/files/working.git/objects/53/a72df554e585e239e41cb1fc498d5aee9bb164 +0 -0
  114. data/tests/files/working.git/objects/54/0200385c3b0b299c7a87ecf59ca94c32fbbe99 +0 -0
  115. data/tests/files/working.git/objects/54/5c81a2e8d1112d5f7356f840a22e8f6abcef8f +2 -0
  116. data/tests/files/working.git/objects/54/6bec6f8872efa41d5d97a369f669165ecda0de +0 -0
  117. data/tests/files/working.git/objects/54/7a4bae347658f0d9eed0d35d31b4561aea7cf8 +2 -0
  118. data/tests/files/working.git/objects/56/195ef83e9e20ca75dddef0630633fc8060ed11 +0 -0
  119. data/tests/files/working.git/objects/57/7ddd894033c46a5fcf2c6f3c4e71cc72f86909 +0 -0
  120. data/tests/files/working.git/objects/58/501cbd0fc5ce832f6b34d37243a520dc19a6cc +1 -0
  121. data/tests/files/working.git/objects/58/73a650a91eb238005444d2c637b451f687951b +0 -0
  122. data/tests/files/working.git/objects/5a/28efd2fcf55b7b58eb7cc66b5db836155bc2bb +0 -0
  123. data/tests/files/working.git/objects/5b/0be7da7cc9ecdb6c2de5f818c30a42fbd2c9fa +1 -0
  124. data/tests/files/working.git/objects/5c/16fb8b958b51f6008f9722b279b1fde0defb76 +3 -0
  125. data/tests/files/working.git/objects/5d/4606820736043f9eed2a6336661d6892c820a5 +0 -0
  126. data/tests/files/working.git/objects/5e/392652a881999392c2757cf9b783c5d47b67f7 +0 -0
  127. data/tests/files/working.git/objects/5e/53019b3238362144c2766f02a2c00d91fcc023 +2 -0
  128. data/tests/files/working.git/objects/62/70c7f48ca41e6fb41b745ddc1bffe521d83194 +2 -0
  129. data/tests/files/working.git/objects/62/7e1097cda3b2e3ad6ba4d3772c0985e1ff349c +0 -0
  130. data/tests/files/working.git/objects/62/bb94c53efae4d53fd0649d129baef4aca87af7 +3 -0
  131. data/tests/files/working.git/objects/62/c9331ffe97bb6388fb7968662b4e97d121e2da +0 -0
  132. data/tests/files/working.git/objects/63/1446ec50808846e31fff786c065e69da2c673b +0 -0
  133. data/tests/files/working.git/objects/64/d0c52ac4c061cf1705e3005dfd86fb70374a14 +0 -0
  134. data/tests/files/working.git/objects/66/80a909b0e02b297bedbe143ef789d297235358 +0 -0
  135. data/tests/files/working.git/objects/6c/2d312ebd67eed4c7e97e3923b3667764e7360e +0 -0
  136. data/tests/files/working.git/objects/6d/e8fb35c2e4a69addd030f2dbb4f73fd4742b5b +0 -0
  137. data/tests/files/working.git/objects/6e/d281c757a969ffe22f3dcfa5830c532479c726 +0 -0
  138. data/tests/files/working.git/objects/70/714b02913c1a249a5ab05021742f0bc7065df7 +0 -0
  139. data/tests/files/working.git/objects/71/894b736711ea0a5def4f536009364d07ee4db3 +2 -0
  140. data/tests/files/working.git/objects/71/c9a23879ff0ac8c49b92d107f3f89c6d1b2d92 +1 -0
  141. data/tests/files/working.git/objects/73/b171450704ea4350f9f884426389fe04c6cd51 +0 -0
  142. data/tests/files/working.git/objects/74/32b657191a10587335e74ae6f0966a7eed2976 +0 -0
  143. data/tests/files/working.git/objects/79/e5b9e6ee5a1e6c52676a6332fe9163adaa92cb +0 -0
  144. data/tests/files/working.git/objects/7c/076f209839d7f910e8c84e41cc94898287ef45 +0 -0
  145. data/tests/files/working.git/objects/7c/60c6ab64c74d52f973d18cd1933318a8d9ae2e +0 -0
  146. data/tests/files/working.git/objects/7c/ac4f8d519d524ed025732ee220f6451665a770 +0 -0
  147. data/tests/files/working.git/objects/7f/5625f6b3c7213287a12c89017361248ed88936 +0 -0
  148. data/tests/files/working.git/objects/7f/86d16e0254f64f784198c6a55ef9bf7adbe7ce +0 -0
  149. data/tests/files/working.git/objects/7f/bfee9f8882ada1ec45c4925baf5649d96c4a16 +0 -0
  150. data/tests/files/working.git/objects/81/25fbe8605d2884e732a185c9a24abcc0d12a1f +0 -0
  151. data/tests/files/working.git/objects/81/d4d5e9b6db474d0f432aa31d44bf690d841e94 +0 -0
  152. data/tests/files/working.git/objects/81/f545324202466d44115656ea463a5bb114345f +0 -0
  153. data/tests/files/working.git/objects/82/d331cf4d3d4ee537c4f866cab2633b46a8d090 +0 -0
  154. data/tests/files/working.git/objects/83/c6a1f0d7d8df18a9d9bfe917707aec37868418 +0 -0
  155. data/tests/files/working.git/objects/85/8f46dd7496faf7af72102ca15cccff832b5377 +0 -0
  156. data/tests/files/working.git/objects/87/c56502c73149f006631129f85dff697e000356 +0 -0
  157. data/tests/files/working.git/objects/88/cf23d06f519bec7b824acd52b87a729555f2e7 +0 -0
  158. data/tests/files/working.git/objects/8a/3fb747983bf2a7f4ef136af4bfcf7993a19307 +0 -0
  159. data/tests/files/working.git/objects/8b/00d915a0ee5aeb32e0b166e1054c2901338c9d +0 -0
  160. data/tests/files/working.git/objects/8c/e3ee48a7e7ec697a99ee33700ec624548ad9e8 +0 -0
  161. data/tests/files/working.git/objects/8d/ae07ab9d98b5fe04d4d7ed804cc36441b68dab +0 -0
  162. data/tests/files/working.git/objects/8d/c79ae7616abf1e2d4d5d97d566f2b2f6cee043 +0 -0
  163. data/tests/files/working.git/objects/92/4dec9203af851c3b3e564697ab3004b35b3c2f +0 -0
  164. data/tests/files/working.git/objects/93/06c056ba3ef9dca6f6365af38148c71196533a +0 -0
  165. data/tests/files/working.git/objects/93/5badc874edd62a8629aaf103418092c73f0a56 +1 -0
  166. data/tests/files/working.git/objects/94/c827875e2cadb8bc8d4cdd900f19aa9e8634c7 +0 -0
  167. data/tests/files/working.git/objects/95/ef665df6ebd69842c5e74a24cb8a12225dee3e +0 -0
  168. data/tests/files/working.git/objects/98/fb6a686563963b8f7e552d747158adbc1c2bd6 +0 -0
  169. data/tests/files/working.git/objects/99/3dd9b1cdeab53e305886c91dbcbc8929eff22e +1 -0
  170. data/tests/files/working.git/objects/9a/e1fbd7636c99d34fdd395cf9bb21ad51417ce7 +1 -0
  171. data/tests/files/working.git/objects/9b/5149aa4ace4ef69461803b0ccbb21139e12626 +0 -0
  172. data/tests/files/working.git/objects/9d/3ad2f09cb7a1d4f4c91182c96f2be537fbc4ff +0 -0
  173. data/tests/files/working.git/objects/9d/6f937544dc3b936d6ee1466d6e216ba18d5686 +0 -0
  174. data/tests/files/working.git/objects/9f/a43bcd45af28e109e6f7b9a6ccd26e8e193a63 +0 -0
  175. data/tests/files/working.git/objects/a0/b3f35b3c39cfb12c4cc819bffe1cf54efb3642 +2 -0
  176. data/tests/files/working.git/objects/a1/15413501949f4f09811fd1aaecf136c012c7d7 +0 -0
  177. data/tests/files/working.git/objects/a1/a3069efcc64330fb6c66004e69b870da3d6186 +0 -0
  178. data/tests/files/working.git/objects/a3/62d30d5fe1021cabc4c90f073ba2511d5a43a1 +0 -0
  179. data/tests/files/working.git/objects/a3/c1f067074cdc9aa998cb5f3cad46a6f17aab2d +0 -0
  180. data/tests/files/working.git/objects/a3/db7143944dcfa006fefe7fb49c48793cb29ade +2 -0
  181. data/tests/files/working.git/objects/a4/4a5e945176ff31be83ffca3e7c68a8b6a45ea5 +1 -0
  182. data/tests/files/working.git/objects/a5/1546fabf88ddef5a9fd91b3989dd8ccae2edf3 +0 -0
  183. data/tests/files/working.git/objects/a6/b25c4b27ee99f93fd611154202af5f9e3c99de +2 -0
  184. data/tests/files/working.git/objects/a7/88a1cba299638a2c898fcfaae1f69a1549853d +0 -0
  185. data/tests/files/working.git/objects/a8/98e8a6b143188022863bc1cab0b5f7514624ba +0 -0
  186. data/tests/files/working.git/objects/a8/b607b221454c4cd7bc7831b2d19712bb4ff888 +0 -0
  187. data/tests/files/working.git/objects/a9/e2d9b71b616531f04a65ae5b972ba5d1f2cb93 +0 -0
  188. data/tests/files/working.git/objects/a9/e2f17562ae78a75dc855bb3dc9e87364195dcf +0 -0
  189. data/tests/files/working.git/objects/ab/16bc1812fd6226780a841300a2432dfd0c6719 +0 -0
  190. data/tests/files/working.git/objects/ac/8f48bbb7b31c945ba6a4fbe6950d009a5d8373 +0 -0
  191. data/tests/files/working.git/objects/ae/21cabd23aee99a719fc828977c0df9e8b19363 +0 -0
  192. data/tests/files/working.git/objects/b0/3003311ad3fa368b475df58390353868e13c91 +2 -0
  193. data/tests/files/working.git/objects/b0/ee249c5e5cc9464f3bc0034ab05632dcb87a23 +0 -0
  194. data/tests/files/working.git/objects/b1/288f8beeaa6cf048c3a9f578d4e266fab8820e +0 -0
  195. data/tests/files/working.git/objects/b1/5336206c9040f4c52660b3f3c76ee02ccece56 +0 -0
  196. data/tests/files/working.git/objects/b1/b18f5bea24648a1b08e5bba88728c15ec3cb50 +2 -0
  197. data/tests/files/working.git/objects/b4/5724ee906d2561901208ba924add09ab95ccb3 +0 -0
  198. data/tests/files/working.git/objects/b5/d8fc3cb740eb643c66eb5f4a97345fdb806259 +0 -0
  199. data/tests/files/working.git/objects/b6/153b8fe540288d66b974ae05113338ab1a61f0 +0 -0
  200. data/tests/files/working.git/objects/b6/987bc1201ad19774c43c0ea8078f6f51d76bcb +0 -0
  201. data/tests/files/working.git/objects/b6/9e6acd87e5f9114ce6580b095ef1057a8fe5bb +0 -0
  202. data/tests/files/working.git/objects/b9/8f4909807c8c84a1dc1b62b4a339ae1777f369 +3 -0
  203. data/tests/files/working.git/objects/ba/492c62b6227d7f3507b4dcc6e6d5f13790eabf +0 -0
  204. data/tests/files/working.git/objects/ba/c335cb9dc058a477d04cde34c07d1f70d16fb9 +0 -0
  205. data/tests/files/working.git/objects/bb/0850568bb43049031a38b01ddb60e4a487f823 +0 -0
  206. data/tests/files/working.git/objects/be/b14380ef26540efcad06bedcd0e302b6bce70e +0 -0
  207. data/tests/files/working.git/objects/c1/3142dd26a1f6f38403a17f6c411cb621b9a1cd +0 -0
  208. data/tests/files/working.git/objects/c1/8b4e9b0829411705d7fa9a1570a20d88780817 +0 -0
  209. data/tests/files/working.git/objects/c5/a3fdb33f052b8f17dac83c533b62244226f4ba +0 -0
  210. data/tests/files/working.git/objects/c6/567e2feccce3893ae0aaac2bf97807338aa8d4 +0 -0
  211. data/tests/files/working.git/objects/cb/45eef6fa1ad913137d91c6b81d2b42d69094a6 +0 -0
  212. data/tests/files/working.git/objects/cd/0d59357b36a447ff27a7c176b46e0a319b42df +0 -0
  213. data/tests/files/working.git/objects/cd/4291452a61ff8b57cf5510addc8ddc5630748e +0 -0
  214. data/tests/files/working.git/objects/cf/7135368cc3bf4920ceeaeebd083e098cfad355 +4 -0
  215. data/tests/files/working.git/objects/cf/b9952c3a28831144a0fac7ea5a2d8517f466c4 +0 -0
  216. data/tests/files/working.git/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d +0 -0
  217. data/tests/files/working.git/objects/d1/4cbc09cc34fb6450b2e96432102be51c8292b8 +0 -0
  218. data/tests/files/working.git/objects/d3/d171221e87a30e059d638f155f899595d96b71 +0 -0
  219. data/tests/files/working.git/objects/d5/b9587b65731e25216743b0caca72051a760211 +2 -0
  220. data/tests/files/working.git/objects/d6/a3aab3e38bc16688b4e636a91e462434210878 +0 -0
  221. data/tests/files/working.git/objects/d6/f31c35d7e010e50568c0d605227028aa7bac66 +0 -0
  222. data/tests/files/working.git/objects/d7/875788aeafdd8e317880c00e3372f683cad91e +0 -0
  223. data/tests/files/working.git/objects/d7/d8a71a719e2a4ca501991a66dab47df804f6ad +0 -0
  224. data/tests/files/working.git/objects/d7/e844eec32d74a3d37c4ce02d7138658e1035d6 +0 -0
  225. data/tests/files/working.git/objects/da/597fb7fba247a5b59d917e90342cf4b9695905 +0 -0
  226. data/tests/files/working.git/objects/da/7b788b1575936a4381050610a37737c70b55a0 +1 -0
  227. data/tests/files/working.git/objects/de/996da0ef3dcee1a28aef9243aa3e255eb825b5 +0 -0
  228. data/tests/files/working.git/objects/de/d54b45e4d49816f6d4256e74d45ba2bb351357 +0 -0
  229. data/tests/files/working.git/objects/e3/6f723934fd1d67c7d21538751f0b1e941141db +0 -0
  230. data/tests/files/working.git/objects/e3/ebef76525fe9e6e8dc739934a08512dff777c0 +0 -0
  231. data/tests/files/working.git/objects/e5/0fa6835cb99747346f19fea5f1ba939da4205f +2 -0
  232. data/tests/files/working.git/objects/e5/650a5c9c4b5a4415195bfb01d4d8dccbc8221b +0 -0
  233. data/tests/files/working.git/objects/e5/76bdfc9ed4627ac954f9390cf7a6151ad2a73e +0 -0
  234. data/tests/files/working.git/objects/e7/ea5938f9c009d32235050bca991d0b9533e440 +0 -0
  235. data/tests/files/working.git/objects/e8/183f05f5db68b3934e93f4bf6bed2bb664e0b5 +0 -0
  236. data/tests/files/working.git/objects/e8/bd03b163f82fba4560c11839d49361a78dec85 +0 -0
  237. data/tests/files/working.git/objects/e9/0de8268373e4fd5ab13310b7745d47ec16813c +0 -0
  238. data/tests/files/working.git/objects/ec/16a327a6a98367d03369b4e998baf3db379313 +0 -0
  239. data/tests/files/working.git/objects/ec/1e3d44e160e18dbfbaa80b5b0780ccc03e678e +0 -0
  240. data/tests/files/working.git/objects/ed/551aa66cf0c6f1a078832f80899faff0ae88dc +0 -0
  241. data/tests/files/working.git/objects/f1/25480ee106989ec4d86554c0d5a1487ad4336a +1 -0
  242. data/tests/files/working.git/objects/f1/410f8735f6f73d3599eb9b5cdd2fb70373335c +3 -0
  243. data/tests/files/working.git/objects/f2/02cb755135d4263589602783b04fb32a079d88 +0 -0
  244. data/tests/files/working.git/objects/f2/ff401fb3fc81f8abb3ca15247aadc1e22b6288 +0 -0
  245. data/tests/files/working.git/objects/f5/501de98279c6454f510188873476f3ead0cee6 +4 -0
  246. data/tests/files/working.git/objects/f7/5f313ca30e534aa9c42463e85108e682d3a14a +0 -0
  247. data/tests/files/working.git/objects/f8/e9c6748331411c0d3511f90bd4e0a1a30acff0 +0 -0
  248. data/tests/files/working.git/objects/f9/bce8995109cfab475d043a7dd9156d5e574ed3 +0 -0
  249. data/tests/files/working.git/objects/fa/6312f71abb153ada6a0399ad710d21bb61e4d8 +0 -0
  250. data/tests/files/working.git/objects/fb/8e78840d79085abf50edebf5b9d6b73ee0fb4c +0 -0
  251. data/tests/files/working.git/objects/fc/b49fa99454f804799a12095292edbca48779ab +0 -0
  252. data/tests/files/working.git/objects/fe/b2ccf88397c2d93f381176067be2727eba330b +0 -0
  253. data/tests/files/working.git/refs/heads/git_grep +1 -0
  254. data/tests/files/working.git/refs/heads/master +1 -1
  255. data/tests/files/working.git/refs/heads/test +1 -0
  256. data/tests/files/working.git/refs/heads/test_branches +1 -0
  257. data/tests/files/working.git/refs/heads/test_object +1 -0
  258. data/tests/files/working.git/refs/tags/gitsearch1 +1 -0
  259. data/tests/files/working.git/refs/tags/v2.5 +1 -0
  260. data/tests/files/working.git/refs/tags/v2.6 +1 -0
  261. data/tests/files/working.git/refs/tags/v2.7 +1 -0
  262. data/tests/files/working.git/refs/tags/v2.8 +1 -0
  263. data/tests/units/test_archive.rb +55 -0
  264. data/tests/units/test_bare.rb +41 -0
  265. data/tests/units/test_index_ops.rb +1 -1
  266. data/tests/units/test_object.rb +23 -14
  267. data/tests/units/test_tree_ops.rb +121 -0
  268. metadata +372 -2
data/lib/git.rb CHANGED
@@ -23,22 +23,68 @@ require 'git/diff'
23
23
  require 'git/status'
24
24
  require 'git/author'
25
25
 
26
+ # Git/Ruby Library
27
+ #
28
+ # This provides bindings for working with git in complex
29
+ # interactions, including branching and merging, object
30
+ # inspection and manipulation, history, patch generation
31
+ # and more. You should be able to do most fundamental git
32
+ # operations with this library.
33
+ #
34
+ # This module provides the basic functions to open a git
35
+ # reference to work with. You can open a working directory,
36
+ # open a bare repository, initialize a new repo or clone an
37
+ # existing remote repository.
38
+ #
39
+ # Author:: Scott Chacon (mailto:schacon@gmail.com)
40
+ # License:: MIT License
26
41
  module Git
27
42
 
28
- VERSION = '1.0.2'
43
+ VERSION = '1.0.3'
29
44
 
45
+ # open a bare repository
46
+ #
47
+ # this takes the path to a bare git repo
48
+ # it expects not to be able to use a working directory
49
+ # so you can't checkout stuff, commit things, etc.
50
+ # but you can do most read operations
30
51
  def self.bare(git_dir)
31
52
  Base.bare(git_dir)
32
53
  end
33
54
 
55
+ # open an existing git working directory
56
+ #
57
+ # this will most likely be the most common way to create
58
+ # a git reference, referring to a working directory.
59
+ # if not provided in the options, the library will assume
60
+ # your git_dir and index are in the default place (.git/, .git/index)
61
+ #
62
+ # options
63
+ # :repository => '/path/to/alt_git_dir'
64
+ # :index => '/path/to/alt_index_file'
34
65
  def self.open(working_dir, options = {})
35
66
  Base.open(working_dir, options)
36
67
  end
37
68
 
69
+ # initialize a new git repository, defaults to the current working directory
70
+ #
71
+ # options
72
+ # :repository => '/path/to/alt_git_dir'
73
+ # :index => '/path/to/alt_index_file'
38
74
  def self.init(working_dir = '.', options = {})
39
75
  Base.init(working_dir, options)
40
76
  end
41
77
 
78
+ # clones a remote repository
79
+ #
80
+ # options
81
+ # :bare => true (does a bare clone)
82
+ # :repository => '/path/to/alt_git_dir'
83
+ # :index => '/path/to/alt_index_file'
84
+ #
85
+ # example
86
+ # Git.clone('git://repo.or.cz/rubygit.git', 'clone.git', :bare => true)
87
+ #
42
88
  def self.clone(repository, name, options = {})
43
89
  Base.clone(repository, name, options)
44
90
  end
@@ -6,6 +6,8 @@ module Git
6
6
  @repository = nil
7
7
  @index = nil
8
8
 
9
+ @lib = nil
10
+
9
11
  # opens a bare Git Repository - no working directory options
10
12
  def self.bare(git_dir)
11
13
  self.new :repository => git_dir
@@ -72,24 +74,51 @@ module Git
72
74
  end
73
75
 
74
76
 
77
+ # returns a reference to the working directory
78
+ # @git.dir.path
79
+ # @git.dir.writeable?
75
80
  def dir
76
81
  @working_directory
77
82
  end
78
83
 
84
+ # returns reference to the git repository directory
85
+ # @git.dir.path
79
86
  def repo
80
87
  @repository
81
88
  end
82
89
 
90
+ # returns reference to the git index file
83
91
  def index
84
92
  @index
85
93
  end
86
94
 
95
+
96
+ def set_working(work_dir, check = true)
97
+ @lib = nil
98
+ @working_directory = Git::WorkingDirectory.new(work_dir.to_s, check)
99
+ end
100
+
101
+ def set_index(index_file, check = true)
102
+ @lib = nil
103
+ @index = Git::Index.new(index_file.to_s, check)
104
+ end
105
+
106
+ # changes current working directory for a block
107
+ # to the git working directory
108
+ #
109
+ # example
110
+ # @git.chdir do
111
+ # # write files
112
+ # @git.add
113
+ # @git.commit('message')
114
+ # end
87
115
  def chdir
88
116
  Dir.chdir(dir.path) do
89
117
  yield dir.path
90
118
  end
91
119
  end
92
120
 
121
+ # returns the repository size in bytes
93
122
  def repo_size
94
123
  size = 0
95
124
  Dir.chdir(repo.path) do
@@ -117,43 +146,86 @@ module Git
117
146
 
118
147
  # factory methods
119
148
 
149
+ # returns a Git::Object of the appropriate type
150
+ # you can also call @git.gtree('tree'), but that's
151
+ # just for readability. If you call @git.gtree('HEAD') it will
152
+ # still return a Git::Object::Commit object.
153
+ #
154
+ # @git.object calls a factory method that will run a rev-parse
155
+ # on the objectish and determine the type of the object and return
156
+ # an appropriate object for that type
120
157
  def object(objectish)
121
158
  Git::Object.new(self, objectish)
122
159
  end
123
- alias_method :gtree, :object
124
- alias_method :gcommit, :object
125
- alias_method :gblob, :object
126
160
 
161
+ def gtree(objectish)
162
+ Git::Object.new(self, objectish, 'tree')
163
+ end
164
+
165
+ def gcommit(objectish)
166
+ Git::Object.new(self, objectish, 'commit')
167
+ end
127
168
 
169
+ def gblob(objectish)
170
+ Git::Object.new(self, objectish, 'blob')
171
+ end
172
+
173
+ # returns a Git::Log object with count commits
128
174
  def log(count = 30)
129
175
  Git::Log.new(self, count)
130
176
  end
131
177
 
178
+ # returns a Git::Status object
132
179
  def status
133
180
  Git::Status.new(self)
134
181
  end
135
182
 
183
+ # returns a Git::Branches object of all the Git::Branch objects for this repo
136
184
  def branches
137
185
  Git::Branches.new(self)
138
186
  end
139
187
 
188
+ # returns a Git::Branch object for branch_name
140
189
  def branch(branch_name = 'master')
141
190
  Git::Branch.new(self, branch_name)
142
191
  end
143
192
 
193
+ # returns a Git::Remote object
144
194
  def remote(remote_name = 'origin')
145
195
  Git::Remote.new(self, remote_name)
146
196
  end
147
197
 
148
-
198
+ # this is a convenience method for accessing the class that wraps all the
199
+ # actual 'git' forked system calls. At some point I hope to replace the Git::Lib
200
+ # class with one that uses native methods or libgit C bindings
149
201
  def lib
150
- Git::Lib.new(self)
202
+ @lib ||= Git::Lib.new(self)
151
203
  end
152
204
 
205
+ # will run a grep for 'string' on the HEAD of the git repository
206
+ #
207
+ # to be more surgical in your grep, you can call grep() off a specific
208
+ # git object. for example:
209
+ #
210
+ # @git.object("v2.3").grep('TODO')
211
+ #
212
+ # in any case, it returns a hash of arrays of the type:
213
+ # hsh[tree-ish] = [[line_no, match], [line_no, match2]]
214
+ # hsh[tree-ish] = [[line_no, match], [line_no, match2]]
215
+ #
216
+ # so you might use it like this:
217
+ #
218
+ # @git.grep("TODO").each do |sha, arr|
219
+ # puts "in blob #{sha}:"
220
+ # arr.each do |match|
221
+ # puts "\t line #{match[0]}: '#{match[1]}'"
222
+ # end
223
+ # end
153
224
  def grep(string)
154
225
  self.object('HEAD').grep(string)
155
226
  end
156
227
 
228
+ # returns a Git::Diff object
157
229
  def diff(objectish = 'HEAD', obj2 = nil)
158
230
  Git::Diff.new(self, objectish, obj2)
159
231
  end
@@ -163,53 +235,80 @@ module Git
163
235
  self.lib.add(path)
164
236
  end
165
237
 
238
+ # removes file(s) from the git repository
166
239
  def remove(path = '.', opts = {})
167
240
  self.lib.remove(path, opts)
168
241
  end
169
242
 
243
+ # resets the working directory to the provided commitish
170
244
  def reset(commitish = nil, opts = {})
171
245
  self.lib.reset(commitish, opts)
172
246
  end
173
247
 
248
+ # resets the working directory to the commitish with '--hard'
174
249
  def reset_hard(commitish = nil, opts = {})
175
250
  opts = {:hard => true}.merge(opts)
176
251
  self.lib.reset(commitish, opts)
177
252
  end
178
253
 
254
+ # commits all pending changes in the index file to the git repository
179
255
  def commit(message, opts = {})
180
256
  self.lib.commit(message, opts)
181
257
  end
182
258
 
259
+ # commits all pending changes in the index file to the git repository,
260
+ # but automatically adds all modified files without having to explicitly
261
+ # calling @git.add() on them.
183
262
  def commit_all(message, opts = {})
184
263
  opts = {:add_all => true}.merge(opts)
185
264
  self.lib.commit(message, opts)
186
265
  end
187
266
 
267
+ # checks out a branch as the new git working directory
188
268
  def checkout(branch = 'master', opts = {})
189
269
  self.lib.checkout(branch, opts)
190
270
  end
191
271
 
272
+ # fetches changes from a remote branch - this does not modify the working directory,
273
+ # it just gets the changes from the remote if there are any
192
274
  def fetch(remote = 'origin')
193
275
  self.lib.fetch(remote)
194
276
  end
195
277
 
278
+ # pushes changes to a remote repository - easiest if this is a cloned repository,
279
+ # otherwise you may have to run something like this first to setup the push parameters:
280
+ #
281
+ # @git.config('remote.remote-name.push', 'refs/heads/master:refs/heads/master')
282
+ #
196
283
  def push(remote = 'origin', branch = 'master')
197
284
  self.lib.push(remote, branch)
198
285
  end
199
286
 
287
+ # merges one or more branches into the current working branch
288
+ #
289
+ # you can specify more than one branch to merge by passing an array of branches
200
290
  def merge(branch, message = 'merge')
201
291
  self.lib.merge(branch, message)
202
292
  end
203
293
 
294
+ # fetches a branch from a remote and merges it into the current working branch
204
295
  def pull(remote = 'origin', branch = 'master', message = 'origin pull')
205
296
  fetch(remote)
206
297
  merge(branch, message)
207
298
  end
208
299
 
300
+ # returns an array of Git:Remote objects
209
301
  def remotes
210
302
  self.lib.remotes.map { |r| Git::Remote.new(self, r) }
211
303
  end
212
-
304
+
305
+ # adds a new remote to this repository
306
+ # url can be a git url or a Git::Base object if it's a local reference
307
+ #
308
+ # @git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git')
309
+ # @git.fetch('scotts_git')
310
+ # @git.merge('scotts_git/master')
311
+ #
213
312
  def add_remote(name, url, opts = {})
214
313
  if url.is_a?(Git::Base)
215
314
  url = url.repo.path
@@ -218,29 +317,111 @@ module Git
218
317
  Git::Remote.new(self, name)
219
318
  end
220
319
 
320
+ # returns an array of all Git::Tag objects for this repository
221
321
  def tags
222
322
  self.lib.tags.map { |r| tag(r) }
223
323
  end
224
324
 
325
+ # returns a Git::Tag object
225
326
  def tag(tag_name)
226
- Git::Object.new(self, tag_name, true)
327
+ Git::Object.new(self, tag_name, 'tag', true)
227
328
  end
228
329
 
330
+ # creates a new git tag (Git::Tag)
229
331
  def add_tag(tag_name)
230
332
  self.lib.tag(tag_name)
231
333
  tag(tag_name)
232
334
  end
233
335
 
234
- # convenience methods
235
-
336
+ # creates an archive file of the given tree-ish
337
+ def archive(treeish, file = nil, opts = {})
338
+ self.object(treeish).archive(file, opts)
339
+ end
340
+
341
+ # repacks the repository
236
342
  def repack
237
343
  self.lib.repack
238
344
  end
239
345
 
346
+
347
+ ## LOWER LEVEL INDEX OPERATIONS ##
348
+
349
+ def with_index(new_index)
350
+ old_index = @index
351
+ set_index(new_index, false)
352
+ return_value = yield @index
353
+ set_index(old_index)
354
+ return_value
355
+ end
356
+
357
+ def with_temp_index &blk
358
+ tempfile = Tempfile.new('temp-index')
359
+ temp_path = tempfile.path
360
+ tempfile.unlink
361
+ with_index(temp_path, &blk)
362
+ end
363
+
364
+ def checkout_index(opts = {})
365
+ self.lib.checkout_index(opts)
366
+ end
367
+
368
+ def read_tree(treeish, opts = {})
369
+ self.lib.read_tree(treeish, opts)
370
+ end
371
+
372
+ def write_tree
373
+ self.lib.write_tree
374
+ end
375
+
376
+ def commit_tree(tree = nil, opts = {})
377
+ Git::Object::Commit.new(self, self.lib.commit_tree(tree, opts))
378
+ end
379
+
380
+ def write_and_commit_tree(opts = {})
381
+ tree = write_tree
382
+ commit_tree(tree, opts)
383
+ end
384
+
385
+ def update_ref(branch, commit)
386
+ branch(branch).update_ref(commit)
387
+ end
388
+
389
+
390
+ def ls_files
391
+ self.lib.ls_files
392
+ end
393
+
394
+ def with_working(work_dir)
395
+ return_value = false
396
+ old_working = @working_directory
397
+ set_working(work_dir)
398
+ Dir.chdir work_dir do
399
+ return_value = yield @working_directory
400
+ end
401
+ set_working(old_working)
402
+ return_value
403
+ end
404
+
405
+ def with_temp_working &blk
406
+ tempfile = Tempfile.new("temp-workdir")
407
+ temp_dir = tempfile.path
408
+ tempfile.unlink
409
+ Dir.mkdir(temp_dir, 0700)
410
+ with_working(temp_dir, &blk)
411
+ end
412
+
413
+
414
+ # runs git rev-parse to convert the objectish to a full sha
415
+ #
416
+ # @git.revparse("HEAD^^")
417
+ # @git.revparse('v2.4^{tree}')
418
+ # @git.revparse('v2.4:/doc/index.html')
419
+ #
240
420
  def revparse(objectish)
241
421
  self.lib.revparse(objectish)
242
422
  end
243
423
 
424
+ # returns the name of the branch the working directory is currently on
244
425
  def current_branch
245
426
  self.lib.branch_current
246
427
  end
@@ -21,15 +21,18 @@ module Git
21
21
  end
22
22
 
23
23
  def gcommit
24
- @gcommit = @base.object(name) if !@gcommit
24
+ @gcommit = @base.object(@full) if !@gcommit
25
25
  @gcommit
26
26
  end
27
27
 
28
28
  def checkout
29
29
  check_if_create
30
- @base.checkout(@name)
30
+ @base.checkout(@full)
31
31
  end
32
32
 
33
+ def archive(file, opts = {})
34
+ @base.lib.archive(@full, file, opts)
35
+ end
33
36
 
34
37
  # g.branch('new_branch').in_branch do
35
38
  # # create new file
@@ -72,6 +75,10 @@ module Git
72
75
  end
73
76
  end
74
77
 
78
+ def update_ref(commit)
79
+ @base.lib.update_ref(@full, commit)
80
+ end
81
+
75
82
  def to_a
76
83
  [@full]
77
84
  end
@@ -1,4 +1,5 @@
1
1
  module Git
2
2
  class Index < Git::Path
3
+
3
4
  end
4
5
  end