Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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();
 }