/// <summary> /// Add missing items in the project and removes items not found in source file. /// Note that there are some files which are generated, so file existence should not be checked. /// </summary> /// <param name="comparison">The comparison.</param> public void Update(SourceComparison comparison) { RemoveDuplicates(); ReplaceByLinks(); if (!_configuration.Options.Contains(ProgramOptions.NoDelete)) { var hash = comparison.MissingFilesInSource.Select(x => x.Path.ToLower()).ToHashSet(); var items = _project.GetItems("Compile").ToArray(); foreach (var item in items) { var key = item.EvaluatedInclude.Replace('\\', '/').ToLower(); if (hash.Contains(key)) { _project.RemoveItem(item); } } } foreach (var item in comparison.MissingFilesInProject) { var fileName = Path.Combine(directory, item.Path); var path = new UPath(directory); var fileUPath = new UPath(fileName); var res = path.MakeRelativeUPath(fileUPath); var metadata = ExtractMetadata(directory, res.ToString()); _project.AddItem("Compile", res.ToString(), metadata); } RemoveNotExisting(); _project.Save(); }
public SourceComparison Compare(HashSet<string> itemsInCsProj, HashSet<string> sourcesInSourceFile) { var pathInCsProj = itemsInCsProj.ToDictionaryIgnoreDuplicates(x => x.ToLower().ToPlatformPath().Trim().RemoveDotPath(), x => x); var pathInSourceFile = sourcesInSourceFile.ToDictionaryIgnoreDuplicates( x => x.ToLower().ToPlatformPath().Trim().RemoveDotPath(), x => x); var comparison = new SourceComparison(); foreach (var item in pathInCsProj) { if (!pathInSourceFile.ContainsKey(item.Key)) { comparison.Add(new MissingFileInSource(item.Value)); } } foreach (var source in pathInSourceFile) { if (!pathInCsProj.ContainsKey(source.Key)) { comparison.Add(new MissingFileInProject(source.Value)); } } return comparison; }
public void UsageTest() { var sourceComparison = new SourceComparison(); sourceComparison.Add(new MissingFileInProject("project")); sourceComparison.Add(new MissingFileInSource("source")); Assert.IsNotNull(sourceComparison.MissingFilesInProject); Assert.AreEqual(1, sourceComparison.MissingFilesInProject.Count()); var res = sourceComparison.MissingFilesInProject.FirstOrDefault(); Assert.IsNotNull(res); Assert.AreEqual("project", res.Path); Assert.IsTrue(res.ToString().Contains("project")); Assert.IsNotNull(sourceComparison.MissingFilesInSource); Assert.AreEqual(1, sourceComparison.MissingFilesInSource.Count()); var sourceMissing = sourceComparison.MissingFilesInSource.FirstOrDefault(); Assert.IsNotNull(sourceMissing); Assert.AreEqual("source", sourceMissing.Path); Assert.IsTrue(sourceMissing.ToString().Contains("source")); Assert.IsTrue(sourceComparison.ToString().Contains("source")); Assert.IsTrue(sourceComparison.ToString().Contains("project")); var lines = sourceComparison.ToString().Split('\n'); var lineNumber = lines.Length; if (lines.Last() == string.Empty) { lineNumber--; } Assert.AreEqual(2, lineNumber); }
public void UsageTest() { var projectPath = "project"; var target = Targets.Net4Dot5; var projectItems = new HashSet<string> {"first", "second"}; var sourceFiles = new HashSet<string> {"first", "third"}; var factory = new Mock<IProjectFactory>(MockBehavior.Strict); var provider = new Mock<IProjectItemsProvider>(MockBehavior.Strict); provider.Setup(x => x.GetItems()).Returns(projectItems); factory.Setup(x => x.CreateProjectItemsProvider(projectPath)).Returns(provider.Object); var sourceProvider = new Mock<ISourcesProvider>(MockBehavior.Strict); sourceProvider.Setup(x => x.GetFiles()).Returns(sourceFiles); factory.Setup(x => x.CreateSourcesProvider(projectPath)).Returns(sourceProvider.Object); var comparer = new Mock<ISourceComparer>(MockBehavior.Strict); var comparison = new SourceComparison(); comparer.Setup(x => x.Compare(projectItems, sourceFiles)).Returns(comparison); factory.Setup(x => x.CreateSourceComparer()).Returns(comparer.Object); var updater = new Mock<IProjectUpdater>(MockBehavior.Strict); updater.Setup(x => x.Update(comparison)); factory.Setup(x => x.CreateProjectUpdater(projectPath)).Returns(updater.Object); var console = new Mock<IConsole>(MockBehavior.Strict); console.Setup(x => x.WriteLine(string.Empty)); var projectSync = new ProjectSync(projectPath, target, console.Object, factory.Object); projectSync.Synchronize(); }