diff options
author | Jameson Miller <jamill@microsoft.com> | 2015-01-21 21:59:52 +0300 |
---|---|---|
committer | Jameson Miller <jamill@microsoft.com> | 2015-01-25 23:54:43 +0300 |
commit | 554b55c57d8ad24a67034f4d87da506277626004 (patch) | |
tree | 4460d482dcb43f4cbe6d7a30b7eb73f7a9d730a2 /LibGit2Sharp.Tests | |
parent | 5de56d4dacbc65db20ebae3784abc8262c0dfcd7 (diff) |
Introduce submodule Update and Init
Diffstat (limited to 'LibGit2Sharp.Tests')
15 files changed, 157 insertions, 0 deletions
diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/.gitmodules b/LibGit2Sharp.Tests/Resources/submodule_small_wd/.gitmodules new file mode 100644 index 00000000..70b60cce --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/.gitmodules @@ -0,0 +1,3 @@ +[submodule "submodule_target_wd"]
+ path = submodule_target_wd
+ url = ../submodule_target_wd
diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/HEAD b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/config b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/config new file mode 100644 index 00000000..78387c50 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/config @@ -0,0 +1,8 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true + hideDotFiles = dotGitOnly diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/description b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/index b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/index Binary files differnew file mode 100644 index 00000000..6dbbec61 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/index diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/info/exclude b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/info/exclude @@ -0,0 +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] +# *~ diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/07/406ba95d0a865a508910605a0c7d7a773705f6 b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/07/406ba95d0a865a508910605a0c7d7a773705f6 Binary files differnew file mode 100644 index 00000000..f6a8cc08 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/07/406ba95d0a865a508910605a0c7d7a773705f6 diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/31/be1072bafa80f8b4386eb35b90e284d9ee672d b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/31/be1072bafa80f8b4386eb35b90e284d9ee672d Binary files differnew file mode 100644 index 00000000..ad7bc249 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/31/be1072bafa80f8b4386eb35b90e284d9ee672d diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/63/2218a6cacefe3b49ed111704df72ea7b08b4d5 b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/63/2218a6cacefe3b49ed111704df72ea7b08b4d5 Binary files differnew file mode 100644 index 00000000..c136428d --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/63/2218a6cacefe3b49ed111704df72ea7b08b4d5 diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/75/df0ce58d6436371c3c2271649a03f540f30fd6 b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/75/df0ce58d6436371c3c2271649a03f540f30fd6 Binary files differnew file mode 100644 index 00000000..9180f5e3 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/75/df0ce58d6436371c3c2271649a03f540f30fd6 diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/7d/3aeaa887efe60fb664ba92a203a4fb50249f5b b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/7d/3aeaa887efe60fb664ba92a203a4fb50249f5b Binary files differnew file mode 100644 index 00000000..ff8693e3 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/7d/3aeaa887efe60fb664ba92a203a4fb50249f5b diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/alternate b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/alternate new file mode 100644 index 00000000..60990de6 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/alternate @@ -0,0 +1 @@ +31be1072bafa80f8b4386eb35b90e284d9ee672d diff --git a/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/master b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/master new file mode 100644 index 00000000..92841473 --- /dev/null +++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/master @@ -0,0 +1 @@ +7d3aeaa887efe60fb664ba92a203a4fb50249f5b diff --git a/LibGit2Sharp.Tests/SubmoduleFixture.cs b/LibGit2Sharp.Tests/SubmoduleFixture.cs index e66961dd..9f598c5a 100644 --- a/LibGit2Sharp.Tests/SubmoduleFixture.cs +++ b/LibGit2Sharp.Tests/SubmoduleFixture.cs @@ -151,5 +151,129 @@ namespace LibGit2Sharp.Tests Assert.Equal(SubmoduleStatus.IndexModified, statusAfter & SubmoduleStatus.IndexModified); } } + + [Fact] + public void CanInitSubmodule() + { + var path = SandboxSubmoduleSmallTestRepo(); + string submoduleName = "submodule_target_wd"; + string expectedSubmodulePath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(path), submoduleName)); + string expectedSubmoduleUrl = expectedSubmodulePath.Replace('\\', '/'); + + using (var repo = new Repository(path)) + { + var submodule = repo.Submodules[submoduleName]; + + Assert.NotNull(submodule); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirUninitialized)); + + var configEntryBeforeInit = repo.Config.Get<string>(string.Format("submodule.{0}.url", submoduleName)); + Assert.Null(configEntryBeforeInit); + + repo.Submodules.Init(submodule.Name, false); + + var configEntryAfterInit = repo.Config.Get<string>(string.Format("submodule.{0}.url", submoduleName)); + Assert.NotNull(configEntryAfterInit); + Assert.Equal(expectedSubmoduleUrl, configEntryAfterInit.Value); + } + } + + [Fact] + public void UpdatingUninitializedSubmoduleThrows() + { + var path = SandboxSubmoduleSmallTestRepo(); + string submoduleName = "submodule_target_wd"; + + using (var repo = new Repository(path)) + { + var submodule = repo.Submodules[submoduleName]; + + Assert.NotNull(submodule); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirUninitialized)); + + Assert.Throws<LibGit2SharpException>(() => repo.Submodules.Update(submodule.Name, new SubmoduleUpdateOptions())); + } + } + + [Fact] + public void CanUpdateSubmodule() + { + var path = SandboxSubmoduleSmallTestRepo(); + string submoduleName = "submodule_target_wd"; + + using (var repo = new Repository(path)) + { + var submodule = repo.Submodules[submoduleName]; + + Assert.NotNull(submodule); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirUninitialized)); + + repo.Submodules.Init(submodule.Name, false); + repo.Submodules.Update(submodule.Name, new SubmoduleUpdateOptions()); + + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.InWorkDir)); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.HeadCommitId); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.IndexCommitId); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.WorkDirCommitId); + } + } + + [Fact] + public void CanInitializeAndUpdateSubmodule() + { + var path = SandboxSubmoduleSmallTestRepo(); + string submoduleName = "submodule_target_wd"; + + using (var repo = new Repository(path)) + { + var submodule = repo.Submodules[submoduleName]; + + Assert.NotNull(submodule); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirUninitialized)); + + repo.Submodules.Update(submodule.Name, new SubmoduleUpdateOptions() { Init = true }); + + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.InWorkDir)); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.HeadCommitId); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.IndexCommitId); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.WorkDirCommitId); + } + } + + [Fact] + public void CanUpdateSubmoduleAfterCheckout() + { + var path = SandboxSubmoduleSmallTestRepo(); + string submoduleName = "submodule_target_wd"; + + using (var repo = new Repository(path)) + { + var submodule = repo.Submodules[submoduleName]; + + Assert.NotNull(submodule); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirUninitialized)); + + repo.Submodules.Init(submodule.Name, false); + repo.Submodules.Update(submodule.Name, new SubmoduleUpdateOptions()); + + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.InWorkDir)); + + repo.Checkout("alternate"); + Assert.True(submodule.RetrieveStatus().HasFlag(SubmoduleStatus.WorkDirModified)); + + submodule = repo.Submodules[submoduleName]; + + Assert.Equal((ObjectId)"5e4963595a9774b90524d35a807169049de8ccad", submodule.HeadCommitId); + Assert.Equal((ObjectId)"5e4963595a9774b90524d35a807169049de8ccad", submodule.IndexCommitId); + Assert.Equal((ObjectId)"480095882d281ed676fe5b863569520e54a7d5c0", submodule.WorkDirCommitId); + + repo.Submodules.Update(submodule.Name, new SubmoduleUpdateOptions()); + submodule = repo.Submodules[submoduleName]; + + Assert.Equal((ObjectId)"5e4963595a9774b90524d35a807169049de8ccad", submodule.HeadCommitId); + Assert.Equal((ObjectId)"5e4963595a9774b90524d35a807169049de8ccad", submodule.IndexCommitId); + Assert.Equal((ObjectId)"5e4963595a9774b90524d35a807169049de8ccad", submodule.WorkDirCommitId); + } + } } } diff --git a/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs b/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs index ed60c217..08f068c8 100644 --- a/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs +++ b/LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs @@ -40,6 +40,8 @@ namespace LibGit2Sharp.Tests.TestHelpers public static string SubmoduleTestRepoWorkingDirPath { get; private set; } private static string SubmoduleTargetTestRepoWorkingDirPath { get; set; } private static string AssumeUnchangedRepoWorkingDirPath { get; set; } + private static string SubmoduleSmallTestRepoWorkingDirPath { get; set; } + public static DirectoryInfo ResourcesDirectory { get; private set; } public static bool IsFileSystemCaseSensitive { get; private set; } @@ -69,6 +71,7 @@ namespace LibGit2Sharp.Tests.TestHelpers SubmoduleTestRepoWorkingDirPath = Path.Combine(sourceRelativePath, "submodule_wd"); SubmoduleTargetTestRepoWorkingDirPath = Path.Combine(sourceRelativePath, "submodule_target_wd"); AssumeUnchangedRepoWorkingDirPath = Path.Combine(sourceRelativePath, "assume_unchanged_wd"); + SubmoduleSmallTestRepoWorkingDirPath = Path.Combine(ResourcesDirectory.FullName, "submodule_small_wd"); } private static bool IsFileSystemCaseSensitiveInternal() @@ -153,6 +156,15 @@ namespace LibGit2Sharp.Tests.TestHelpers { return Sandbox(AssumeUnchangedRepoWorkingDirPath); } + + public string SandboxSubmoduleSmallTestRepo() + { + var submoduleTarget = Path.Combine(ResourcesDirectory.FullName, "submodule_target_wd"); + var path = Sandbox(SubmoduleSmallTestRepoWorkingDirPath, submoduleTarget); + Directory.CreateDirectory(Path.Combine(path, "submodule_target_wd")); + + return path; + } protected string Sandbox(string sourceDirectoryPath, params string[] additionalSourcePaths) { |