Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LibGit2Sharp.Tests/IndexFixture.cs167
-rw-r--r--LibGit2Sharp.Tests/Resources/.gitattributes1
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/HEAD (renamed from Resources/testrepo_wd/dot_git/HEAD)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/head-tracker (renamed from Resources/testrepo.git/head-tracker)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/index (renamed from Resources/testrepo.git/index)bin10041 -> 10041 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 (renamed from Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08)bin19 -> 19 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 (renamed from Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7)bin51 -> 51 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd (renamed from Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd)bin119 -> 119 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 (renamed from Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057)bin18 -> 18 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 (renamed from Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 (renamed from Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345)bin162 -> 162 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 (renamed from Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5)bin146 -> 146 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 (renamed from Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a (renamed from Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a)bin119 -> 119 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 (renamed from Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980)bin145 -> 145 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f (renamed from Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f)bin60 -> 60 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d (renamed from Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 (renamed from Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479)bin126 -> 126 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a (renamed from Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f (renamed from Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd (renamed from Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd)bin28 -> 28 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 (renamed from Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6)bin26 -> 26 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 (renamed from Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 (renamed from Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd (renamed from Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 (renamed from Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391)bin15 -> 15 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 (renamed from Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 (renamed from Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92)bin24 -> 24 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 (renamed from Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx (renamed from Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx)bin46656 -> 46656 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack (renamed from Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack)bin386089 -> 386089 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx (renamed from Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx)bin1240 -> 1240 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack (renamed from Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack)bin491 -> 491 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx (renamed from Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx)bin1240 -> 1240 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack (renamed from Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack)bin498 -> 498 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/packed-refs (renamed from Resources/testrepo.git/packed-refs)6
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/br2 (renamed from Resources/testrepo.git/refs/heads/br2)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/master (renamed from Resources/testrepo.git/refs/heads/master)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/packed-test (renamed from Resources/testrepo.git/refs/heads/packed-test)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/test (renamed from Resources/testrepo.git/refs/heads/test)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/e90810b (renamed from Resources/testrepo.git/refs/tags/e90810b)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/lw (renamed from Resources/testrepo.git/refs/tags/lw)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/point_to_blob (renamed from Resources/testrepo.git/refs/tags/point_to_blob)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/test (renamed from Resources/testrepo.git/refs/tags/test)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/1/branch_file.txt (renamed from Resources/testrepo_wd/1/branch_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/README (renamed from Resources/testrepo_wd/README)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/branch_file.txt (renamed from Resources/testrepo_wd/branch_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/COMMIT_EDITMSG (renamed from Resources/testrepo_wd/dot_git/COMMIT_EDITMSG)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/HEAD (renamed from Resources/testrepo.git/HEAD)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/config (renamed from Resources/testrepo_wd/dot_git/config)28
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/description (renamed from Resources/testrepo_wd/dot_git/description)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample (renamed from Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample)30
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/commit-msg.sample (renamed from Resources/testrepo_wd/dot_git/hooks/commit-msg.sample)48
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-commit.sample (renamed from Resources/testrepo_wd/dot_git/hooks/post-commit.sample)16
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-receive.sample (renamed from Resources/testrepo_wd/dot_git/hooks/post-receive.sample)30
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-update.sample (renamed from Resources/testrepo_wd/dot_git/hooks/post-update.sample)16
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample (renamed from Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample)28
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-commit.sample (renamed from Resources/testrepo_wd/dot_git/hooks/pre-commit.sample)92
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample (renamed from Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample)338
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample (renamed from Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample)72
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/update.sample (renamed from Resources/testrepo_wd/dot_git/hooks/update.sample)256
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/index (renamed from Resources/testrepo_wd/dot_git/index)bin696 -> 696 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/info/exclude (renamed from Resources/testrepo_wd/dot_git/info/exclude)12
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/HEAD (renamed from Resources/testrepo_wd/dot_git/logs/HEAD)4
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/refs/heads/master (renamed from Resources/testrepo_wd/dot_git/logs/refs/heads/master)4
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 (renamed from Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08)bin19 -> 19 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 (renamed from Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5)bin28 -> 28 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 (renamed from Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7)bin51 -> 51 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd (renamed from Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd)bin119 -> 119 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 (renamed from Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057)bin18 -> 18 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 (renamed from Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 (renamed from Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345)bin162 -> 162 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad (renamed from Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad)bin22 -> 22 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 (renamed from Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5)bin146 -> 146 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e (renamed from Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e)bin166 -> 166 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 (renamed from Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a (renamed from Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a)bin119 -> 119 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 (renamed from Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980)bin145 -> 145 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f (renamed from Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f)bin60 -> 60 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d (renamed from Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 (renamed from Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479)bin126 -> 126 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f (renamed from Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f)bin270 -> 270 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 (renamed from Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550)bin31 -> 31 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 (renamed from Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3)bin27 -> 27 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a (renamed from Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f (renamed from Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd (renamed from Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd)bin28 -> 28 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 (renamed from Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6)bin26 -> 26 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 (renamed from Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 (renamed from Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd (renamed from Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2 (renamed from Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2)bin37 -> 37 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 (renamed from Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391)bin15 -> 15 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 (renamed from Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577)bin21 -> 21 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 (renamed from Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 (renamed from Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92)bin24 -> 24 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 (renamed from Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765)bin82 -> 82 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx)bin46656 -> 46656 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack)bin386089 -> 386089 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx)bin1240 -> 1240 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack)bin491 -> 491 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx)bin1240 -> 1240 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack (renamed from Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack)bin498 -> 498 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/packed-refs (renamed from Resources/testrepo_wd/dot_git/packed-refs)20
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/heads/master (renamed from Resources/testrepo_wd/dot_git/refs/heads/master)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD (renamed from Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD)2
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/modified_staged_file.txt (renamed from Resources/testrepo_wd/modified_staged_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/modified_unstaged_file.txt (renamed from Resources/testrepo_wd/modified_unstaged_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/new.txt (renamed from Resources/testrepo_wd/new.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/new_tracked_file.txt (renamed from Resources/testrepo_wd/new_tracked_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/Resources/testrepo_wd/new_untracked_file.txt (renamed from Resources/testrepo_wd/new_untracked_file.txt)0
-rw-r--r--LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs2
-rw-r--r--LibGit2Sharp/Core/NativeMethods.cs14
-rw-r--r--LibGit2Sharp/Core/Utf8Marshaler.cs4
-rw-r--r--LibGit2Sharp/FileStatus.cs44
-rw-r--r--LibGit2Sharp/Index.cs61
-rw-r--r--LibGit2Sharp/IndexEntry.cs10
-rw-r--r--LibGit2Sharp/IndexEntryState.cs13
-rw-r--r--LibGit2Sharp/LibGit2Sharp.csproj4
-rw-r--r--LibGit2Sharp/RepositoryStatus.cs145
-rw-r--r--LibGit2Sharp/StatusEntry.cs81
121 files changed, 963 insertions, 613 deletions
diff --git a/LibGit2Sharp.Tests/IndexFixture.cs b/LibGit2Sharp.Tests/IndexFixture.cs
index 0f73b890..8d2e9225 100644
--- a/LibGit2Sharp.Tests/IndexFixture.cs
+++ b/LibGit2Sharp.Tests/IndexFixture.cs
@@ -1,6 +1,6 @@
using System;
-using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Text;
using LibGit2Sharp.Tests.TestHelpers;
using NUnit.Framework;
@@ -10,25 +10,25 @@ namespace LibGit2Sharp.Tests
[TestFixture]
public class IndexFixture : BaseFixture
{
- private readonly List<string> expectedEntries = new List<string>
- {
- "README",
- "new.txt",
- "branch_file.txt",
- "1/branch_file.txt",
- //"deleted_staged_file.txt",
- "deleted_unstaged_file.txt",
- "modified_staged_file.txt",
- "modified_unstaged_file.txt",
- "new_tracked_file.txt"
- };
+ private readonly string[] expectedEntries = new[]
+ {
+ "1/branch_file.txt",
+ "README",
+ "branch_file.txt",
+ //"deleted_staged_file.txt",
+ "deleted_unstaged_file.txt",
+ "modified_staged_file.txt",
+ "modified_unstaged_file.txt",
+ "new.txt",
+ "new_tracked_file.txt"
+ };
[Test]
public void CanCountEntriesInIndex()
{
using (var repo = new Repository(Constants.StandardTestRepoPath))
{
- repo.Index.Count.ShouldEqual(expectedEntries.Count);
+ repo.Index.Count.ShouldEqual(expectedEntries.Count());
}
}
@@ -37,32 +37,11 @@ namespace LibGit2Sharp.Tests
{
using (var repo = new Repository(Constants.StandardTestRepoPath))
{
- foreach (IndexEntry entry in repo.Index)
- {
- Assert.IsTrue(expectedEntries.Contains(entry.Path), string.Format("Could not find {0}", entry.Path));
- }
+ CollectionAssert.AreEqual(expectedEntries, repo.Index.Select(e => e.Path).ToArray());
}
}
[Test]
- [Ignore("Not implemented yet.")]
- public void CanEnumerateModifiedFiles()
- {
- }
-
- [Test]
- [Ignore("Not implemented yet.")]
- public void CanEnumerateUntrackedFiles()
- {
- }
-
- [Test]
- [Ignore("Not implemented yet.")]
- public void CanEnumeratorStagedFiles()
- {
- }
-
- [Test]
public void CanFetchAnIndexEntryByItsName()
{
using (var repo = new Repository(Constants.StandardTestRepoPath))
@@ -86,12 +65,6 @@ namespace LibGit2Sharp.Tests
}
[Test]
- [Ignore("Not implemented yet.")]
- public void CanStageAModifiedFile()
- {
- }
-
- [Test]
public void CanStageANewFile()
{
TemporaryCloneOfTestRepo path = BuildTemporaryCloneOfTestRepo(Constants.StandardTestRepoWorkingDirPath);
@@ -151,16 +124,25 @@ namespace LibGit2Sharp.Tests
using (var repo = new Repository(path.RepositoryPath))
{
const string filename = "unit_test.txt";
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Nonexistent);
+ repo.Index[filename].ShouldBeNull();
+
File.WriteAllText(Path.Combine(repo.Info.WorkingDirectory, filename), "some contents");
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Untracked);
+ repo.Index[filename].ShouldBeNull();
repo.Index.Stage(filename);
repo.Index[filename].ShouldNotBeNull();
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Added);
+ repo.Index[filename].State.ShouldEqual(FileStatus.Added);
}
using (var repo = new Repository(path.RepositoryPath))
{
const string filename = "unit_test.txt";
repo.Index[filename].ShouldNotBeNull();
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Added);
+ repo.Index[filename].State.ShouldEqual(FileStatus.Added);
}
}
@@ -201,12 +183,6 @@ namespace LibGit2Sharp.Tests
}
[Test]
- [Ignore("Not implemented yet.")]
- public void CanStageAPath()
- {
- }
-
- [Test]
public void CanRenameAFile()
{
SelfCleaningDirectory scd = BuildSelfCleaningDirectory();
@@ -219,8 +195,13 @@ namespace LibGit2Sharp.Tests
const string oldName = "polite.txt";
string oldPath = Path.Combine(repo.Info.WorkingDirectory, oldName);
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Nonexistent);
+
File.WriteAllText(oldPath, "hello test file\n", Encoding.ASCII);
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Untracked);
+
repo.Index.Stage(oldName);
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Added);
// Generated through
// $ echo "hello test file" | git hash-object --stdin
@@ -232,9 +213,13 @@ namespace LibGit2Sharp.Tests
Signature who = Constants.Signature;
repo.Commit(who, who, "Initial commit");
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Unaltered);
+
const string newName = "being.frakking.polite.txt";
repo.Index.Move(oldName, newName);
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Removed);
+ repo.Index.RetrieveStatus(newName).ShouldEqual(FileStatus.Added);
repo.Index.Count.ShouldEqual(1);
repo.Index[newName].Id.Sha.ShouldEqual((expectedHash));
@@ -242,6 +227,9 @@ namespace LibGit2Sharp.Tests
who = who.TimeShift(TimeSpan.FromMinutes(5));
Commit commit = repo.Commit(who, who, "Fix file name");
+ repo.Index.RetrieveStatus(oldName).ShouldEqual(FileStatus.Nonexistent);
+ repo.Index.RetrieveStatus(newName).ShouldEqual(FileStatus.Unaltered);
+
commit.Tree[newName].Target.Id.Sha.ShouldEqual(expectedHash);
}
}
@@ -258,27 +246,102 @@ namespace LibGit2Sharp.Tests
string fullPath = Path.Combine(repo.Info.WorkingDirectory, filename);
File.Exists(fullPath).ShouldBeTrue();
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Untracked);
+
repo.Index.Stage(filename);
repo.Index.Count.ShouldEqual(count + 1);
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Added);
+
repo.Index.Unstage(filename);
repo.Index.Count.ShouldEqual(count);
+
+ repo.Index.RetrieveStatus(filename).ShouldEqual(FileStatus.Untracked);
}
}
[Test]
- public void UnstagingANonStagedFileThrows()
+ public void CanRetrieveTheStatusOfAFile()
{
using (var repo = new Repository(Constants.StandardTestRepoPath))
{
- Assert.Throws<LibGit2Exception>(() => repo.Index.Unstage("shadowcopy_of_a_unseen_ghost.txt"));
+ FileStatus status = repo.Index.RetrieveStatus("new_tracked_file.txt");
+ status.ShouldEqual(FileStatus.Added);
}
}
[Test]
- [Ignore("Not implemented yet.")]
- public void CanUnstageAModifiedFile()
+ public void CanRetrieveTheStatusOfTheWholeWorkingDirectory()
{
+ TemporaryCloneOfTestRepo path = BuildTemporaryCloneOfTestRepo(Constants.StandardTestRepoWorkingDirPath);
+ using (var repo = new Repository(path.RepositoryPath))
+ {
+ const string file = "modified_staged_file.txt";
+
+ RepositoryStatus status = repo.Index.RetrieveStatus();
+
+ IndexEntry indexEntry = repo.Index[file];
+ indexEntry.State.ShouldEqual(FileStatus.Staged);
+
+ status.ShouldNotBeNull();
+ status.Count().ShouldEqual(6);
+ status.IsDirty.ShouldBeTrue();
+
+ status.Untracked.Single().ShouldEqual("new_untracked_file.txt");
+ status.Modified.Single().ShouldEqual("modified_unstaged_file.txt");
+ status.Missing.Single().ShouldEqual("deleted_unstaged_file.txt");
+ status.Added.Single().ShouldEqual("new_tracked_file.txt");
+ status.Staged.Single().ShouldEqual(file);
+ status.Removed.Single().ShouldEqual("deleted_staged_file.txt");
+
+ File.AppendAllText(Path.Combine(repo.Info.WorkingDirectory, file), "Tclem's favorite commit message: boom");
+
+ indexEntry.State.ShouldEqual(FileStatus.Staged | FileStatus.Modified);
+
+ RepositoryStatus status2 = repo.Index.RetrieveStatus();
+
+ status2.ShouldNotBeNull();
+ status2.Count().ShouldEqual(6);
+ status2.IsDirty.ShouldBeTrue();
+
+ status2.Untracked.Single().ShouldEqual("new_untracked_file.txt");
+ CollectionAssert.AreEqual(new[] { file, "modified_unstaged_file.txt" }, status2.Modified);
+ status2.Missing.Single().ShouldEqual("deleted_unstaged_file.txt");
+ status2.Added.Single().ShouldEqual("new_tracked_file.txt");
+ status2.Staged.Single().ShouldEqual(file);
+ status2.Removed.Single().ShouldEqual("deleted_staged_file.txt");
+ }
+ }
+
+ [Test]
+ public void CanRetrieveTheStatusOfANewRepository()
+ {
+ SelfCleaningDirectory scd = BuildSelfCleaningDirectory();
+ string dir = Repository.Init(scd.DirectoryPath);
+
+ using (var repo = new Repository(dir))
+ {
+ RepositoryStatus status = repo.Index.RetrieveStatus();
+ status.ShouldNotBeNull();
+ status.Count().ShouldEqual(0);
+ status.IsDirty.ShouldBeFalse();
+
+ status.Untracked.Count().ShouldEqual(0);
+ status.Modified.Count().ShouldEqual(0);
+ status.Missing.Count().ShouldEqual(0);
+ status.Added.Count().ShouldEqual(0);
+ status.Staged.Count().ShouldEqual(0);
+ status.Removed.Count().ShouldEqual(0);
+ }
+ }
+
+ [Test]
+ public void UnstagingANonStagedFileThrows()
+ {
+ using (var repo = new Repository(Constants.StandardTestRepoPath))
+ {
+ Assert.Throws<LibGit2Exception>(() => repo.Index.Unstage("shadowcopy_of_an_unseen_ghost.txt"));
+ }
}
[Test]
diff --git a/LibGit2Sharp.Tests/Resources/.gitattributes b/LibGit2Sharp.Tests/Resources/.gitattributes
new file mode 100644
index 00000000..23d9bdb2
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/.gitattributes
@@ -0,0 +1 @@
+* binary
diff --git a/Resources/testrepo_wd/dot_git/HEAD b/LibGit2Sharp.Tests/Resources/testrepo.git/HEAD
index cb089cd8..cb438051 100644
--- a/Resources/testrepo_wd/dot_git/HEAD
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/HEAD
@@ -1 +1 @@
-ref: refs/heads/master
+ref: refs/heads/master
diff --git a/Resources/testrepo.git/head-tracker b/LibGit2Sharp.Tests/Resources/testrepo.git/head-tracker
index 40d876b4..c65dc77d 100644
--- a/Resources/testrepo.git/head-tracker
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/head-tracker
@@ -1 +1 @@
-ref: HEAD
+ref: HEAD
diff --git a/Resources/testrepo.git/index b/LibGit2Sharp.Tests/Resources/testrepo.git/index
index a27fb9c9..a27fb9c9 100644
--- a/Resources/testrepo.git/index
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/index
Binary files differ
diff --git a/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
index cedb2a22..cedb2a22 100644
--- a/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
Binary files differ
diff --git a/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
index 93a16f14..93a16f14 100644
--- a/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
Binary files differ
diff --git a/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd
index ba0bfb30..ba0bfb30 100644
--- a/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd
Binary files differ
diff --git a/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
index 7ca4ceed..7ca4ceed 100644
--- a/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
Binary files differ
diff --git a/Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
index 8953b6ce..8953b6ce 100644
--- a/Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
diff --git a/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
index 4d86b320..4d86b320 100644
--- a/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
Binary files differ
diff --git a/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
index 2ae13784..2ae13784 100644
--- a/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
Binary files differ
diff --git a/Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
index c1f22c54..c1f22c54 100644
--- a/Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
diff --git a/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
index 2ef4faa0..2ef4faa0 100644
--- a/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
Binary files differ
diff --git a/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
index 23c462f3..23c462f3 100644
--- a/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
Binary files differ
diff --git a/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
index 7018c7f7..7018c7f7 100644
--- a/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
Binary files differ
diff --git a/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
index 2f9b6b6e..2f9b6b6e 100644
--- a/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
Binary files differ
diff --git a/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479
index 5df58dda..5df58dda 100644
--- a/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479
Binary files differ
diff --git a/Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
index a7961243..a7961243 100644
--- a/Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
diff --git a/Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
index f8588696..f8588696 100644
--- a/Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
diff --git a/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
index d0d7e736..d0d7e736 100644
--- a/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
Binary files differ
diff --git a/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
index 18a7f61c..18a7f61c 100644
--- a/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
Binary files differ
diff --git a/Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
index f460f254..f460f254 100644
--- a/Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
diff --git a/Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
index 0817229b..0817229b 100644
--- a/Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
diff --git a/Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
index 75f541f1..75f541f1 100644
--- a/Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
diff --git a/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
index 71122389..71122389 100644
--- a/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
Binary files differ
diff --git a/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
index 03770969..03770969 100644
--- a/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
Binary files differ
diff --git a/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
index 112998d4..112998d4 100644
--- a/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
Binary files differ
diff --git a/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765
index 12bf5f3e..12bf5f3e 100644
--- a/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
index 5068f281..5068f281 100644
--- a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
index a6a1f302..a6a1f302 100644
--- a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
index 94c3c71d..94c3c71d 100644
--- a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
index 74c7fe4f..74c7fe4f 100644
--- a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
index 555cfa97..555cfa97 100644
--- a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
Binary files differ
diff --git a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
index 4d539ed0..4d539ed0 100644
--- a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
Binary files differ
diff --git a/Resources/testrepo.git/packed-refs b/LibGit2Sharp.Tests/Resources/testrepo.git/packed-refs
index 52f5e876..39043984 100644
--- a/Resources/testrepo.git/packed-refs
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/packed-refs
@@ -1,3 +1,3 @@
-# pack-refs with: peeled
-41bc8c69075bbdb46c5c6f0566cc8cc5b46e8bd9 refs/heads/packed
-5b5b025afb0b4c913b4c338a42934a3863bf3644 refs/heads/packed-test
+# pack-refs with: peeled
+41bc8c69075bbdb46c5c6f0566cc8cc5b46e8bd9 refs/heads/packed
+5b5b025afb0b4c913b4c338a42934a3863bf3644 refs/heads/packed-test
diff --git a/Resources/testrepo.git/refs/heads/br2 b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/br2
index aab87e5e..7f5cfcee 100644
--- a/Resources/testrepo.git/refs/heads/br2
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/br2
@@ -1 +1 @@
-a4a7dce85cf63874e984719f4fdd239f5145052f
+a4a7dce85cf63874e984719f4fdd239f5145052f
diff --git a/Resources/testrepo.git/refs/heads/master b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/master
index c52326ed..a0857c71 100644
--- a/Resources/testrepo.git/refs/heads/master
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/master
@@ -1 +1 @@
-4c062a6361ae6959e06292c1fa5e2822d9c96345
+4c062a6361ae6959e06292c1fa5e2822d9c96345
diff --git a/Resources/testrepo.git/refs/heads/packed-test b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/packed-test
index f2c14ad8..6aa42da1 100644
--- a/Resources/testrepo.git/refs/heads/packed-test
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/packed-test
@@ -1 +1 @@
-4a202b346bb0fb0db7eff3cffeb3c70babbd2045
+4a202b346bb0fb0db7eff3cffeb3c70babbd2045
diff --git a/Resources/testrepo.git/refs/heads/test b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/test
index 399c4c73..d84e92fb 100644
--- a/Resources/testrepo.git/refs/heads/test
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/heads/test
@@ -1 +1 @@
-e90810b8df3e80c413d903f631643c716887138d
+e90810b8df3e80c413d903f631643c716887138d
diff --git a/Resources/testrepo.git/refs/tags/e90810b b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/e90810b
index 584495d3..1dea927f 100644
--- a/Resources/testrepo.git/refs/tags/e90810b
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/e90810b
@@ -1 +1 @@
-7b4384978d2493e851f9cca7858815fac9b10980
+7b4384978d2493e851f9cca7858815fac9b10980
diff --git a/Resources/testrepo.git/refs/tags/lw b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/lw
index 399c4c73..d84e92fb 100644
--- a/Resources/testrepo.git/refs/tags/lw
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/lw
@@ -1 +1 @@
-e90810b8df3e80c413d903f631643c716887138d
+e90810b8df3e80c413d903f631643c716887138d
diff --git a/Resources/testrepo.git/refs/tags/point_to_blob b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/point_to_blob
index f874a3ff..826eae04 100644
--- a/Resources/testrepo.git/refs/tags/point_to_blob
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/point_to_blob
@@ -1 +1 @@
-1385f264afb75a56a5bec74243be9b367ba4ca08
+1385f264afb75a56a5bec74243be9b367ba4ca08
diff --git a/Resources/testrepo.git/refs/tags/test b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/test
index 6ee952a0..2a2f55c7 100644
--- a/Resources/testrepo.git/refs/tags/test
+++ b/LibGit2Sharp.Tests/Resources/testrepo.git/refs/tags/test
@@ -1 +1 @@
-b25fa35b38051e4ae45d4222e795f9df2e43f1d1
+b25fa35b38051e4ae45d4222e795f9df2e43f1d1
diff --git a/Resources/testrepo_wd/1/branch_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/1/branch_file.txt
index 45b983be..45b983be 100644
--- a/Resources/testrepo_wd/1/branch_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/1/branch_file.txt
diff --git a/Resources/testrepo_wd/README b/LibGit2Sharp.Tests/Resources/testrepo_wd/README
index a8233120..a8233120 100644
--- a/Resources/testrepo_wd/README
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/README
diff --git a/Resources/testrepo_wd/branch_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/branch_file.txt
index 45b983be..45b983be 100644
--- a/Resources/testrepo_wd/branch_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/branch_file.txt
diff --git a/Resources/testrepo_wd/dot_git/COMMIT_EDITMSG b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/COMMIT_EDITMSG
index 5e4d5531..fa71655e 100644
--- a/Resources/testrepo_wd/dot_git/COMMIT_EDITMSG
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/COMMIT_EDITMSG
@@ -1 +1 @@
-add more test files
+add more test files
diff --git a/Resources/testrepo.git/HEAD b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/HEAD
index cb089cd8..cb438051 100644
--- a/Resources/testrepo.git/HEAD
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/HEAD
@@ -1 +1 @@
-ref: refs/heads/master
+ref: refs/heads/master
diff --git a/Resources/testrepo_wd/dot_git/config b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/config
index 894da22b..1e6a7e96 100644
--- a/Resources/testrepo_wd/dot_git/config
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/config
@@ -1,14 +1,14 @@
-[core]
- repositoryformatversion = 0
- filemode = false
- bare = false
- logallrefupdates = true
- symlinks = false
- ignorecase = true
- hideDotFiles = dotGitOnly
-[remote "origin"]
- fetch = +refs/heads/*:refs/remotes/origin/*
- url = c:/GitHub/libgit2sharp/Resources/testrepo.git
-[branch "master"]
- remote = origin
- merge = refs/heads/master
+[core]
+ repositoryformatversion = 0
+ filemode = false
+ bare = false
+ logallrefupdates = true
+ symlinks = false
+ ignorecase = true
+ hideDotFiles = dotGitOnly
+[remote "origin"]
+ fetch = +refs/heads/*:refs/remotes/origin/*
+ url = c:/GitHub/libgit2sharp/Resources/testrepo.git
+[branch "master"]
+ remote = origin
+ merge = refs/heads/master
diff --git a/Resources/testrepo_wd/dot_git/description b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/description
index 498b267a..893e5cad 100644
--- a/Resources/testrepo_wd/dot_git/description
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/description
@@ -1 +1 @@
-Unnamed repository; edit this file 'description' to name the repository.
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample
index 8b2a2fe8..94338dbf 100644
--- a/Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/applypatch-msg.sample
@@ -1,15 +1,15 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message taken by
-# applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit. The hook is
-# allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "applypatch-msg".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/commit-msg" &&
- exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
-:
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit. The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+ exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff --git a/Resources/testrepo_wd/dot_git/hooks/commit-msg.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/commit-msg.sample
index b58d1184..a06a8d67 100644
--- a/Resources/testrepo_wd/dot_git/hooks/commit-msg.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/commit-msg.sample
@@ -1,24 +1,24 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message.
-# Called by "git commit" with one argument, the name of the file
-# that has the commit message. The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit. The hook is allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "commit-msg".
-
-# Uncomment the below to add a Signed-off-by line to the message.
-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
-# hook is more suited to it.
-#
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-
-# This example catches duplicate Signed-off-by lines.
-
-test "" = "$(grep '^Signed-off-by: ' "$1" |
- sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
- echo >&2 Duplicate Signed-off-by lines.
- exit 1
-}
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message. The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit. The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+ echo >&2 Duplicate Signed-off-by lines.
+ exit 1
+}
diff --git a/Resources/testrepo_wd/dot_git/hooks/post-commit.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-commit.sample
index 22668216..9d3b4be7 100644
--- a/Resources/testrepo_wd/dot_git/hooks/post-commit.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-commit.sample
@@ -1,8 +1,8 @@
-#!/bin/sh
-#
-# An example hook script that is called after a successful
-# commit is made.
-#
-# To enable this hook, rename this file to "post-commit".
-
-: Nothing
+#!/bin/sh
+#
+# An example hook script that is called after a successful
+# commit is made.
+#
+# To enable this hook, rename this file to "post-commit".
+
+: Nothing
diff --git a/Resources/testrepo_wd/dot_git/hooks/post-receive.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-receive.sample
index 7a83e17a..95e87f96 100644
--- a/Resources/testrepo_wd/dot_git/hooks/post-receive.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-receive.sample
@@ -1,15 +1,15 @@
-#!/bin/sh
-#
-# An example hook script for the "post-receive" event.
-#
-# The "post-receive" script is run after receive-pack has accepted a pack
-# and the repository has been updated. It is passed arguments in through
-# stdin in the form
-# <oldrev> <newrev> <refname>
-# For example:
-# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
-#
-# see contrib/hooks/ for a sample, or uncomment the next line and
-# rename the file to "post-receive".
-
-#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
+#!/bin/sh
+#
+# An example hook script for the "post-receive" event.
+#
+# The "post-receive" script is run after receive-pack has accepted a pack
+# and the repository has been updated. It is passed arguments in through
+# stdin in the form
+# <oldrev> <newrev> <refname>
+# For example:
+# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+# see contrib/hooks/ for a sample, or uncomment the next line and
+# rename the file to "post-receive".
+
+#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
diff --git a/Resources/testrepo_wd/dot_git/hooks/post-update.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-update.sample
index ec17ec19..93e30366 100644
--- a/Resources/testrepo_wd/dot_git/hooks/post-update.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/post-update.sample
@@ -1,8 +1,8 @@
-#!/bin/sh
-#
-# An example hook script to prepare a packed repository for use over
-# dumb transports.
-#
-# To enable this hook, rename this file to "post-update".
-
-exec git update-server-info
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample
index b1f187c2..e015e761 100644
--- a/Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-applypatch.sample
@@ -1,14 +1,14 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed
-# by applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-applypatch".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/pre-commit" &&
- exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
-:
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+ exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff --git a/Resources/testrepo_wd/dot_git/hooks/pre-commit.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-commit.sample
index b187c4bb..f84e5144 100644
--- a/Resources/testrepo_wd/dot_git/hooks/pre-commit.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-commit.sample
@@ -1,46 +1,46 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed.
-# Called by "git commit" with no arguments. The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-commit".
-
-if git rev-parse --verify HEAD >/dev/null 2>&1
-then
- against=HEAD
-else
- # Initial commit: diff against an empty tree object
- against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-fi
-
-# If you want to allow non-ascii filenames set this variable to true.
-allownonascii=$(git config hooks.allownonascii)
-
-# Cross platform projects tend to avoid non-ascii filenames; prevent
-# them from being added to the repository. We exploit the fact that the
-# printable range starts at the space character and ends with tilde.
-if [ "$allownonascii" != "true" ] &&
- # Note that the use of brackets around a tr range is ok here, (it's
- # even required, for portability to Solaris 10's /usr/bin/tr), since
- # the square bracket bytes happen to fall in the designated range.
- test "$(git diff --cached --name-only --diff-filter=A -z $against |
- LC_ALL=C tr -d '[ -~]\0')"
-then
- echo "Error: Attempt to add a non-ascii file name."
- echo
- echo "This can cause problems if you want to work"
- echo "with people on other platforms."
- echo
- echo "To be portable it is advisable to rename the file ..."
- echo
- echo "If you know what you are doing you can disable this"
- echo "check using:"
- echo
- echo " git config hooks.allownonascii true"
- echo
- exit 1
-fi
-
-exec git diff-index --check --cached $against --
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ test "$(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0')"
+then
+ echo "Error: Attempt to add a non-ascii file name."
+ echo
+ echo "This can cause problems if you want to work"
+ echo "with people on other platforms."
+ echo
+ echo "To be portable it is advisable to rename the file ..."
+ echo
+ echo "If you know what you are doing you can disable this"
+ echo "check using:"
+ echo
+ echo " git config hooks.allownonascii true"
+ echo
+ exit 1
+fi
+
+exec git diff-index --check --cached $against --
diff --git a/Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample
index 9773ed4c..d9c5522e 100644
--- a/Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/pre-rebase.sample
@@ -1,169 +1,169 @@
-#!/bin/sh
-#
-# Copyright (c) 2006, 2008 Junio C Hamano
-#
-# The "pre-rebase" hook is run just before "git rebase" starts doing
-# its job, and can prevent the command from running by exiting with
-# non-zero status.
-#
-# The hook is called with the following parameters:
-#
-# $1 -- the upstream the series was forked from.
-# $2 -- the branch being rebased (or empty when rebasing the current branch).
-#
-# This sample shows how to prevent topic branches that are already
-# merged to 'next' branch from getting rebased, because allowing it
-# would result in rebasing already published history.
-
-publish=next
-basebranch="$1"
-if test "$#" = 2
-then
- topic="refs/heads/$2"
-else
- topic=`git symbolic-ref HEAD` ||
- exit 0 ;# we do not interrupt rebasing detached HEAD
-fi
-
-case "$topic" in
-refs/heads/??/*)
- ;;
-*)
- exit 0 ;# we do not interrupt others.
- ;;
-esac
-
-# Now we are dealing with a topic branch being rebased
-# on top of master. Is it OK to rebase it?
-
-# Does the topic really exist?
-git show-ref -q "$topic" || {
- echo >&2 "No such branch $topic"
- exit 1
-}
-
-# Is topic fully merged to master?
-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
-if test -z "$not_in_master"
-then
- echo >&2 "$topic is fully merged to master; better remove it."
- exit 1 ;# we could allow it, but there is no point.
-fi
-
-# Is topic ever merged to next? If so you should not be rebasing it.
-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
-only_next_2=`git rev-list ^master ${publish} | sort`
-if test "$only_next_1" = "$only_next_2"
-then
- not_in_topic=`git rev-list "^$topic" master`
- if test -z "$not_in_topic"
- then
- echo >&2 "$topic is already up-to-date with master"
- exit 1 ;# we could allow it, but there is no point.
- else
- exit 0
- fi
-else
- not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
- /usr/bin/perl -e '
- my $topic = $ARGV[0];
- my $msg = "* $topic has commits already merged to public branch:\n";
- my (%not_in_next) = map {
- /^([0-9a-f]+) /;
- ($1 => 1);
- } split(/\n/, $ARGV[1]);
- for my $elem (map {
- /^([0-9a-f]+) (.*)$/;
- [$1 => $2];
- } split(/\n/, $ARGV[2])) {
- if (!exists $not_in_next{$elem->[0]}) {
- if ($msg) {
- print STDERR $msg;
- undef $msg;
- }
- print STDERR " $elem->[1]\n";
- }
- }
- ' "$topic" "$not_in_next" "$not_in_master"
- exit 1
-fi
-
-exit 0
-
-################################################################
-
-This sample hook safeguards topic branches that have been
-published from being rewound.
-
-The workflow assumed here is:
-
- * Once a topic branch forks from "master", "master" is never
- merged into it again (either directly or indirectly).
-
- * Once a topic branch is fully cooked and merged into "master",
- it is deleted. If you need to build on top of it to correct
- earlier mistakes, a new topic branch is created by forking at
- the tip of the "master". This is not strictly necessary, but
- it makes it easier to keep your history simple.
-
- * Whenever you need to test or publish your changes to topic
- branches, merge them into "next" branch.
-
-The script, being an example, hardcodes the publish branch name
-to be "next", but it is trivial to make it configurable via
-$GIT_DIR/config mechanism.
-
-With this workflow, you would want to know:
-
-(1) ... if a topic branch has ever been merged to "next". Young
- topic branches can have stupid mistakes you would rather
- clean up before publishing, and things that have not been
- merged into other branches can be easily rebased without
- affecting other people. But once it is published, you would
- not want to rewind it.
-
-(2) ... if a topic branch has been fully merged to "master".
- Then you can delete it. More importantly, you should not
- build on top of it -- other people may already want to
- change things related to the topic as patches against your
- "master", so if you need further changes, it is better to
- fork the topic (perhaps with the same name) afresh from the
- tip of "master".
-
-Let's look at this example:
-
- o---o---o---o---o---o---o---o---o---o "next"
- / / / /
- / a---a---b A / /
- / / / /
- / / c---c---c---c B /
- / / / \ /
- / / / b---b C \ /
- / / / / \ /
- ---o---o---o---o---o---o---o---o---o---o---o "master"
-
-
-A, B and C are topic branches.
-
- * A has one fix since it was merged up to "next".
-
- * B has finished. It has been fully merged up to "master" and "next",
- and is ready to be deleted.
-
- * C has not merged to "next" at all.
-
-We would want to allow C to be rebased, refuse A, and encourage
-B to be deleted.
-
-To compute (1):
-
- git rev-list ^master ^topic next
- git rev-list ^master next
-
- if these match, topic has not merged in next at all.
-
-To compute (2):
-
- git rev-list master..topic
-
- if this is empty, it is fully merged to "master".
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+ topic="refs/heads/$2"
+else
+ topic=`git symbolic-ref HEAD` ||
+ exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+ ;;
+*)
+ exit 0 ;# we do not interrupt others.
+ ;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master. Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+ echo >&2 "No such branch $topic"
+ exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+ echo >&2 "$topic is fully merged to master; better remove it."
+ exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next? If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+ not_in_topic=`git rev-list "^$topic" master`
+ if test -z "$not_in_topic"
+ then
+ echo >&2 "$topic is already up-to-date with master"
+ exit 1 ;# we could allow it, but there is no point.
+ else
+ exit 0
+ fi
+else
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+ /usr/bin/perl -e '
+ my $topic = $ARGV[0];
+ my $msg = "* $topic has commits already merged to public branch:\n";
+ my (%not_in_next) = map {
+ /^([0-9a-f]+) /;
+ ($1 => 1);
+ } split(/\n/, $ARGV[1]);
+ for my $elem (map {
+ /^([0-9a-f]+) (.*)$/;
+ [$1 => $2];
+ } split(/\n/, $ARGV[2])) {
+ if (!exists $not_in_next{$elem->[0]}) {
+ if ($msg) {
+ print STDERR $msg;
+ undef $msg;
+ }
+ print STDERR " $elem->[1]\n";
+ }
+ }
+ ' "$topic" "$not_in_next" "$not_in_master"
+ exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+ merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+ it is deleted. If you need to build on top of it to correct
+ earlier mistakes, a new topic branch is created by forking at
+ the tip of the "master". This is not strictly necessary, but
+ it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+ branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next". Young
+ topic branches can have stupid mistakes you would rather
+ clean up before publishing, and things that have not been
+ merged into other branches can be easily rebased without
+ affecting other people. But once it is published, you would
+ not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+ Then you can delete it. More importantly, you should not
+ build on top of it -- other people may already want to
+ change things related to the topic as patches against your
+ "master", so if you need further changes, it is better to
+ fork the topic (perhaps with the same name) afresh from the
+ tip of "master".
+
+Let's look at this example:
+
+ o---o---o---o---o---o---o---o---o---o "next"
+ / / / /
+ / a---a---b A / /
+ / / / /
+ / / c---c---c---c B /
+ / / / \ /
+ / / / b---b C \ /
+ / / / / \ /
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished. It has been fully merged up to "master" and "next",
+ and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+ git rev-list ^master ^topic next
+ git rev-list ^master next
+
+ if these match, topic has not merged in next at all.
+
+To compute (2):
+
+ git rev-list master..topic
+
+ if this is empty, it is fully merged to "master".
diff --git a/Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample
index f093a02e..d48c8b71 100644
--- a/Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/prepare-commit-msg.sample
@@ -1,36 +1,36 @@
-#!/bin/sh
-#
-# An example hook script to prepare the commit log message.
-# Called by "git commit" with the name of the file that has the
-# commit message, followed by the description of the commit
-# message's source. The hook's purpose is to edit the commit
-# message file. If the hook fails with a non-zero status,
-# the commit is aborted.
-#
-# To enable this hook, rename this file to "prepare-commit-msg".
-
-# This hook includes three examples. The first comments out the
-# "Conflicts:" part of a merge commit.
-#
-# The second includes the output of "git diff --name-status -r"
-# into the message, just before the "git status" output. It is
-# commented because it doesn't cope with --amend or with squashed
-# commits.
-#
-# The third example adds a Signed-off-by line to the message, that can
-# still be edited. This is rarely a good idea.
-
-case "$2,$3" in
- merge,)
- /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
-
-# ,|template,)
-# /usr/bin/perl -i.bak -pe '
-# print "\n" . `git diff --cached --name-status -r`
-# if /^#/ && $first++ == 0' "$1" ;;
-
- *) ;;
-esac
-
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source. The hook's purpose is to edit the commit
+# message file. If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output. It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited. This is rarely a good idea.
+
+case "$2,$3" in
+ merge,)
+ /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+# /usr/bin/perl -i.bak -pe '
+# print "\n" . `git diff --cached --name-status -r`
+# if /^#/ && $first++ == 0' "$1" ;;
+
+ *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
diff --git a/Resources/testrepo_wd/dot_git/hooks/update.sample b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/update.sample
index 71ab04ed..032fe11c 100644
--- a/Resources/testrepo_wd/dot_git/hooks/update.sample
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/hooks/update.sample
@@ -1,128 +1,128 @@
-#!/bin/sh
-#
-# An example hook script to blocks unannotated tags from entering.
-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
-#
-# To enable this hook, rename this file to "update".
-#
-# Config
-# ------
-# hooks.allowunannotated
-# This boolean sets whether unannotated tags will be allowed into the
-# repository. By default they won't be.
-# hooks.allowdeletetag
-# This boolean sets whether deleting tags will be allowed in the
-# repository. By default they won't be.
-# hooks.allowmodifytag
-# This boolean sets whether a tag may be modified after creation. By default
-# it won't be.
-# hooks.allowdeletebranch
-# This boolean sets whether deleting branches will be allowed in the
-# repository. By default they won't be.
-# hooks.denycreatebranch
-# This boolean sets whether remotely creating branches will be denied
-# in the repository. By default this is allowed.
-#
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
- echo "Don't run this script from the command line." >&2
- echo " (if you want, you could supply GIT_DIR then run" >&2
- echo " $0 <ref> <oldrev> <newrev>)" >&2
- exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
- echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
- exit 1
-fi
-
-# --- Config
-allowunannotated=$(git config --bool hooks.allowunannotated)
-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
-denycreatebranch=$(git config --bool hooks.denycreatebranch)
-allowdeletetag=$(git config --bool hooks.allowdeletetag)
-allowmodifytag=$(git config --bool hooks.allowmodifytag)
-
-# check for no description
-projectdesc=$(sed -e '1q' "$GIT_DIR/description")
-case "$projectdesc" in
-"Unnamed repository"* | "")
- echo "*** Project description file hasn't been set" >&2
- exit 1
- ;;
-esac
-
-# --- Check types
-# if $newrev is 0000...0000, it's a commit to delete a ref.
-zero="0000000000000000000000000000000000000000"
-if [ "$newrev" = "$zero" ]; then
- newrev_type=delete
-else
- newrev_type=$(git cat-file -t $newrev)
-fi
-
-case "$refname","$newrev_type" in
- refs/tags/*,commit)
- # un-annotated tag
- short_refname=${refname##refs/tags/}
- if [ "$allowunannotated" != "true" ]; then
- echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
- echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
- exit 1
- fi
- ;;
- refs/tags/*,delete)
- # delete tag
- if [ "$allowdeletetag" != "true" ]; then
- echo "*** Deleting a tag is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/tags/*,tag)
- # annotated tag
- if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
- then
- echo "*** Tag '$refname' already exists." >&2
- echo "*** Modifying a tag is not allowed in this repository." >&2
- exit 1
- fi
- ;;
- refs/heads/*,commit)
- # branch
- if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
- echo "*** Creating a branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/heads/*,delete)
- # delete branch
- if [ "$allowdeletebranch" != "true" ]; then
- echo "*** Deleting a branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/remotes/*,commit)
- # tracking branch
- ;;
- refs/remotes/*,delete)
- # delete tracking branch
- if [ "$allowdeletebranch" != "true" ]; then
- echo "*** Deleting a tracking branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- *)
- # Anything else (is there anything else?)
- echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
- exit 1
- ;;
-esac
-
-# --- Finished
-exit 0
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+# This boolean sets whether unannotated tags will be allowed into the
+# repository. By default they won't be.
+# hooks.allowdeletetag
+# This boolean sets whether deleting tags will be allowed in the
+# repository. By default they won't be.
+# hooks.allowmodifytag
+# This boolean sets whether a tag may be modified after creation. By default
+# it won't be.
+# hooks.allowdeletebranch
+# This boolean sets whether deleting branches will be allowed in the
+# repository. By default they won't be.
+# hooks.denycreatebranch
+# This boolean sets whether remotely creating branches will be denied
+# in the repository. By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+ exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+ echo "*** Project description file hasn't been set" >&2
+ exit 1
+ ;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+ newrev_type=delete
+else
+ newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+ refs/tags/*,commit)
+ # un-annotated tag
+ short_refname=${refname##refs/tags/}
+ if [ "$allowunannotated" != "true" ]; then
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,delete)
+ # delete tag
+ if [ "$allowdeletetag" != "true" ]; then
+ echo "*** Deleting a tag is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,tag)
+ # annotated tag
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+ then
+ echo "*** Tag '$refname' already exists." >&2
+ echo "*** Modifying a tag is not allowed in this repository." >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,commit)
+ # branch
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+ echo "*** Creating a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,delete)
+ # delete branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/remotes/*,commit)
+ # tracking branch
+ ;;
+ refs/remotes/*,delete)
+ # delete tracking branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ # Anything else (is there anything else?)
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+ exit 1
+ ;;
+esac
+
+# --- Finished
+exit 0
diff --git a/Resources/testrepo_wd/dot_git/index b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/index
index 4bfa29b9..4bfa29b9 100644
--- a/Resources/testrepo_wd/dot_git/index
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/index
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/info/exclude b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/info/exclude
index a5196d1b..f0068097 100644
--- a/Resources/testrepo_wd/dot_git/info/exclude
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/info/exclude
@@ -1,6 +1,6 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-# *.[oa]
-# *~
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/Resources/testrepo_wd/dot_git/logs/HEAD b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/HEAD
index 62217cbb..67120624 100644
--- a/Resources/testrepo_wd/dot_git/logs/HEAD
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/HEAD
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 4c062a6361ae6959e06292c1fa5e2822d9c96345 Tim Clem <timothy.clem@gmail.com> 1303768198 -0700 clone: from c:/GitHub/libgit2sharp/Resources/testrepo.git
-4c062a6361ae6959e06292c1fa5e2822d9c96345 592d3c869dbc4127fc57c189cb94f2794fa84e7e Tim Clem <timothy.clem@gmail.com> 1303835722 -0700 commit: add more test files
+0000000000000000000000000000000000000000 4c062a6361ae6959e06292c1fa5e2822d9c96345 Tim Clem <timothy.clem@gmail.com> 1303768198 -0700 clone: from c:/GitHub/libgit2sharp/Resources/testrepo.git
+4c062a6361ae6959e06292c1fa5e2822d9c96345 592d3c869dbc4127fc57c189cb94f2794fa84e7e Tim Clem <timothy.clem@gmail.com> 1303835722 -0700 commit: add more test files
diff --git a/Resources/testrepo_wd/dot_git/logs/refs/heads/master b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/refs/heads/master
index 62217cbb..67120624 100644
--- a/Resources/testrepo_wd/dot_git/logs/refs/heads/master
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/logs/refs/heads/master
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 4c062a6361ae6959e06292c1fa5e2822d9c96345 Tim Clem <timothy.clem@gmail.com> 1303768198 -0700 clone: from c:/GitHub/libgit2sharp/Resources/testrepo.git
-4c062a6361ae6959e06292c1fa5e2822d9c96345 592d3c869dbc4127fc57c189cb94f2794fa84e7e Tim Clem <timothy.clem@gmail.com> 1303835722 -0700 commit: add more test files
+0000000000000000000000000000000000000000 4c062a6361ae6959e06292c1fa5e2822d9c96345 Tim Clem <timothy.clem@gmail.com> 1303768198 -0700 clone: from c:/GitHub/libgit2sharp/Resources/testrepo.git
+4c062a6361ae6959e06292c1fa5e2822d9c96345 592d3c869dbc4127fc57c189cb94f2794fa84e7e Tim Clem <timothy.clem@gmail.com> 1303835722 -0700 commit: add more test files
diff --git a/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
index cedb2a22..cedb2a22 100644
--- a/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5
index ec005aa9..ec005aa9 100644
--- a/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
index 93a16f14..93a16f14 100644
--- a/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd
index ba0bfb30..ba0bfb30 100644
--- a/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
index 7ca4ceed..7ca4ceed 100644
--- a/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
index 8953b6ce..8953b6ce 100644
--- a/Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045
diff --git a/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
index 4d86b320..4d86b320 100644
--- a/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad
index ecaf0c6f..ecaf0c6f 100644
--- a/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
index 2ae13784..2ae13784 100644
--- a/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e
index 33d011c4..33d011c4 100644
--- a/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
index c1f22c54..c1f22c54 100644
--- a/Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644
diff --git a/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
index 2ef4faa0..2ef4faa0 100644
--- a/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
index 23c462f3..23c462f3 100644
--- a/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
index 7018c7f7..7018c7f7 100644
--- a/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
index 2f9b6b6e..2f9b6b6e 100644
--- a/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479
index 5df58dda..5df58dda 100644
--- a/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f
index eb5f7b23..eb5f7b23 100644
--- a/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550
index 3838bc7c..3838bc7c 100644
--- a/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3
index 809a22fa..809a22fa 100644
--- a/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
index a7961243..a7961243 100644
--- a/Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a
diff --git a/Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
index f8588696..f8588696 100644
--- a/Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f
diff --git a/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
index d0d7e736..d0d7e736 100644
--- a/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
index 18a7f61c..18a7f61c 100644
--- a/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
index f460f254..f460f254 100644
--- a/Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1
diff --git a/Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
index 0817229b..0817229b 100644
--- a/Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644
diff --git a/Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
index 75f541f1..75f541f1 100644
--- a/Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd
diff --git a/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2
index ad72e790..ad72e790 100644
--- a/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
index 71122389..71122389 100644
--- a/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577
index 1cccf654..1cccf654 100644
--- a/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
index 03770969..03770969 100644
--- a/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
index 112998d4..112998d4 100644
--- a/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765
index 12bf5f3e..12bf5f3e 100644
--- a/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
index 5068f281..5068f281 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
index a6a1f302..a6a1f302 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
index 94c3c71d..94c3c71d 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
index 74c7fe4f..74c7fe4f 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
index 555cfa97..555cfa97 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
index 4d539ed0..4d539ed0 100644
--- a/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
Binary files differ
diff --git a/Resources/testrepo_wd/dot_git/packed-refs b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/packed-refs
index 40db0d7b..1ab6ad52 100644
--- a/Resources/testrepo_wd/dot_git/packed-refs
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/packed-refs
@@ -1,10 +1,10 @@
-# pack-refs with: peeled
-b25fa35b38051e4ae45d4222e795f9df2e43f1d1 refs/tags/test
-^e90810b8df3e80c413d903f631643c716887138d
-e90810b8df3e80c413d903f631643c716887138d refs/tags/lw
-7b4384978d2493e851f9cca7858815fac9b10980 refs/tags/e90810b
-^e90810b8df3e80c413d903f631643c716887138d
-e90810b8df3e80c413d903f631643c716887138d refs/remotes/origin/test
-4a202b346bb0fb0db7eff3cffeb3c70babbd2045 refs/remotes/origin/packed-test
-4c062a6361ae6959e06292c1fa5e2822d9c96345 refs/remotes/origin/master
-a4a7dce85cf63874e984719f4fdd239f5145052f refs/remotes/origin/br2
+# pack-refs with: peeled
+b25fa35b38051e4ae45d4222e795f9df2e43f1d1 refs/tags/test
+^e90810b8df3e80c413d903f631643c716887138d
+e90810b8df3e80c413d903f631643c716887138d refs/tags/lw
+7b4384978d2493e851f9cca7858815fac9b10980 refs/tags/e90810b
+^e90810b8df3e80c413d903f631643c716887138d
+e90810b8df3e80c413d903f631643c716887138d refs/remotes/origin/test
+4a202b346bb0fb0db7eff3cffeb3c70babbd2045 refs/remotes/origin/packed-test
+4c062a6361ae6959e06292c1fa5e2822d9c96345 refs/remotes/origin/master
+a4a7dce85cf63874e984719f4fdd239f5145052f refs/remotes/origin/br2
diff --git a/Resources/testrepo_wd/dot_git/refs/heads/master b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/heads/master
index f436f16b..07848c3b 100644
--- a/Resources/testrepo_wd/dot_git/refs/heads/master
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/heads/master
@@ -1 +1 @@
-592d3c869dbc4127fc57c189cb94f2794fa84e7e
+592d3c869dbc4127fc57c189cb94f2794fa84e7e
diff --git a/Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD
index 6efe28ff..b827f0c4 100644
--- a/Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/refs/remotes/origin/HEAD
@@ -1 +1 @@
-ref: refs/remotes/origin/master
+ref: refs/remotes/origin/master
diff --git a/Resources/testrepo_wd/modified_staged_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/modified_staged_file.txt
index e68bcc7b..e68bcc7b 100644
--- a/Resources/testrepo_wd/modified_staged_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/modified_staged_file.txt
diff --git a/Resources/testrepo_wd/modified_unstaged_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/modified_unstaged_file.txt
index da6fd653..da6fd653 100644
--- a/Resources/testrepo_wd/modified_unstaged_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/modified_unstaged_file.txt
diff --git a/Resources/testrepo_wd/new.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/new.txt
index a71586c1..a71586c1 100644
--- a/Resources/testrepo_wd/new.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/new.txt
diff --git a/Resources/testrepo_wd/new_tracked_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/new_tracked_file.txt
index 935a81d3..935a81d3 100644
--- a/Resources/testrepo_wd/new_tracked_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/new_tracked_file.txt
diff --git a/Resources/testrepo_wd/new_untracked_file.txt b/LibGit2Sharp.Tests/Resources/testrepo_wd/new_untracked_file.txt
index d95f3ad1..d95f3ad1 100644
--- a/Resources/testrepo_wd/new_untracked_file.txt
+++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/new_untracked_file.txt
diff --git a/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs b/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs
index b6960278..b8e912c7 100644
--- a/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs
+++ b/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs
@@ -16,7 +16,7 @@ namespace LibGit2Sharp.Tests.TestHelpers
private static void SetUpTestEnvironment()
{
- var source = new DirectoryInfo(@"../../../Resources");
+ var source = new DirectoryInfo(@"../../Resources");
var target = new DirectoryInfo(@"Resources");
if (target.Exists)
diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs
index e2a4134d..636c0d41 100644
--- a/LibGit2Sharp/Core/NativeMethods.cs
+++ b/LibGit2Sharp/Core/NativeMethods.cs
@@ -232,6 +232,20 @@ namespace LibGit2Sharp.Core
int offset);
[DllImport(libgit2)]
+ public static extern int git_status_file(
+ out FileStatus statusflags,
+ RepositorySafeHandle repo,
+ [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))] string filepath);
+
+ internal delegate int status_callback(
+ [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))] string statuspath,
+ uint statusflags,
+ IntPtr payload);
+
+ [DllImport(libgit2)]
+ public static extern int git_status_foreach(RepositorySafeHandle repo, status_callback callback, IntPtr payload);
+
+ [DllImport(libgit2)]
public static extern int git_tag_create(
out GitOid oid,
RepositorySafeHandle repo,
diff --git a/LibGit2Sharp/Core/Utf8Marshaler.cs b/LibGit2Sharp/Core/Utf8Marshaler.cs
index 5f0ea487..5f454f79 100644
--- a/LibGit2Sharp/Core/Utf8Marshaler.cs
+++ b/LibGit2Sharp/Core/Utf8Marshaler.cs
@@ -44,10 +44,10 @@ namespace LibGit2Sharp.Core
var length = (int)(walk - (byte*)pNativeData);
// should not be null terminated
- var strbuf = new byte[length - 1];
+ var strbuf = new byte[length];
// skip the trailing null
- Marshal.Copy(pNativeData, strbuf, 0, length - 1);
+ Marshal.Copy(pNativeData, strbuf, 0, length);
string data = Encoding.UTF8.GetString(strbuf);
return data;
}
diff --git a/LibGit2Sharp/FileStatus.cs b/LibGit2Sharp/FileStatus.cs
new file mode 100644
index 00000000..b8dd951f
--- /dev/null
+++ b/LibGit2Sharp/FileStatus.cs
@@ -0,0 +1,44 @@
+using System;
+
+namespace LibGit2Sharp
+{
+ [Flags]
+ public enum FileStatus
+ {
+ Nonexistent = -1, /* GIT_STATUS_NOTFOUND */
+ Unaltered = 0, /* GIT_STATUS_CURRENT */
+
+ /// <summary>
+ /// New file has been added to the Index. It's unknown from the Head.
+ /// </summary>
+ Added = (1 << 0), /* GIT_STATUS_INDEX_NEW */
+
+ /// <summary>
+ /// New version of a file has been added to the Index. A previous version exists in the Head.
+ /// </summary>
+ Staged = (1 << 1), /* GIT_STATUS_INDEX_MODIFIED */
+
+ /// <summary>
+ /// The deletion of a file has been promoted from the working directory to the Index. A previous version exists in the Head.
+ /// </summary>
+ Removed = (1 << 2), /* GIT_STATUS_INDEX_DELETED */
+
+ /// <summary>
+ /// New file in the working directory, unknown from the Index and the Head.
+ /// </summary>
+ Untracked = (1 << 3), /* GIT_STATUS_WT_NEW */
+
+ /// <summary>
+ /// The file has been updated in the working directory. A previous version exists in the Index.
+ /// </summary>
+ Modified = (1 << 4), /* GIT_STATUS_WT_MODIFIED */
+
+ /// <summary>
+ /// The file has been deleted from the working directory. A previous version exists in the Index.
+ /// </summary>
+ Missing = (1 << 5), /* GIT_STATUS_WT_DELETED */
+
+ //TODO: Ignored files not handled yet
+ GIT_STATUS_IGNORED = (1 << 6), /* GIT_STATUS_IGNORED */
+ }
+}
diff --git a/LibGit2Sharp/Index.cs b/LibGit2Sharp/Index.cs
index faefc20e..539480ed 100644
--- a/LibGit2Sharp/Index.cs
+++ b/LibGit2Sharp/Index.cs
@@ -53,25 +53,10 @@ namespace LibGit2Sharp
get
{
IntPtr entryPtr = NativeMethods.git_index_get(handle, index);
- return IndexEntry.CreateFromPtr(entryPtr);
+ return IndexEntry.CreateFromPtr(repo, entryPtr);
}
}
- public IEnumerable<IndexEntry> Modified
- {
- get { throw new NotImplementedException(); }
- }
-
- public IEnumerable<IndexEntry> Staged
- {
- get { throw new NotImplementedException(); }
- }
-
- public IEnumerable<IndexEntry> Untracked
- {
- get { throw new NotImplementedException(); }
- }
-
#region IDisposable Members
/// <summary>
@@ -125,9 +110,7 @@ namespace LibGit2Sharp
{
Ensure.ArgumentNotNullOrEmptyString(path, "path");
- string relativePath = BuildRelativePathFrom(path);
-
- AddToIndex(relativePath);
+ AddToIndex(path);
UpdatePhysicalIndex();
}
@@ -136,7 +119,7 @@ namespace LibGit2Sharp
{
Ensure.ArgumentNotNullOrEmptyString(path, "path");
- string relativePath = BuildRelativePathFrom(path);
+ string relativePath = BuildRelativePathFrom(repo, path);
RemoveFromIndex(relativePath);
@@ -150,8 +133,8 @@ namespace LibGit2Sharp
Ensure.ArgumentNotNullOrEmptyString(sourcePath, "sourcepath");
Ensure.ArgumentNotNullOrEmptyString(destinationPath, "destinationpath");
- string relativeSourcePath = BuildRelativePathFrom(sourcePath);
- string relativeDestinationPath = BuildRelativePathFrom(destinationPath);
+ string relativeSourcePath = BuildRelativePathFrom(repo, sourcePath);
+ string relativeDestinationPath = BuildRelativePathFrom(repo, destinationPath);
string wd = repo.Info.WorkingDirectory;
if (Directory.Exists(Path.Combine(wd, relativeSourcePath)))
@@ -170,13 +153,13 @@ namespace LibGit2Sharp
private void AddToIndex(string path)
{
- int res = NativeMethods.git_index_add(handle, BuildRelativePathFrom(path));
+ int res = NativeMethods.git_index_add(handle, BuildRelativePathFrom(repo, path));
Ensure.Success(res);
}
- private void RemoveFromIndex(string relativePath)
+ private void RemoveFromIndex(string path)
{
- int res = NativeMethods.git_index_find(handle, relativePath);
+ int res = NativeMethods.git_index_find(handle, BuildRelativePathFrom(repo, path));
Ensure.Success(res, true);
res = NativeMethods.git_index_remove(handle, res);
@@ -201,7 +184,7 @@ namespace LibGit2Sharp
Ensure.Success(res);
}
- private string BuildRelativePathFrom(string path) //TODO: To be removed when libgit2 natively implements this
+ private static string BuildRelativePathFrom(Repository repo, string path) //TODO: To be removed when libgit2 natively implements this
{
if (!Path.IsPathRooted(path))
{
@@ -212,10 +195,34 @@ namespace LibGit2Sharp
if (!normalizedPath.StartsWith(repo.Info.WorkingDirectory, StringComparison.Ordinal))
{
- throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Unable to stage file '{0}'. This file is not located under the working directory of the repository ('{1}').", normalizedPath, repo.Info.WorkingDirectory));
+ throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Unable to process file '{0}'. This file is not located under the working directory of the repository ('{1}').", normalizedPath, repo.Info.WorkingDirectory));
}
return normalizedPath.Substring(repo.Info.WorkingDirectory.Length);
}
+
+ public FileStatus RetrieveStatus(string filePath)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(filePath, "filePath");
+
+ string relativePath = BuildRelativePathFrom(repo, filePath);
+
+ FileStatus status;
+
+ int res = NativeMethods.git_status_file(out status, repo.Handle, relativePath);
+ if (res == (int)GitErrorCode.GIT_ENOTFOUND)
+ {
+ return FileStatus.Nonexistent;
+ }
+
+ Ensure.Success(res);
+
+ return status;
+ }
+
+ public RepositoryStatus RetrieveStatus()
+ {
+ return new RepositoryStatus(repo.Handle);
+ }
}
}
diff --git a/LibGit2Sharp/IndexEntry.cs b/LibGit2Sharp/IndexEntry.cs
index ac368855..87441b64 100644
--- a/LibGit2Sharp/IndexEntry.cs
+++ b/LibGit2Sharp/IndexEntry.cs
@@ -6,18 +6,24 @@ namespace LibGit2Sharp
{
public class IndexEntry
{
- public IndexEntryState State { get; private set; }
+ private Func<FileStatus> state;
+
+ public FileStatus State
+ {
+ get { return state(); }
+ }
public string Path { get; private set; }
public ObjectId Id { get; private set; }
- internal static IndexEntry CreateFromPtr(IntPtr ptr)
+ internal static IndexEntry CreateFromPtr(Repository repo, IntPtr ptr)
{
var entry = (GitIndexEntry)Marshal.PtrToStructure(ptr, typeof(GitIndexEntry));
return new IndexEntry
{
Path = entry.Path,
Id = new ObjectId(entry.oid),
+ state = () => repo.Index.RetrieveStatus(entry.Path)
};
}
}
diff --git a/LibGit2Sharp/IndexEntryState.cs b/LibGit2Sharp/IndexEntryState.cs
deleted file mode 100644
index 4f44b1d2..00000000
--- a/LibGit2Sharp/IndexEntryState.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace LibGit2Sharp
-{
- public enum IndexEntryState
- {
- NotModified,
- NewUntracked,
- NewStaged,
- ModifiedUnstaged,
- ModifiedStaged,
- RemovedUnstaged,
- RemovedStaged,
- }
-}
diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj
index 5f85c225..0e2c0368 100644
--- a/LibGit2Sharp/LibGit2Sharp.csproj
+++ b/LibGit2Sharp/LibGit2Sharp.csproj
@@ -59,6 +59,7 @@
<Compile Include="Core\GitReferenceType.cs" />
<Compile Include="Core\GitRepositoryPathId.cs" />
<Compile Include="Core\GitSignature.cs" />
+ <Compile Include="FileStatus.cs" />
<Compile Include="Core\GitTime.cs" />
<Compile Include="Core\IntPtrExtensions.cs" />
<Compile Include="Core\Lazy.cs" />
@@ -85,7 +86,6 @@
<Compile Include="Index.cs" />
<Compile Include="IndexEntry.cs" />
<Compile Include="Core\IndexSafeHandle.cs" />
- <Compile Include="IndexEntryState.cs" />
<Compile Include="Filter.cs" />
<Compile Include="IQueryableCommitCollection.cs" />
<Compile Include="ObjectId.cs" />
@@ -98,7 +98,9 @@
<Compile Include="RepositoryInformation.cs" />
<Compile Include="RepositoryExtensions.cs" />
<Compile Include="Core\RepositorySafeHandle.cs" />
+ <Compile Include="RepositoryStatus.cs" />
<Compile Include="Signature.cs" />
+ <Compile Include="StatusEntry.cs" />
<Compile Include="SymbolicReference.cs" />
<Compile Include="Tag.cs" />
<Compile Include="TagAnnotation.cs" />
diff --git a/LibGit2Sharp/RepositoryStatus.cs b/LibGit2Sharp/RepositoryStatus.cs
new file mode 100644
index 00000000..ba3ae792
--- /dev/null
+++ b/LibGit2Sharp/RepositoryStatus.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using LibGit2Sharp.Core;
+
+namespace LibGit2Sharp
+{
+ /// <summary>
+ /// Holds the result of the determination of the state of the working directory.
+ /// <para>Only files that differ from the current index and/or commit will be considered.</para>
+ /// </summary>
+ public class RepositoryStatus : IEnumerable<StatusEntry>
+ {
+ private readonly List<StatusEntry> statusEntries = new List<StatusEntry>();
+ private readonly List<string> added = new List<string>();
+ private readonly List<string> staged = new List<string>();
+ private readonly List<string> removed = new List<string>();
+ private readonly List<string> missing = new List<string>();
+ private readonly List<string> modified = new List<string>();
+ private readonly List<string> untracked = new List<string>();
+ private readonly bool isDirty;
+
+ private readonly NativeMethods.status_callback callback;
+
+ private readonly IDictionary<FileStatus, Action<RepositoryStatus, string>> dispatcher = Build();
+
+ private static IDictionary<FileStatus, Action<RepositoryStatus, string>> Build()
+ {
+ return new Dictionary<FileStatus, Action<RepositoryStatus, string>>
+ {
+ { FileStatus.Untracked, (rs, s) => rs.untracked.Add(s) },
+ { FileStatus.Modified, (rs, s) => rs.modified.Add(s) },
+ { FileStatus.Missing, (rs, s) => rs.missing.Add(s) },
+ { FileStatus.Added, (rs, s) => rs.added.Add(s) },
+ { FileStatus.Staged, (rs, s) => rs.staged.Add(s) },
+ { FileStatus.Removed, (rs, s) => rs.removed.Add(s) },
+ };
+ }
+
+ internal RepositoryStatus(RepositorySafeHandle handle)
+ {
+ callback = new NativeMethods.status_callback(StateChanged);
+ Process(handle);
+ isDirty = statusEntries.Count != 0;
+ }
+
+ private void Process(RepositorySafeHandle handle)
+ {
+ int res = NativeMethods.git_status_foreach(handle, callback, IntPtr.Zero);
+ Ensure.Success(res);
+ }
+
+ private int StateChanged(string filePath, uint state, IntPtr payload)
+ {
+ var gitStatus = (FileStatus)state;
+ statusEntries.Add(new StatusEntry(filePath, gitStatus));
+
+ foreach (KeyValuePair<FileStatus, Action<RepositoryStatus, string>> kvp in dispatcher)
+ {
+ if ((gitStatus & kvp.Key) != kvp.Key)
+ {
+ continue;
+ }
+
+ kvp.Value(this, filePath);
+ }
+
+ return 0;
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through the collection.
+ /// </summary>
+ /// <returns>An <see cref = "IEnumerator{T}" /> object that can be used to iterate through the collection.</returns>
+ public IEnumerator<StatusEntry> GetEnumerator()
+ {
+ return statusEntries.GetEnumerator();
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through the collection.
+ /// </summary>
+ /// <returns>An <see cref = "IEnumerator" /> object that can be used to iterate through the collection.</returns>
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ /// <summary>
+ /// List of files added to the index, which are not in the current commit
+ /// </summary>
+ public IEnumerable<string> Added
+ {
+ get { return added; }
+ }
+
+ /// <summary>
+ /// List of files added to the index, which are already in the current commit with different content
+ /// </summary>
+ public IEnumerable<string> Staged
+ {
+ get { return staged; }
+ }
+
+ /// <summary>
+ /// List of files removed from the index but are existent in the current commit
+ /// </summary>
+ public IEnumerable<string> Removed
+ {
+ get { return removed; }
+ }
+
+ /// <summary>
+ /// List of files existent in the index but are missing in the working directory
+ /// </summary>
+ public IEnumerable<string> Missing
+ {
+ get { return missing; }
+ }
+
+ /// <summary>
+ /// List of files with unstaged modifications. A file may be modified and staged at the same time if it has been modified after adding.
+ /// </summary>
+ public IEnumerable<string> Modified
+ {
+ get { return modified; }
+ }
+
+ /// <summary>
+ /// List of files existing in the working directory but are neither tracked in the index nor in the current commit.
+ /// </summary>
+ public IEnumerable<string> Untracked
+ {
+ get { return untracked; }
+ }
+
+ /// <summary>
+ /// True if the index or the working directory has been altered since the last commit. False otherwise.
+ /// </summary>
+ public bool IsDirty
+ {
+ get { return isDirty; }
+ }
+ }
+}
diff --git a/LibGit2Sharp/StatusEntry.cs b/LibGit2Sharp/StatusEntry.cs
new file mode 100644
index 00000000..b1695ea3
--- /dev/null
+++ b/LibGit2Sharp/StatusEntry.cs
@@ -0,0 +1,81 @@
+using System;
+using LibGit2Sharp.Core;
+
+namespace LibGit2Sharp
+{
+ public class StatusEntry : IEquatable<StatusEntry>
+ {
+ private readonly string filePath;
+ private readonly FileStatus state;
+
+ private static readonly LambdaEqualityHelper<StatusEntry> equalityHelper =
+ new LambdaEqualityHelper<StatusEntry>(new Func<StatusEntry, object>[] { x => x.FilePath, x => x.State });
+
+ internal StatusEntry(string filePath, FileStatus state)
+ {
+ this.filePath = filePath;
+ this.state = state;
+ }
+
+ public FileStatus State
+ {
+ get { return state; }
+ }
+
+ public string FilePath
+ {
+ get { return filePath; }
+ }
+
+ /// <summary>
+ /// Determines whether the specified <see cref = "Object" /> is equal to the current <see cref = "StatusEntry" />.
+ /// </summary>
+ /// <param name = "obj">The <see cref = "Object" /> to compare with the current <see cref = "StatusEntry" />.</param>
+ /// <returns>True if the specified <see cref = "Object" /> is equal to the current <see cref = "StatusEntry" />; otherwise, false.</returns>
+ public override bool Equals(object obj)
+ {
+ return Equals(obj as StatusEntry);
+ }
+
+ /// <summary>
+ /// Determines whether the specified <see cref = "StatusEntry" /> is equal to the current <see cref = "StatusEntry" />.
+ /// </summary>
+ /// <param name = "other">The <see cref = "StatusEntry" /> to compare with the current <see cref = "StatusEntry" />.</param>
+ /// <returns>True if the specified <see cref = "StatusEntry" /> is equal to the current <see cref = "StatusEntry" />; otherwise, false.</returns>
+ public bool Equals(StatusEntry other)
+ {
+ return equalityHelper.Equals(this, other);
+ }
+
+ /// <summary>
+ /// Returns the hash code for this instance.
+ /// </summary>
+ /// <returns>A 32-bit signed integer hash code.</returns>
+ public override int GetHashCode()
+ {
+ return equalityHelper.GetHashCode(this);
+ }
+
+ /// <summary>
+ /// Tests if two <see cref = "StatusEntry" /> are equal.
+ /// </summary>
+ /// <param name = "left">First <see cref = "StatusEntry" /> to compare.</param>
+ /// <param name = "right">Second <see cref = "StatusEntry" /> to compare.</param>
+ /// <returns>True if the two objects are equal; false otherwise.</returns>
+ public static bool operator ==(StatusEntry left, StatusEntry right)
+ {
+ return Equals(left, right);
+ }
+
+ /// <summary>
+ /// Tests if two <see cref = "StatusEntry" /> are different.
+ /// </summary>
+ /// <param name = "left">First <see cref = "StatusEntry" /> to compare.</param>
+ /// <param name = "right">Second <see cref = "StatusEntry" /> to compare.</param>
+ /// <returns>True if the two objects are different; false otherwise.</returns>
+ public static bool operator !=(StatusEntry left, StatusEntry right)
+ {
+ return !Equals(left, right);
+ }
+ }
+}