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.
- data/README +69 -0
- data/doc/classes/Git.html +87 -6
- data/doc/classes/Git/Author.html +175 -0
- data/doc/classes/Git/Base.html +857 -297
- data/doc/classes/Git/Branch.html +118 -70
- data/doc/classes/Git/Branches.html +36 -36
- data/doc/classes/Git/Diff.html +64 -64
- data/doc/classes/Git/Diff/DiffFile.html +12 -12
- data/doc/classes/Git/Lib.html +560 -261
- data/doc/classes/Git/Object.html +19 -12
- data/doc/classes/Git/Object/AbstractObject.html +239 -66
- data/doc/classes/Git/Object/Blob.html +12 -11
- data/doc/classes/Git/Object/Commit.html +255 -10
- data/doc/classes/Git/Object/Tag.html +7 -33
- data/doc/classes/Git/Object/Tree.html +132 -10
- data/doc/classes/Git/Path.html +42 -18
- data/doc/classes/Git/Remote.html +42 -42
- data/doc/created.rid +1 -1
- data/doc/files/README.html +106 -1
- data/doc/files/lib/git/author_rb.html +101 -0
- data/doc/files/lib/git/base_rb.html +1 -1
- data/doc/files/lib/git/branch_rb.html +1 -1
- data/doc/files/lib/git/index_rb.html +1 -1
- data/doc/files/lib/git/lib_rb.html +8 -1
- data/doc/files/lib/git/object_rb.html +1 -1
- data/doc/files/lib/git/path_rb.html +1 -1
- data/doc/files/lib/git_rb.html +2 -1
- data/doc/fr_class_index.html +1 -0
- data/doc/fr_file_index.html +1 -0
- data/doc/fr_method_index.html +183 -134
- data/lib/git.rb +47 -1
- data/lib/git/base.rb +190 -9
- data/lib/git/branch.rb +9 -2
- data/lib/git/index.rb +1 -0
- data/lib/git/lib.rb +79 -3
- data/lib/git/object.rb +77 -34
- data/lib/git/path.rb +4 -0
- data/tests/files/working.git/objects/00/62cdf4c1e63069eececf54325535e91fd57c42 +0 -0
- data/tests/files/working.git/objects/00/ea60e1331b184386392037a7267dfb4a7c7d86 +0 -0
- data/tests/files/working.git/objects/01/0b7b79019cb510d8c5849704fd10541655916d +0 -0
- data/tests/files/working.git/objects/01/dd46ebe07fc30c10c85c2e926c70f2d7058a6b +0 -0
- data/tests/files/working.git/objects/02/b2a02844d00574c234d17bec6294e832f3c4c1 +0 -0
- data/tests/files/working.git/objects/06/f4e8a840d23fc0ab94895a5d16827a19f75fb7 +0 -0
- data/tests/files/working.git/objects/0b/2fe00801b62b7760c23d554796b05abc16af92 +0 -0
- data/tests/files/working.git/objects/0b/5262f6ee3552a99b7081a317e8289d6a4d8e72 +0 -0
- data/tests/files/working.git/objects/0d/2c47f07277b3ea30b0884f8e3acd68440507c8 +0 -0
- data/tests/files/working.git/objects/0d/519ca9c2eddc44431efe135d0fc8df00e0b975 +0 -0
- data/tests/files/working.git/objects/0f/845a0a981bc2f61354fcdd2b6eafe2b2c55c2d +3 -0
- data/tests/files/working.git/objects/0f/f4a0357c3d7221a2ef1e4c6b7d5c46d97fe250 +0 -0
- data/tests/files/working.git/objects/12/eb889f49f1464b32a51424d7724fb16f6c3a31 +0 -0
- data/tests/files/working.git/objects/15/34a65657edf4e5caaa5ce35652dca5e4c7d316 +0 -0
- data/tests/files/working.git/objects/15/378a1f3eafe4c5ab4f890883356df917ee5539 +2 -0
- data/tests/files/working.git/objects/16/9e6db43d4c09cd610179a7b9826483b4d94123 +0 -0
- data/tests/files/working.git/objects/16/d1f96acfd92d09c4f1f56d3441ac55dd30500e +0 -0
- data/tests/files/working.git/objects/16/ee5335538f11b4ffcc17b051f8d5db7570a055 +0 -0
- data/tests/files/working.git/objects/17/9ef0e0209e90af00f544ff414e0674dfb5f5c7 +0 -0
- data/tests/files/working.git/objects/19/9d2f8e60fddd1bb2a1b0bddedde35e5aa8b03f +0 -0
- data/tests/files/working.git/objects/1c/c8667014381e2788a94777532a788307f38d26 +1 -0
- data/tests/files/working.git/objects/1c/fcfba04eb4e461e9f930d22f528023ab1ddefc +0 -0
- data/tests/files/working.git/objects/1d/7be4117ded4534789d85c42ab579644cd3fa12 +0 -0
- data/tests/files/working.git/objects/1d/9e4767a95047ca5e395714985afaedb186f4cd +1 -0
- data/tests/files/working.git/objects/1f/09f2edb9c0d9275d15960771b363ca6940fbe3 +0 -0
- data/tests/files/working.git/objects/1f/691b879df15cf6742502ffc59833b4a40e7aef +0 -0
- data/tests/files/working.git/objects/23/751ef6c1fed1304ae1d07020aa73da6f2b93b0 +1 -0
- data/tests/files/working.git/objects/24/5582a71306d7360e40c07cd7d849a1aa14a31e +0 -0
- data/tests/files/working.git/objects/26/3e3c527004e7b742ed1f747c1bfb7e11825d7a +0 -0
- data/tests/files/working.git/objects/27/c0c003dda3e59ba236f53f6661faaf74432b5c +0 -0
- data/tests/files/working.git/objects/29/1b6be488d6abc586d3ee03ca61238766625a75 +0 -0
- data/tests/files/working.git/objects/2a/f6f7d51b7afdd404a871581ebb3b6ac07fb8cc +0 -0
- data/tests/files/working.git/objects/2c/ef51480d44dcc262d16be2812c692d940d5f29 +0 -0
- data/tests/files/working.git/objects/2e/20132e8fd40cb3e82248919a10900d31f1816a +0 -0
- data/tests/files/working.git/objects/2e/939fd37bbd2da971faa27c3e3de7d5aad40507 +0 -0
- data/tests/files/working.git/objects/2f/53e667d1d88e75b3fa300f9ab6e2d8ffd32a15 +0 -0
- data/tests/files/working.git/objects/32/4968b9dc40253f2c52a8e3856398c761dea856 +0 -0
- data/tests/files/working.git/objects/33/8ecb0183d507498aedb669b796b4f9e8880f00 +0 -0
- data/tests/files/working.git/objects/33/edabb4334cbe849a477a0d2893cdb768fa3091 +0 -0
- data/tests/files/working.git/objects/34/a566d193dc4702f03149969a2aad1443231560 +1 -0
- data/tests/files/working.git/objects/36/fe213c328fd280f33abe00069c4b92eb5a88d1 +0 -0
- data/tests/files/working.git/objects/39/66e9fa0e0b9fe9d3ef2fdaa6933f3d0bb82bc3 +0 -0
- data/tests/files/working.git/objects/3a/9f195756f5bd26b67c5e1fffd92d68d61be14e +2 -0
- data/tests/files/working.git/objects/3a/ac4b445017a8fc07502670ec2dbf744213dd48 +0 -0
- data/tests/files/working.git/objects/3b/6eeed9ce43ea893cf48d263da93448edae9f1c +0 -0
- data/tests/files/working.git/objects/3c/644f22b9b8edb06e7e298ecac8e71b133061f1 +0 -0
- data/tests/files/working.git/objects/3c/c71b13d906e445da52785ddeff40dad1163d49 +2 -0
- data/tests/files/working.git/objects/3c/f35bd14cf5f2dd08bbeef8698d700f3a038e5c +0 -0
- data/tests/files/working.git/objects/3d/331db92a8ead0565679efb76f328ae69ed1b77 +0 -0
- data/tests/files/working.git/objects/44/88516c3c936db58ea485ec2213dab9d13e6628 +0 -0
- data/tests/files/working.git/objects/44/987dd95c338fb573726541f270f1a7b55c9d51 +0 -0
- data/tests/files/working.git/objects/45/20c29b885e9db9b0df3c7bab7870157e1d00c3 +0 -0
- data/tests/files/working.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
- data/tests/files/working.git/objects/46/00557506be20eb1501a4f15a52e684d4b9ee61 +0 -0
- data/tests/files/working.git/objects/46/a60232117527e7b57ac0dd5ea4af2cd3fdb696 +0 -0
- data/tests/files/working.git/objects/47/0f6a87fa51dd25f6db0f4725ae37791d449356 +0 -0
- data/tests/files/working.git/objects/47/2650d42fa9454e2e61e3da9f5c158b8af6d298 +0 -0
- data/tests/files/working.git/objects/47/8e5ee111572790b248eaa99140c5a8f728abc7 +0 -0
- data/tests/files/working.git/objects/48/bbf0db7e813affab7d8dd2842b8455ff9876be +0 -0
- data/tests/files/working.git/objects/49/b352299735fda3a333c69c6273178b0c3dfa08 +0 -0
- data/tests/files/working.git/objects/4a/1e3e4500962c3631a479726bf2e40469594cba +0 -0
- data/tests/files/working.git/objects/4a/2bee50944e9285e8f82216c9b0b8a7d3cdd315 +0 -0
- data/tests/files/working.git/objects/4a/4e676afe275afecf23130390fe96d0e6d00057 +0 -0
- data/tests/files/working.git/objects/4a/de99433ac3e4bcc874cd7de488de29399e9096 +1 -0
- data/tests/files/working.git/objects/4b/7c90536eaa830d8c1f6ff49a7885b581d6acef +1 -0
- data/tests/files/working.git/objects/4c/411dc8e6ea6fcba0ed56e84aa7707f881d24c7 +0 -0
- data/tests/files/working.git/objects/4c/ce9432b2f80461324a61611f6143f8544cd80f +1 -0
- data/tests/files/working.git/objects/4c/e44a75510cbfe200b131fdbcc56a86f1b2dc08 +0 -0
- data/tests/files/working.git/objects/4d/35ba97a858072c240d327e3ce30c28b333a1b0 +0 -0
- data/tests/files/working.git/objects/4d/ff9ef38ef09cbf0e36031bbee22b7cf0c7a8fc +1 -0
- data/tests/files/working.git/objects/4e/aafb1d843aec4f8f1612d03de46a08c2143ea9 +0 -0
- data/tests/files/working.git/objects/4e/ebc1b62c53241b7fbf7fb33b5230362595bfdd +0 -0
- data/tests/files/working.git/objects/4f/4065121cb78fe6116ae7e3075f5c5a446bd08b +0 -0
- data/tests/files/working.git/objects/50/3d77289b054742f507d8a8ce7cc51d3841d5b9 +0 -0
- data/tests/files/working.git/objects/52/4038b20b297f40d78e7d83e04e38049457312b +0 -0
- data/tests/files/working.git/objects/53/a72df554e585e239e41cb1fc498d5aee9bb164 +0 -0
- data/tests/files/working.git/objects/54/0200385c3b0b299c7a87ecf59ca94c32fbbe99 +0 -0
- data/tests/files/working.git/objects/54/5c81a2e8d1112d5f7356f840a22e8f6abcef8f +2 -0
- data/tests/files/working.git/objects/54/6bec6f8872efa41d5d97a369f669165ecda0de +0 -0
- data/tests/files/working.git/objects/54/7a4bae347658f0d9eed0d35d31b4561aea7cf8 +2 -0
- data/tests/files/working.git/objects/56/195ef83e9e20ca75dddef0630633fc8060ed11 +0 -0
- data/tests/files/working.git/objects/57/7ddd894033c46a5fcf2c6f3c4e71cc72f86909 +0 -0
- data/tests/files/working.git/objects/58/501cbd0fc5ce832f6b34d37243a520dc19a6cc +1 -0
- data/tests/files/working.git/objects/58/73a650a91eb238005444d2c637b451f687951b +0 -0
- data/tests/files/working.git/objects/5a/28efd2fcf55b7b58eb7cc66b5db836155bc2bb +0 -0
- data/tests/files/working.git/objects/5b/0be7da7cc9ecdb6c2de5f818c30a42fbd2c9fa +1 -0
- data/tests/files/working.git/objects/5c/16fb8b958b51f6008f9722b279b1fde0defb76 +3 -0
- data/tests/files/working.git/objects/5d/4606820736043f9eed2a6336661d6892c820a5 +0 -0
- data/tests/files/working.git/objects/5e/392652a881999392c2757cf9b783c5d47b67f7 +0 -0
- data/tests/files/working.git/objects/5e/53019b3238362144c2766f02a2c00d91fcc023 +2 -0
- data/tests/files/working.git/objects/62/70c7f48ca41e6fb41b745ddc1bffe521d83194 +2 -0
- data/tests/files/working.git/objects/62/7e1097cda3b2e3ad6ba4d3772c0985e1ff349c +0 -0
- data/tests/files/working.git/objects/62/bb94c53efae4d53fd0649d129baef4aca87af7 +3 -0
- data/tests/files/working.git/objects/62/c9331ffe97bb6388fb7968662b4e97d121e2da +0 -0
- data/tests/files/working.git/objects/63/1446ec50808846e31fff786c065e69da2c673b +0 -0
- data/tests/files/working.git/objects/64/d0c52ac4c061cf1705e3005dfd86fb70374a14 +0 -0
- data/tests/files/working.git/objects/66/80a909b0e02b297bedbe143ef789d297235358 +0 -0
- data/tests/files/working.git/objects/6c/2d312ebd67eed4c7e97e3923b3667764e7360e +0 -0
- data/tests/files/working.git/objects/6d/e8fb35c2e4a69addd030f2dbb4f73fd4742b5b +0 -0
- data/tests/files/working.git/objects/6e/d281c757a969ffe22f3dcfa5830c532479c726 +0 -0
- data/tests/files/working.git/objects/70/714b02913c1a249a5ab05021742f0bc7065df7 +0 -0
- data/tests/files/working.git/objects/71/894b736711ea0a5def4f536009364d07ee4db3 +2 -0
- data/tests/files/working.git/objects/71/c9a23879ff0ac8c49b92d107f3f89c6d1b2d92 +1 -0
- data/tests/files/working.git/objects/73/b171450704ea4350f9f884426389fe04c6cd51 +0 -0
- data/tests/files/working.git/objects/74/32b657191a10587335e74ae6f0966a7eed2976 +0 -0
- data/tests/files/working.git/objects/79/e5b9e6ee5a1e6c52676a6332fe9163adaa92cb +0 -0
- data/tests/files/working.git/objects/7c/076f209839d7f910e8c84e41cc94898287ef45 +0 -0
- data/tests/files/working.git/objects/7c/60c6ab64c74d52f973d18cd1933318a8d9ae2e +0 -0
- data/tests/files/working.git/objects/7c/ac4f8d519d524ed025732ee220f6451665a770 +0 -0
- data/tests/files/working.git/objects/7f/5625f6b3c7213287a12c89017361248ed88936 +0 -0
- data/tests/files/working.git/objects/7f/86d16e0254f64f784198c6a55ef9bf7adbe7ce +0 -0
- data/tests/files/working.git/objects/7f/bfee9f8882ada1ec45c4925baf5649d96c4a16 +0 -0
- data/tests/files/working.git/objects/81/25fbe8605d2884e732a185c9a24abcc0d12a1f +0 -0
- data/tests/files/working.git/objects/81/d4d5e9b6db474d0f432aa31d44bf690d841e94 +0 -0
- data/tests/files/working.git/objects/81/f545324202466d44115656ea463a5bb114345f +0 -0
- data/tests/files/working.git/objects/82/d331cf4d3d4ee537c4f866cab2633b46a8d090 +0 -0
- data/tests/files/working.git/objects/83/c6a1f0d7d8df18a9d9bfe917707aec37868418 +0 -0
- data/tests/files/working.git/objects/85/8f46dd7496faf7af72102ca15cccff832b5377 +0 -0
- data/tests/files/working.git/objects/87/c56502c73149f006631129f85dff697e000356 +0 -0
- data/tests/files/working.git/objects/88/cf23d06f519bec7b824acd52b87a729555f2e7 +0 -0
- data/tests/files/working.git/objects/8a/3fb747983bf2a7f4ef136af4bfcf7993a19307 +0 -0
- data/tests/files/working.git/objects/8b/00d915a0ee5aeb32e0b166e1054c2901338c9d +0 -0
- data/tests/files/working.git/objects/8c/e3ee48a7e7ec697a99ee33700ec624548ad9e8 +0 -0
- data/tests/files/working.git/objects/8d/ae07ab9d98b5fe04d4d7ed804cc36441b68dab +0 -0
- data/tests/files/working.git/objects/8d/c79ae7616abf1e2d4d5d97d566f2b2f6cee043 +0 -0
- data/tests/files/working.git/objects/92/4dec9203af851c3b3e564697ab3004b35b3c2f +0 -0
- data/tests/files/working.git/objects/93/06c056ba3ef9dca6f6365af38148c71196533a +0 -0
- data/tests/files/working.git/objects/93/5badc874edd62a8629aaf103418092c73f0a56 +1 -0
- data/tests/files/working.git/objects/94/c827875e2cadb8bc8d4cdd900f19aa9e8634c7 +0 -0
- data/tests/files/working.git/objects/95/ef665df6ebd69842c5e74a24cb8a12225dee3e +0 -0
- data/tests/files/working.git/objects/98/fb6a686563963b8f7e552d747158adbc1c2bd6 +0 -0
- data/tests/files/working.git/objects/99/3dd9b1cdeab53e305886c91dbcbc8929eff22e +1 -0
- data/tests/files/working.git/objects/9a/e1fbd7636c99d34fdd395cf9bb21ad51417ce7 +1 -0
- data/tests/files/working.git/objects/9b/5149aa4ace4ef69461803b0ccbb21139e12626 +0 -0
- data/tests/files/working.git/objects/9d/3ad2f09cb7a1d4f4c91182c96f2be537fbc4ff +0 -0
- data/tests/files/working.git/objects/9d/6f937544dc3b936d6ee1466d6e216ba18d5686 +0 -0
- data/tests/files/working.git/objects/9f/a43bcd45af28e109e6f7b9a6ccd26e8e193a63 +0 -0
- data/tests/files/working.git/objects/a0/b3f35b3c39cfb12c4cc819bffe1cf54efb3642 +2 -0
- data/tests/files/working.git/objects/a1/15413501949f4f09811fd1aaecf136c012c7d7 +0 -0
- data/tests/files/working.git/objects/a1/a3069efcc64330fb6c66004e69b870da3d6186 +0 -0
- data/tests/files/working.git/objects/a3/62d30d5fe1021cabc4c90f073ba2511d5a43a1 +0 -0
- data/tests/files/working.git/objects/a3/c1f067074cdc9aa998cb5f3cad46a6f17aab2d +0 -0
- data/tests/files/working.git/objects/a3/db7143944dcfa006fefe7fb49c48793cb29ade +2 -0
- data/tests/files/working.git/objects/a4/4a5e945176ff31be83ffca3e7c68a8b6a45ea5 +1 -0
- data/tests/files/working.git/objects/a5/1546fabf88ddef5a9fd91b3989dd8ccae2edf3 +0 -0
- data/tests/files/working.git/objects/a6/b25c4b27ee99f93fd611154202af5f9e3c99de +2 -0
- data/tests/files/working.git/objects/a7/88a1cba299638a2c898fcfaae1f69a1549853d +0 -0
- data/tests/files/working.git/objects/a8/98e8a6b143188022863bc1cab0b5f7514624ba +0 -0
- data/tests/files/working.git/objects/a8/b607b221454c4cd7bc7831b2d19712bb4ff888 +0 -0
- data/tests/files/working.git/objects/a9/e2d9b71b616531f04a65ae5b972ba5d1f2cb93 +0 -0
- data/tests/files/working.git/objects/a9/e2f17562ae78a75dc855bb3dc9e87364195dcf +0 -0
- data/tests/files/working.git/objects/ab/16bc1812fd6226780a841300a2432dfd0c6719 +0 -0
- data/tests/files/working.git/objects/ac/8f48bbb7b31c945ba6a4fbe6950d009a5d8373 +0 -0
- data/tests/files/working.git/objects/ae/21cabd23aee99a719fc828977c0df9e8b19363 +0 -0
- data/tests/files/working.git/objects/b0/3003311ad3fa368b475df58390353868e13c91 +2 -0
- data/tests/files/working.git/objects/b0/ee249c5e5cc9464f3bc0034ab05632dcb87a23 +0 -0
- data/tests/files/working.git/objects/b1/288f8beeaa6cf048c3a9f578d4e266fab8820e +0 -0
- data/tests/files/working.git/objects/b1/5336206c9040f4c52660b3f3c76ee02ccece56 +0 -0
- data/tests/files/working.git/objects/b1/b18f5bea24648a1b08e5bba88728c15ec3cb50 +2 -0
- data/tests/files/working.git/objects/b4/5724ee906d2561901208ba924add09ab95ccb3 +0 -0
- data/tests/files/working.git/objects/b5/d8fc3cb740eb643c66eb5f4a97345fdb806259 +0 -0
- data/tests/files/working.git/objects/b6/153b8fe540288d66b974ae05113338ab1a61f0 +0 -0
- data/tests/files/working.git/objects/b6/987bc1201ad19774c43c0ea8078f6f51d76bcb +0 -0
- data/tests/files/working.git/objects/b6/9e6acd87e5f9114ce6580b095ef1057a8fe5bb +0 -0
- data/tests/files/working.git/objects/b9/8f4909807c8c84a1dc1b62b4a339ae1777f369 +3 -0
- data/tests/files/working.git/objects/ba/492c62b6227d7f3507b4dcc6e6d5f13790eabf +0 -0
- data/tests/files/working.git/objects/ba/c335cb9dc058a477d04cde34c07d1f70d16fb9 +0 -0
- data/tests/files/working.git/objects/bb/0850568bb43049031a38b01ddb60e4a487f823 +0 -0
- data/tests/files/working.git/objects/be/b14380ef26540efcad06bedcd0e302b6bce70e +0 -0
- data/tests/files/working.git/objects/c1/3142dd26a1f6f38403a17f6c411cb621b9a1cd +0 -0
- data/tests/files/working.git/objects/c1/8b4e9b0829411705d7fa9a1570a20d88780817 +0 -0
- data/tests/files/working.git/objects/c5/a3fdb33f052b8f17dac83c533b62244226f4ba +0 -0
- data/tests/files/working.git/objects/c6/567e2feccce3893ae0aaac2bf97807338aa8d4 +0 -0
- data/tests/files/working.git/objects/cb/45eef6fa1ad913137d91c6b81d2b42d69094a6 +0 -0
- data/tests/files/working.git/objects/cd/0d59357b36a447ff27a7c176b46e0a319b42df +0 -0
- data/tests/files/working.git/objects/cd/4291452a61ff8b57cf5510addc8ddc5630748e +0 -0
- data/tests/files/working.git/objects/cf/7135368cc3bf4920ceeaeebd083e098cfad355 +4 -0
- data/tests/files/working.git/objects/cf/b9952c3a28831144a0fac7ea5a2d8517f466c4 +0 -0
- data/tests/files/working.git/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d +0 -0
- data/tests/files/working.git/objects/d1/4cbc09cc34fb6450b2e96432102be51c8292b8 +0 -0
- data/tests/files/working.git/objects/d3/d171221e87a30e059d638f155f899595d96b71 +0 -0
- data/tests/files/working.git/objects/d5/b9587b65731e25216743b0caca72051a760211 +2 -0
- data/tests/files/working.git/objects/d6/a3aab3e38bc16688b4e636a91e462434210878 +0 -0
- data/tests/files/working.git/objects/d6/f31c35d7e010e50568c0d605227028aa7bac66 +0 -0
- data/tests/files/working.git/objects/d7/875788aeafdd8e317880c00e3372f683cad91e +0 -0
- data/tests/files/working.git/objects/d7/d8a71a719e2a4ca501991a66dab47df804f6ad +0 -0
- data/tests/files/working.git/objects/d7/e844eec32d74a3d37c4ce02d7138658e1035d6 +0 -0
- data/tests/files/working.git/objects/da/597fb7fba247a5b59d917e90342cf4b9695905 +0 -0
- data/tests/files/working.git/objects/da/7b788b1575936a4381050610a37737c70b55a0 +1 -0
- data/tests/files/working.git/objects/de/996da0ef3dcee1a28aef9243aa3e255eb825b5 +0 -0
- data/tests/files/working.git/objects/de/d54b45e4d49816f6d4256e74d45ba2bb351357 +0 -0
- data/tests/files/working.git/objects/e3/6f723934fd1d67c7d21538751f0b1e941141db +0 -0
- data/tests/files/working.git/objects/e3/ebef76525fe9e6e8dc739934a08512dff777c0 +0 -0
- data/tests/files/working.git/objects/e5/0fa6835cb99747346f19fea5f1ba939da4205f +2 -0
- data/tests/files/working.git/objects/e5/650a5c9c4b5a4415195bfb01d4d8dccbc8221b +0 -0
- data/tests/files/working.git/objects/e5/76bdfc9ed4627ac954f9390cf7a6151ad2a73e +0 -0
- data/tests/files/working.git/objects/e7/ea5938f9c009d32235050bca991d0b9533e440 +0 -0
- data/tests/files/working.git/objects/e8/183f05f5db68b3934e93f4bf6bed2bb664e0b5 +0 -0
- data/tests/files/working.git/objects/e8/bd03b163f82fba4560c11839d49361a78dec85 +0 -0
- data/tests/files/working.git/objects/e9/0de8268373e4fd5ab13310b7745d47ec16813c +0 -0
- data/tests/files/working.git/objects/ec/16a327a6a98367d03369b4e998baf3db379313 +0 -0
- data/tests/files/working.git/objects/ec/1e3d44e160e18dbfbaa80b5b0780ccc03e678e +0 -0
- data/tests/files/working.git/objects/ed/551aa66cf0c6f1a078832f80899faff0ae88dc +0 -0
- data/tests/files/working.git/objects/f1/25480ee106989ec4d86554c0d5a1487ad4336a +1 -0
- data/tests/files/working.git/objects/f1/410f8735f6f73d3599eb9b5cdd2fb70373335c +3 -0
- data/tests/files/working.git/objects/f2/02cb755135d4263589602783b04fb32a079d88 +0 -0
- data/tests/files/working.git/objects/f2/ff401fb3fc81f8abb3ca15247aadc1e22b6288 +0 -0
- data/tests/files/working.git/objects/f5/501de98279c6454f510188873476f3ead0cee6 +4 -0
- data/tests/files/working.git/objects/f7/5f313ca30e534aa9c42463e85108e682d3a14a +0 -0
- data/tests/files/working.git/objects/f8/e9c6748331411c0d3511f90bd4e0a1a30acff0 +0 -0
- data/tests/files/working.git/objects/f9/bce8995109cfab475d043a7dd9156d5e574ed3 +0 -0
- data/tests/files/working.git/objects/fa/6312f71abb153ada6a0399ad710d21bb61e4d8 +0 -0
- data/tests/files/working.git/objects/fb/8e78840d79085abf50edebf5b9d6b73ee0fb4c +0 -0
- data/tests/files/working.git/objects/fc/b49fa99454f804799a12095292edbca48779ab +0 -0
- data/tests/files/working.git/objects/fe/b2ccf88397c2d93f381176067be2727eba330b +0 -0
- data/tests/files/working.git/refs/heads/git_grep +1 -0
- data/tests/files/working.git/refs/heads/master +1 -1
- data/tests/files/working.git/refs/heads/test +1 -0
- data/tests/files/working.git/refs/heads/test_branches +1 -0
- data/tests/files/working.git/refs/heads/test_object +1 -0
- data/tests/files/working.git/refs/tags/gitsearch1 +1 -0
- data/tests/files/working.git/refs/tags/v2.5 +1 -0
- data/tests/files/working.git/refs/tags/v2.6 +1 -0
- data/tests/files/working.git/refs/tags/v2.7 +1 -0
- data/tests/files/working.git/refs/tags/v2.8 +1 -0
- data/tests/units/test_archive.rb +55 -0
- data/tests/units/test_bare.rb +41 -0
- data/tests/units/test_index_ops.rb +1 -1
- data/tests/units/test_object.rb +23 -14
- data/tests/units/test_tree_ops.rb +121 -0
- 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.
|
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
|
data/lib/git/base.rb
CHANGED
@@ -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
|
-
#
|
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
|
data/lib/git/branch.rb
CHANGED
@@ -21,15 +21,18 @@ module Git
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def gcommit
|
24
|
-
@gcommit = @base.object(
|
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(@
|
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
|