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

github.com/mono/libgit2sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJameson Miller <jamill@microsoft.com>2015-01-21 21:59:52 +0300
committerJameson Miller <jamill@microsoft.com>2015-01-25 23:54:43 +0300
commit554b55c57d8ad24a67034f4d87da506277626004 (patch)
tree4460d482dcb43f4cbe6d7a30b7eb73f7a9d730a2 /LibGit2Sharp.Tests
parent5de56d4dacbc65db20ebae3784abc8262c0dfcd7 (diff)
Introduce submodule Update and Init
Diffstat (limited to 'LibGit2Sharp.Tests')
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/.gitmodules3
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/HEAD1
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/config8
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/description1
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/indexbin0 -> 200 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/info/exclude6
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/07/406ba95d0a865a508910605a0c7d7a773705f6bin0 -> 65 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/31/be1072bafa80f8b4386eb35b90e284d9ee672dbin0 -> 173 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/63/2218a6cacefe3b49ed111704df72ea7b08b4d5bin0 -> 97 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/75/df0ce58d6436371c3c2271649a03f540f30fd6bin0 -> 97 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/7d/3aeaa887efe60fb664ba92a203a4fb50249f5bbin0 -> 134 bytes
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/alternate1
-rw-r--r--LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/refs/heads/master1
-rw-r--r--LibGit2Sharp.Tests/SubmoduleFixture.cs124
-rw-r--r--LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs12
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
new file mode 100644
index 00000000..6dbbec61
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/index
Binary files differ
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
new file mode 100644
index 00000000..f6a8cc08
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/07/406ba95d0a865a508910605a0c7d7a773705f6
Binary files differ
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
new file mode 100644
index 00000000..ad7bc249
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/31/be1072bafa80f8b4386eb35b90e284d9ee672d
Binary files differ
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
new file mode 100644
index 00000000..c136428d
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/63/2218a6cacefe3b49ed111704df72ea7b08b4d5
Binary files differ
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
new file mode 100644
index 00000000..9180f5e3
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/75/df0ce58d6436371c3c2271649a03f540f30fd6
Binary files differ
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
new file mode 100644
index 00000000..ff8693e3
--- /dev/null
+++ b/LibGit2Sharp.Tests/Resources/submodule_small_wd/dot_git/objects/7d/3aeaa887efe60fb664ba92a203a4fb50249f5b
Binary files differ
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)
{