diff options
author | nulltoken <emeric.fermas@gmail.com> | 2011-09-20 18:01:24 +0400 |
---|---|---|
committer | Emeric Fermas <emeric.fermas@gmail.com> | 2011-09-29 02:01:59 +0400 |
commit | 02dbc31a91fa7dccebf7cda33f24dc768fefbb17 (patch) | |
tree | 9e5bbbf70fef8763e2fa4cc363a3fd16a30d6706 | |
parent | f25065331a0fafe4ccaefdff109536252169e385 (diff) |
Add determination of repository status
- Doesn't handle line endings conversion
- Doesn't honor .gitignore
- Test repositories have been moved under LibGit2Sharp.Tests
- .gitattributes file has been added to prevent unexpected line endings conversion of the test repositories files
Should fix issue #49.
-rw-r--r-- | LibGit2Sharp.Tests/IndexFixture.cs | 167 | ||||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/.gitattributes | 1 | ||||
-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) | bin | 10041 -> 10041 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 (renamed from Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08) | bin | 19 -> 19 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 (renamed from Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7) | bin | 51 -> 51 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd (renamed from Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd) | bin | 119 -> 119 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 (renamed from Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057) | bin | 18 -> 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) | bin | 162 -> 162 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 (renamed from Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5) | bin | 146 -> 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) | bin | 119 -> 119 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 (renamed from Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980) | bin | 145 -> 145 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f (renamed from Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f) | bin | 60 -> 60 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d (renamed from Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d) | bin | 82 -> 82 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 (renamed from Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479) | bin | 126 -> 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) | bin | 28 -> 28 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 (renamed from Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6) | bin | 26 -> 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) | bin | 15 -> 15 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 (renamed from Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1) | bin | 82 -> 82 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 (renamed from Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92) | bin | 24 -> 24 bytes | |||
-rw-r--r-- | LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 (renamed from Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765) | bin | 82 -> 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) | bin | 46656 -> 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) | bin | 386089 -> 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) | bin | 1240 -> 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) | bin | 491 -> 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) | bin | 1240 -> 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) | bin | 498 -> 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) | bin | 696 -> 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) | bin | 19 -> 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) | bin | 28 -> 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) | bin | 51 -> 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) | bin | 119 -> 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) | bin | 18 -> 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) | bin | 162 -> 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) | bin | 22 -> 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) | bin | 146 -> 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) | bin | 166 -> 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) | bin | 119 -> 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) | bin | 145 -> 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) | bin | 60 -> 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) | bin | 82 -> 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) | bin | 126 -> 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) | bin | 270 -> 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) | bin | 31 -> 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) | bin | 27 -> 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) | bin | 28 -> 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) | bin | 26 -> 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) | bin | 37 -> 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) | bin | 15 -> 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) | bin | 21 -> 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) | bin | 82 -> 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) | bin | 24 -> 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) | bin | 82 -> 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) | bin | 46656 -> 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) | bin | 386089 -> 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) | bin | 1240 -> 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) | bin | 491 -> 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) | bin | 1240 -> 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) | bin | 498 -> 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.cs | 2 | ||||
-rw-r--r-- | LibGit2Sharp/Core/NativeMethods.cs | 14 | ||||
-rw-r--r-- | LibGit2Sharp/Core/Utf8Marshaler.cs | 4 | ||||
-rw-r--r-- | LibGit2Sharp/FileStatus.cs | 44 | ||||
-rw-r--r-- | LibGit2Sharp/Index.cs | 61 | ||||
-rw-r--r-- | LibGit2Sharp/IndexEntry.cs | 10 | ||||
-rw-r--r-- | LibGit2Sharp/IndexEntryState.cs | 13 | ||||
-rw-r--r-- | LibGit2Sharp/LibGit2Sharp.csproj | 4 | ||||
-rw-r--r-- | LibGit2Sharp/RepositoryStatus.cs | 145 | ||||
-rw-r--r-- | LibGit2Sharp/StatusEntry.cs | 81 |
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 Binary files differindex a27fb9c9..a27fb9c9 100644 --- a/Resources/testrepo.git/index +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/index diff --git a/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 Binary files differindex cedb2a22..cedb2a22 100644 --- a/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 diff --git a/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 Binary files differindex 93a16f14..93a16f14 100644 --- a/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 diff --git a/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd Binary files differindex ba0bfb30..ba0bfb30 100644 --- a/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd diff --git a/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 Binary files differindex 7ca4ceed..7ca4ceed 100644 --- a/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 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 Binary files differindex 4d86b320..4d86b320 100644 --- a/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 diff --git a/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 Binary files differindex 2ae13784..2ae13784 100644 --- a/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 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 Binary files differindex 2ef4faa0..2ef4faa0 100644 --- a/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a diff --git a/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 Binary files differindex 23c462f3..23c462f3 100644 --- a/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 diff --git a/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f Binary files differindex 7018c7f7..7018c7f7 100644 --- a/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f diff --git a/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d Binary files differindex 2f9b6b6e..2f9b6b6e 100644 --- a/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d diff --git a/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 Binary files differindex 5df58dda..5df58dda 100644 --- a/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 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 Binary files differindex d0d7e736..d0d7e736 100644 --- a/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd diff --git a/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 Binary files differindex 18a7f61c..18a7f61c 100644 --- a/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 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 Binary files differindex 71122389..71122389 100644 --- a/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 Binary files differindex 03770969..03770969 100644 --- a/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 diff --git a/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 Binary files differindex 112998d4..112998d4 100644 --- a/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 diff --git a/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 Binary files differindex 12bf5f3e..12bf5f3e 100644 --- a/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 diff --git a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx Binary files differindex 5068f281..5068f281 100644 --- a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx diff --git a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack Binary files differindex a6a1f302..a6a1f302 100644 --- a/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack diff --git a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx Binary files differindex 94c3c71d..94c3c71d 100644 --- a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx diff --git a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack Binary files differindex 74c7fe4f..74c7fe4f 100644 --- a/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack diff --git a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx Binary files differindex 555cfa97..555cfa97 100644 --- a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx diff --git a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack Binary files differindex 4d539ed0..4d539ed0 100644 --- a/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack +++ b/LibGit2Sharp.Tests/Resources/testrepo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack 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 Binary files differindex 4bfa29b9..4bfa29b9 100644 --- a/Resources/testrepo_wd/dot_git/index +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/index 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 Binary files differindex cedb2a22..cedb2a22 100644 --- a/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 diff --git a/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 Binary files differindex ec005aa9..ec005aa9 100644 --- a/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/15/d2ecc60893449f4fe4593dd51a4706dec212f5 diff --git a/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 Binary files differindex 93a16f14..93a16f14 100644 --- a/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 diff --git a/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd Binary files differindex ba0bfb30..ba0bfb30 100644 --- a/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/18/10dff58d8a660512d4832e740f692884338ccd diff --git a/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 Binary files differindex 7ca4ceed..7ca4ceed 100644 --- a/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 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 Binary files differindex 4d86b320..4d86b320 100644 --- a/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/4c/062a6361ae6959e06292c1fa5e2822d9c96345 diff --git a/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad Binary files differindex ecaf0c6f..ecaf0c6f 100644 --- a/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/56/05472eb48cb4e60b5aa8810cc5ec8138026fad diff --git a/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 Binary files differindex 2ae13784..2ae13784 100644 --- a/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/58/1f9824ecaf824221bd36edf5430f2739a7c4f5 diff --git a/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e Binary files differindex 33d011c4..33d011c4 100644 --- a/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/59/2d3c869dbc4127fc57c189cb94f2794fa84e7e 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 Binary files differindex 2ef4faa0..2ef4faa0 100644 --- a/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a diff --git a/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 Binary files differindex 23c462f3..23c462f3 100644 --- a/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 diff --git a/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f Binary files differindex 7018c7f7..7018c7f7 100644 --- a/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/7f/76480d939dc401415927ea7ef25c676b8ddb8f diff --git a/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d Binary files differindex 2f9b6b6e..2f9b6b6e 100644 --- a/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d diff --git a/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 Binary files differindex 5df58dda..5df58dda 100644 --- a/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/96071c1b46c854b31185ea97743be6a8774479 diff --git a/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f Binary files differindex eb5f7b23..eb5f7b23 100644 --- a/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/84/9f67c87f926a81af895fc037c04ad85549d73f diff --git a/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 Binary files differindex 3838bc7c..3838bc7c 100644 --- a/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/92/17230e462ada4319e332e2a4b2d325c2d60550 diff --git a/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 Binary files differindex 809a22fa..809a22fa 100644 --- a/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/93/5a81d39fd68adb3b7ba3fc60c9663f326435e3 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 Binary files differindex d0d7e736..d0d7e736 100644 --- a/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd diff --git a/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 Binary files differindex 18a7f61c..18a7f61c 100644 --- a/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 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 Binary files differindex ad72e790..ad72e790 100644 --- a/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/8bcc7b5d6370fac1ea9929f4b6982a4ebb99a2 diff --git a/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 Binary files differindex 71122389..71122389 100644 --- a/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 Binary files differindex 1cccf654..1cccf654 100644 --- a/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f2/e41136eac73c39554dede1fd7e67b12502d577 diff --git a/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 Binary files differindex 03770969..03770969 100644 --- a/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 diff --git a/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 Binary files differindex 112998d4..112998d4 100644 --- a/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 diff --git a/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 Binary files differindex 12bf5f3e..12bf5f3e 100644 --- a/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 +++ b/LibGit2Sharp.Tests/Resources/testrepo_wd/dot_git/objects/fd/093bff70906175335656e6ce6ae05783708765 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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); + } + } +} |