public void pull() { //a pull into a bare repo doesn't work var result_RemoteAdd1 = nGit2.remote_Add("origin", repoPath1);//.pathCombine(".git")); var result_Pull_Origin1 = nGit2.pull(); Assert.IsNotNull(nGit2.Last_Exception); if (nGit2.Last_Exception is InvalidConfigurationException) // it was failing on TeamCity { Assert.Ignore("Ignoring test because there was an InvalidConfigurationException on ngit2.pull()"); } Assert.IsInstanceOf <TransportException>(nGit2.Last_Exception); Assert.AreEqual(nGit2.Last_Exception.Message, "Nothing to fetch."); Assert.IsTrue(result_RemoteAdd1); Assert.IsFalse(result_Pull_Origin1); //Do a pull from a clone var repoPath3 = "repo3".tempDir(); var repo1_File = nGit1.files_FullPath().first(); repoPath3.delete_Folder(); var head_Repo1 = nGit1.head(); var nGit3 = repoPath1.git_Clone(repoPath3); var files_AfterClone = nGit3.files_FullPath(); var head_AfterClone = nGit3.head(); var repo3_File = nGit3.files_FullPath().first(); Assert.IsTrue(repoPath3.isGitRepository()); Assert.IsNotEmpty(files_AfterClone); Assert.AreEqual(head_AfterClone, head_Repo1); Assert.IsTrue(repo3_File.fileExists()); Assert.AreEqual(repo3_File.fileContents(), repo1_File.fileContents()); Assert.AreEqual("", nGit1.status()); Assert.AreEqual("", nGit3.status()); //do a change on repo1 var newContent = 10.randomLetters(); newContent.saveAs(repo1_File); Assert.AreNotEqual("", nGit1.status()); nGit1.add_and_Commit_using_Status(); Assert.AreEqual("", nGit3.status()); Assert.AreEqual(1, nGit3.commits().size()); Assert.AreEqual(2, nGit1.commits().size()); Assert.AreNotEqual(repo3_File.fileContents(), repo1_File.fileContents()); var result_Pull = nGit3.pull(); var mergeResult = nGit3.Last_PullResult.GetMergeResult(); Assert.IsTrue(result_Pull); Assert.AreEqual(repo3_File.fileContents(), repo1_File.fileContents()); Assert.AreEqual(2, nGit1.commits().size()); Assert.IsNotNull(mergeResult); Assert.AreEqual(mergeResult.GetMergeStatus(), MergeStatus.FAST_FORWARD); Assert.IsTrue(mergeResult.GetMergeStatus().IsSuccessful()); Assert.IsFalse(nGit3.reset_on_MergeConflicts(nGit3.Last_PullResult)); /* the remote_Add is still not working 100% , since the reverse pull fails below) * * //do a change on repo3 * var newContent = 10.randomLetters(); * newContent.saveAs(repo3_File); * * Assert.AreNotEqual ("", nGit3.status()); * nGit3.add_and_Commit_using_Status(); * Assert.AreEqual ("", nGit3.status()); * Assert.AreEqual (1, nGit1.commits().size()); * Assert.AreEqual (2, nGit3.commits().size()); * * var result_RemoteAdd2 = nGit1.remote_Add("origin", repoPath3);//.pathCombine(".git")); * var result_Pull_Origin2 = nGit1.pull(); * * * Assert.IsNotNull(nGit1.Last_Exception); * Assert.IsInstanceOf<TransportException>(nGit1.Last_Exception); * Assert.AreEqual(nGit1.Last_Exception.Message, "Nothing to fetch."); * * Assert.IsTrue (result_RemoteAdd2); * Assert.IsTrue (result_Pull_Origin2); * Assert.AreEqual(2, nGit1.commits().size()); */ nGit3.delete_Repository_And_Files(); Assert.IsFalse(repoPath3.dirExists()); //Null value handling Assert.IsFalse((null as API_NGit).pull(null)); Assert.IsFalse(nGit3.pull(null)); }