public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <ImportSettings> <ScrImportSet guid='0a0be0c1-39c4-44d4-842e-231680c7cd56' > <ImportType val='2' /> </ScrImportSet> </ImportSettings>"; var child = parent.Replace("val='2'", "val='3'"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile(SharedConstants.ImportSettingsFilename, parent); repositorySetup.ChangeFileAndCommit(SharedConstants.ImportSettingsFilename, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <TranslatedScripture> <Scripture guid='06425922-3258-4094-a9ec-3c2fe5b52b39'> <VerseSepr> <Uni>,</Uni> </VerseSepr> </Scripture> </TranslatedScripture>"; var child = parent.Replace("<Uni>,</Uni>", "<Uni>+</Uni>"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile(SharedConstants.ScriptureTransFilename, parent); repositorySetup.ChangeFileAndCommit(SharedConstants.ScriptureTransFilename, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
public void Find2WayDifferencesShouldReportOneChangeNoMatterHowManyWereMade() { // There are actually more than one change, but we don't fret about that at this point. const string parent = @"<?xml version='1.0' encoding='utf-8'?> <ProjectLexiconSettings> </ProjectLexiconSettings>"; const string child = @"<?xml version='1.0' encoding='utf-8'?> <ProjectLexiconSettings> <WritingSystems addToSldr='true' /> </ProjectLexiconSettings>"; using (var repositorySetup = new RepositorySetup("randy-" + Guid.NewGuid())) { repositorySetup.AddAndCheckinFile("some.plsx", parent); repositorySetup.ChangeFileAndCommit("some.plsx", child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = _projectLexiconSettingsFileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository); Assert.AreEqual(1, result.Count()); Assert.AreEqual("Edited", result.First().ActionLabel); } }
public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <LayoutInventory> <layout class='CmLocation' type='jtview' name='publishStemLocation#Stem-612' version='19'> <generate class='LexExampleSentence' fieldType='mlstring' restrictions='customOnly' /> </layout> </LayoutInventory>"; var child = parent.Replace("19", "20"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile("Sample." + SharedConstants.fwlayout, parent); repositorySetup.ChangeFileAndCommit("Sample." + SharedConstants.fwlayout, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
public void Find2WayDifferencesShouldReportOneChangeNoMatterHowManyWereMade() { // There are actually more than one change, but we don't fret about that at this point. const string parent = @"<?xml version='1.0' encoding='utf-8'?> <ldml> <special xmlns:palaso='urn://palaso.org/ldmlExtensions/v1' /> </ldml>"; const string child = @"<?xml version='1.0' encoding='utf-8'?> <ldml> <identity /> <special xmlns:fw='urn://fieldworks.sil.org/ldmlExtensions/v1' /> <special xmlns:palaso='urn://palaso.org/ldmlExtensions/v1' /> </ldml>"; using (var repositorySetup = new RepositorySetup("randy-" + Guid.NewGuid())) { repositorySetup.AddAndCheckinFile("some.ldml", parent); repositorySetup.ChangeFileAndCommit("some.ldml", child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = _ldmlFileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository); Assert.AreEqual(1, result.Count()); Assert.AreEqual("Edited", result.First().ActionLabel); } }
public void HasFileHandlers_ValidCommit_Validates_DoesNothing() { using(var bob = new RepositorySetup("bob")) { bob.AddAndCheckinFile("test.chorusTest", "hello"); using(var cop = new CommitCop(bob.Repository, ChorusFileTypeHandlerCollection.CreateWithTestHandlerOnly(), bob.Progress)) { bob.ChangeFile("test.chorusTest", "aloha"); bob.AddAndCheckinFile("test2.chorusTest", "hi"); Assert.IsNullOrEmpty(cop.ValidationResult); } bob.AssertHeadCount(1); bob.AssertLocalRevisionNumber(1); bob.AssertFileExistsInRepository("test2.chorusTest"); bob.AssertFileContents("test.chorusTest", "aloha"); bob.AssertFileContents("test2.chorusTest", "hi"); } }
public void NoMatchingFileHandlers_DoesNothing() { using (var bob = new RepositorySetup("bob")) { using(var cop = new CommitCop(bob.Repository , ChorusFileTypeHandlerCollection.CreateWithTestHandlerOnly(), bob.Progress)) { bob.AddAndCheckinFile("test.abc", "hello"); } bob.AssertLocalRevisionNumber(0); } }
public void HasFileHandlers_Validates_DoesNothing() { using (var bob = new RepositorySetup("bob")) { using (var cop = new CommitCop(bob.Repository, ChorusFileTypeHandlerCollection.CreateWithTestHandlerOnly(), bob.Progress)) { bob.AddAndCheckinFile("test.chorusTest", "hello"); // SUT Assert.IsNullOrEmpty(cop.ValidationResult); } bob.AssertLocalRevisionNumber(0); } }
public void SynchNow_OnDefaultBranchAndAnotherBranchExists_DoesNotMergeWithIt() { using (var repo = new RepositorySetup("bob")) { repo.AddAndCheckinFile("test.txt", "hello"); repo.AssertHeadCount(1); repo.ChangeFileOnNamedBranchAndComeBack("test.txt", "blah", "mybranch"); //NB: this used to pass prior to hg 1.5, but, well, it shouldn't! // Shouldn't there be two heads after the branch, above? (jh, April 2010) // repo.AssertHeadCount(1); repo.ChangeFileAndCommit("test.txt", "hello there", "second"); repo.AssertHeadCount(2); repo.CheckinAndPullAndMerge(); repo.AssertHeadCount(2); } }
public void DeletionReport_Not_ProducedForDeletedAnnotationUsingNotesHandler() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <notes version='0'> <annotation guid='old1'/> <annotation guid='soonToBeGoner'/> </notes>"; const string child = @"<?xml version='1.0' encoding='utf-8'?> <notes version='0'> <annotation guid='old1'/> </notes>"; // Make sure the common differ code does produce the deletion report. using (var parentTempFile = new TempFile(parent)) using (var childTempFile = new TempFile(child)) { var listener = new ListenerForUnitTests(); var differ = Xml2WayDiffer.CreateFromFiles(parentTempFile.Path, childTempFile.Path, listener, null, "annotation", "guid"); differ.ReportDifferencesToListener(); listener.AssertExpectedChangesCount(1); listener.AssertFirstChangeType<XmlDeletionChangeReport>(); } // Now make sure the ChorusNotesFileHandler filters it out, and does not return it, // as per the original notes differ code. var notesHandler = (from handler in ChorusFileTypeHandlerCollection.CreateWithInstalledHandlers().Handlers where handler.GetType().Name == "ChorusNotesFileHandler" select handler).First(); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile("notestest.ChorusNotes", parent); repositorySetup.ChangeFileAndCommit("notestest.ChorusNotes", child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = notesHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository); Assert.AreEqual(0, result.Count()); } }
public void SecondCheckin_Invalid_BacksOut() { using (var bob = new RepositorySetup("bob")) { bob.AddAndCheckinFile("test.chorusTest", "hello"); bob.ChangeFile("test.chorusTest",ChorusTestFileHandler.GetInvalidContents()); using (var cop = new CommitCop(bob.Repository, ChorusFileTypeHandlerCollection.CreateWithTestHandlerOnly(), bob.Progress)) { Assert.IsFalse(string.IsNullOrEmpty(cop.ValidationResult)); bob.Repository.Commit(false, "bad data"); } Debug.WriteLine(bob.Repository.GetLog(-1)); bob.AssertHeadCount(1); bob.AssertLocalRevisionNumber(2); bob.AssertFileContents("test.chorusTest", "hello"); } }
public void InitialFileCommit_Invalid_BacksOut() { using(var bob = new RepositorySetup("bob")) { bob.AddAndCheckinFile("validfile.chorustest", "valid contents"); bob.ChangeFile("test.chorusTest", ChorusTestFileHandler.GetInvalidContents()); using(var cop = new CommitCop(bob.Repository, ChorusFileTypeHandlerCollection.CreateWithTestHandlerOnly(), bob.Progress)) { bob.Repository.AddAndCheckinFile("test.chorusTest"); Assert.That(cop.ValidationResult, Is.StringContaining("Failed")); } Debug.WriteLine(bob.Repository.GetLog(-1)); bob.AssertHeadCount(1); bob.AssertLocalRevisionNumber(2); bob.AssertFileDoesNotExistInRepository("test.chorusTest"); bob.AssertFileExistsInRepository("validfile.chorustest"); } }
public void Find2WayDifferencesShouldReportOneChangeEvenWhenNoneArePresent() { // One 'change' reported, even for the exact same file. const string parent = @"<?xml version='1.0' encoding='utf-8'?> <ProjectLexiconSettings> </ProjectLexiconSettings>"; using (var repositorySetup = new RepositorySetup("randy-" + Guid.NewGuid())) { repositorySetup.AddAndCheckinFile("some.plsx", parent); repositorySetup.ChangeFileAndCommit("some.plsx", parent, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var result = _projectLexiconSettingsFileHandler.Find2WayDifferences(firstFiR, firstFiR, hgRepository); Assert.AreEqual(1, result.Count()); Assert.AreEqual("Edited", result.First().ActionLabel); } }
public void SynchNow_OnNamedBranchAndDefaultBranchExists_DoesNotMergeWithIt() { using (var repo = new RepositorySetup("bob")) { if (repo.Synchronizer == null) repo.Synchronizer = repo.CreateSynchronizer(); repo.Synchronizer.SynchronizerAdjunct = new ProgrammableSynchronizerAdjunct("default"); repo.AddAndCheckinFile("test.txt", "apple"); var afterFirstCheckin = repo.CreateBookmarkHere(); repo.ChangeFileAndCommit("test.txt", "pear", "second on default"); afterFirstCheckin.Go(); repo.Repository.BranchingHelper.Branch(new ConsoleProgress(), "animals"); repo.Synchronizer.SynchronizerAdjunct = new ProgrammableSynchronizerAdjunct("animals"); repo.ChangeFileAndCommit("test.txt", "dog", "first on animals"); var animalHead = repo.CreateBookmarkHere(); repo.AssertHeadCount(2); repo.CheckinAndPullAndMerge(); repo.AssertHeadCount(2); animalHead.AssertRepoIsAtThisPoint(); } }
public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <ReferenceSystem> <ScrRefSystem guid='0a0be0c1-39c4-44d4-842e-231680c7cd56' > <Books> <ScrBookRef guid='51caa4a0-8cd1-4c66-acac-7daead917510'> <BookName> <AUni ws='en'>Genesis</AUni> </BookName> </ScrBookRef> </Books> </ScrRefSystem> </ReferenceSystem>"; var child = parent.Replace("Genesis", "Startup"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile(SharedConstants.ScriptureReferenceSystemFilename, parent); repositorySetup.ChangeFileAndCommit(SharedConstants.ScriptureReferenceSystemFilename, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
[Ignore] // I (CP) can't get MONO to get an exclusive lock for write. See RepositorySetup::GetFileLockForWriting #endif public void Sync_FileLockedForWritingDuringUpdate_GetUpdatedFileOnceLockIsGone() { HgRunner.TimeoutSecondsOverrideForUnitTests = 1; using (var bob = new RepositorySetup("bob")) { bob.ProjectFolderConfig.IncludePatterns.Add("*.txt"); bob.AddAndCheckinFile("one.txt", "hello"); using (var sally = new RepositorySetup("sally", bob)) { bob.AddAndCheckinFile("one.txt", "hello-bob"); using (sally.GetFileLockForWriting("one.txt")) { // Note: Mono succeeds here Assert.IsFalse(sally.CheckinAndPullAndMerge(bob).Succeeded, "CheckinAndPullAndMerge should have failed"); sally.AssertFileContents("one.txt", "hello"); } sally.AssertSingleHead(); //ok, now whatever was holding that file is done with it, and we try again Assert.IsTrue(sally.CheckinAndPullAndMerge(bob).Succeeded, "ChecinAndPullAndMerge(bob) should have succeeded"); sally.AssertFileContents("one.txt", "hello-bob"); } } }
public void Sync_FileLockedForReadingDuringMerge_LeftWithMultipleHeads() { HgRunner.TimeoutSecondsOverrideForUnitTests = 1; using (var bob = new RepositorySetup("bob")) { bob.ProjectFolderConfig.IncludePatterns.Add("*.txt"); bob.AddAndCheckinFile("one.txt", "hello"); using (var sally = new RepositorySetup("sally", bob)) { bob.AddAndCheckinFile("one.txt", "hello-bob"); using (sally.GetFileLockForReading("one.txt")) { sally.CheckinAndPullAndMerge(bob); } sally.AssertHeadCount(2); } } }
public void Sync_ExistingRejectChangeSet_NotMergedIn() { using (var bob = new RepositorySetup("bob")) { bob.AddAndCheckinFile("test.txt", "original"); bob.CreateRejectForkAndComeBack(); bob.ChangeFileAndCommit("test.txt", "ok", "goodGuy"); //move on so we have two distinct branches bob.AssertHeadCount(2); bob.CheckinAndPullAndMerge(null); Assert.AreEqual("goodGuy", bob.Repository.GetRevisionWorkingSetIsBasedOn().Summary); bob.AssertLocalRevisionNumber(3); bob.AssertHeadCount(2); } }
public void Unbundle_ValidBundleFile_ReturnsTrue() { using (var setup = new RepositorySetup("unbundleTests")) { var bundleFilePath = setup.RootFolder.GetNewTempFile(false).Path; setup.AddAndCheckinFile(setup.ProjectFolder.GetNewTempFile(true).Path, "some file we don't care about"); var hash = setup.Repository.GetTip().Number.Hash; setup.AddAndCheckinFile(setup.ProjectFolder.GetNewTempFile(true).Path, "another file we don't care about"); setup.Repository.MakeBundle(new []{hash}, bundleFilePath); setup.Repository.RollbackWorkingDirectoryToLastCheckin(); Assert.That(setup.Repository.Unbundle(bundleFilePath), Is.True); } }
public void GetRevision_RevisionDoesExist_Ok() { using (var setup = new RepositorySetup("Dan")) { setup.AddAndCheckinFile("test.txt", "hello"); Assert.IsNotNull(setup.Repository.GetRevision("0")); } }
public void Sync_ModifiedFileIsInvalid_CheckedInButThenBackedOut() { /* @ changeset: 2 | summary: [Backout due to validation Failure] | o changeset: 1 | summary: missing checkin description | o changeset: 0 summary: Add test.chorusTest */ using (var bob = new RepositorySetup("bob")) { bob.AddAndCheckinFile("test.chorusTest", "original"); bob.AssertLocalRevisionNumber(0); bob.ChangeFile("test.chorusTest", ChorusTestFileHandler.GetInvalidContents()); bob.CheckinAndPullAndMerge(); bob.AssertLocalRevisionNumber(2); bob.AssertHeadCount(1); bob.AssertLocalRevisionNumber(int.Parse(bob.Repository.GetTip().Number.LocalRevisionNumber)); Debug.WriteLine(bob.Repository.GetLog(-1)); } }
public void Sync_MergeFailure_NoneOfTheOtherGuysFilesMakeItIntoWorkingDirectory() { using (var bob = new RepositorySetup("bob")) { bob.ProjectFolderConfig.IncludePatterns.Add("*.txt"); bob.AddAndCheckinFile("aaa.txt", "apple"); bob.AddAndCheckinFile("bbb.txt", "bread"); bob.AddAndCheckinFile("zzz.txt", "zoo"); using (var sally = new RepositorySetup("sally", bob)) { bob.AddAndCheckinFile("aaa.txt", "bob-apple"); bob.AddAndCheckinFile("bbb.txt", "bob-bread"); bob.AddAndCheckinFile("zzz.txt", "bob-zoo"); using (new FailureSimulator("TextMerger-bbb.txt")) { sally.AddAndCheckinFile("aaa.txt", "sally-apple"); sally.AddAndCheckinFile("bbb.txt", "sally-bread"); sally.AddAndCheckinFile("zzz.txt", "sally-zipper"); Assert.IsFalse(sally.CheckinAndPullAndMerge(bob).Succeeded); //make sure we ended up on Sally's revision, even though Bob's are newer var currentRevision = sally.Repository.GetRevisionWorkingSetIsBasedOn(); Assert.AreEqual("sally", sally.Repository.GetRevision(currentRevision.Number.Hash).UserId); //sally should see no changes, because it should all be rolled back sally.AssertFileContents("aaa.txt", "sally-apple"); sally.AssertFileContents("bbb.txt", "sally-bread"); sally.AssertFileContents("zzz.txt", "sally-zipper"); // sally.ShowInTortoise(); sally.AssertHeadCount(2); Assert.IsFalse(sally.GetProgressString().Contains("creates new remote heads")); } } } File.Delete(Path.Combine(Path.GetTempPath(), "TextMerger-bbb.txt")); }
public void Find2WayDifferencesShouldReportOneChange() { const string parent = "{\"modelversion\": 7000000}"; // One change. const string child = "{\"modelversion\": 7000002}"; using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile("FLExProject.ModelVersion", parent); repositorySetup.ChangeFileAndCommit("FLExProject.ModelVersion", child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); Assert.IsInstanceOf(typeof(FieldWorksModelVersionUpdatedReport), result[0]); } }
public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <CheckList> <CmPossibilityList guid='06425922-3258-4094-a9ec-3c2fe5b52b39'> <Name> <AUni ws='en'>Proper names</AUni> </Name> </CmPossibilityList> </CheckList>"; var child = parent.Replace("Proper names", "My Proper names"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile("Sample." + SharedConstants.List, parent); repositorySetup.ChangeFileAndCommit("Sample." + SharedConstants.List, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
public void SampleDiff() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <Lexicon> <header> <LexDb guid='06425922-3258-4094-a9ec-3c2fe5b52b39' > <Introduction> <StText guid='45b78bcf-2400-48d5-a9c1-973447d36d4e'> <DateModified val='2011-2-2 19:39:28.829' /> <Paragraphs> <ownseq class='StTxtPara' guid='9edbb6e1-2bdd-481c-b84d-26c69f22856c'> <ParseIsCurrent val='False' /> </ownseq> </Paragraphs> </StText> </Introduction> </LexDb> </header> <LexEntry guid='016f2759-ed12-42a5-abcb-7fe3f53d05b0' /> </Lexicon>"; var child = parent.Replace("False", "True"); using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile(string.Format("{0}_01.{1}", SharedConstants.Lexicon, SharedConstants.Lexdb), parent); repositorySetup.ChangeFileAndCommit(string.Format("{0}_01.{1}", SharedConstants.Lexicon, SharedConstants.Lexdb), child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(1, result.Count); var onlyReport = result[0]; Assert.IsInstanceOf<XmlChangedRecordReport>(onlyReport); Assert.AreEqual(firstFiR.FullPath, onlyReport.PathToFile); } }
public void FileDeletedRemotelyAndChangedLocallyKeepsChanged() { using(var localRepo = new RepositorySetup("unbundleTests")) { var localFilePath = localRepo.ProjectFolder.GetNewTempFile(true).Path; localRepo.AddAndCheckinFile(localFilePath, "file to change and delete"); using(var remoteRepo = new RepositorySetup("remote", localRepo)) { remoteRepo.CheckinAndPullAndMerge(); var remoteFilePath = Path.Combine(remoteRepo.ProjectFolder.Path, Path.GetFileName(localFilePath)); remoteRepo.ChangeFileAndCommit(remoteFilePath, "new contents", "changed file"); File.Delete(localFilePath); localRepo.SyncWithOptions(new SyncOptions { CheckinDescription = "delete file", DoMergeWithOthers = false, DoPullFromOthers = false, DoSendToOthers = false }); localRepo.CheckinAndPullAndMerge(remoteRepo); Assert.That(File.Exists(localFilePath), Is.True, "Did not keep changed file."); var chorusNotesPath = localFilePath + ".ChorusNotes"; Assert.That(File.Exists(chorusNotesPath), "Did not record conflict"); AssertThatXmlIn.File(chorusNotesPath).HasAtLeastOneMatchForXpath("//annotation[@class='mergeconflict']"); } } }
public void GetFilteredStatusForFilesHasExpectedResults() { using (var repo = new RepositorySetup("BigFiles", true)) { // 'clean' - C repo.AddAndCheckinFile("control.txt", "original"); repo.AddAndCheckinFile("modified.txt", "original"); repo.AddAndCheckinFile("removed.txt", "removed properly"); repo.AddAndCheckinFile("goner.txt", "short lived"); File.WriteAllText(Path.Combine(repo.ProjectFolder.Path, "added.txt"), "added file"); // 'modified' - M repo.ChangeFile("modified.txt", "updated"); // 'added' - A repo.Repository.Execute(10, "add", "added.txt"); // 'removed' - R repo.Repository.Execute(10, "rm", "removed.txt"); // 'missing' - ! File.Delete(Path.Combine(repo.ProjectFolder.Path, "goner.txt")); // 'unknown' - ? File.WriteAllText(Path.Combine(repo.ProjectFolder.Path, "unknown.txt"), "new data"); // excluded File.WriteAllText(Path.Combine(repo.ProjectFolder.Path, "unknown.jpg"), "some binary data"); repo.ProjectFolderConfig.ExcludePatterns.Add("*.jpg"); repo.ProjectFolderConfig.IncludePatterns.Add("*.txt"); var results = LargeFileFilter.GetStatusOfFilesOfInterest(repo.Repository, repo.ProjectFolderConfig); Assert.AreEqual(3, results.Keys.Count); Assert.IsTrue(results.ContainsKey("M")); // tracked and modifed Assert.IsTrue(results.ContainsKey("A")); // Added with hg add Assert.IsTrue(results.ContainsKey("?")); // untracked foreach (var resultKvp in results) { var resultValue = resultKvp.Value; Assert.AreEqual(1, resultValue.Keys.Count); Assert.IsTrue(resultValue.ContainsKey("txt")); Assert.AreEqual(1, resultValue.Values.Count); switch (resultKvp.Key) { case "M": Assert.AreEqual("modified.txt", resultValue["txt"][0]); break; case "A": Assert.AreEqual("added.txt", resultValue["txt"][0]); break; case "?": Assert.AreEqual("unknown.txt", resultValue["txt"][0]); break; } } } }
public void Find2WayDifferencesShouldReportThreeChanges() { const string parent = @"<?xml version='1.0' encoding='utf-8'?> <AdditionalFields> <CustomField class='WfiWordform' key='WfiWordformCertified' name='Certified' type='Boolean' /> <CustomField class='WfiWordform' key='WfiWordformGoner' name='Goner' type='Boolean' /> <CustomField class='WfiWordform' key='WfiWordformDirtball' name='Dirtball' type='Boolean' /> </AdditionalFields>"; // One deletion, one change, and one insertion, and one unchanged. const string child = @"<?xml version='1.0' encoding='utf-8'?> <AdditionalFields> <CustomField class='WfiWordform' key='WfiWordformCertified' name='Certified' type='Boolean' /> <CustomField class='WfiWordform' key='WfiWordformDirtball' name='Dirtball' type='Integer' /> <CustomField class='WfiWordform' key='WfiWordformNewby' name='Newby' type='Boolean' /> </AdditionalFields>"; using (var repositorySetup = new RepositorySetup("randy")) { repositorySetup.AddAndCheckinFile(SharedConstants.CustomPropertiesFilename, parent); repositorySetup.ChangeFileAndCommit(SharedConstants.CustomPropertiesFilename, child, "change it"); var hgRepository = repositorySetup.Repository; var allRevisions = (from rev in hgRepository.GetAllRevisions() orderby rev.Number.LocalRevisionNumber select rev).ToList(); var first = allRevisions[0]; var second = allRevisions[1]; var firstFiR = hgRepository.GetFilesInRevision(first).First(); var secondFiR = hgRepository.GetFilesInRevision(second).First(); var result = FileHandler.Find2WayDifferences(firstFiR, secondFiR, hgRepository).ToList(); Assert.AreEqual(3, result.Count); } }