Exemplo n.º 1
0
        static void Main(string[] args)
        {
            List <ImpactFile> HotFixImpactFiles        = GetImpactFilesList(@"../../Data/Day0Day1.txt");
            List <ImpactFile> RecentChangesImpactFiles =
                GetImpactFilesList(@"../../Data/After60ImpactFiles.txt");
            GenericEqualityComparer <ImpactFileInfo, string> comparer = new GenericEqualityComparer <ImpactFileInfo, string>(x => x.FileName);
            var imapctFilesByIdHF = HotFixImpactFiles.GroupBy(f => f.TfsID).Select(g =>
                                                                                   new TfsItem
            {
                TfsID     = g.Key,
                FilesInfo = g.Select(info => new ImpactFileInfo
                {
                    FileName    = info.FileName,
                    CheckedInBy = info.CheckedInBy,
                    CheckInDate = info.CheckInDate
                }).OrderByDescending(date => date.CheckInDate)
                            .Distinct(comparer).ToList()
            });
            var recentTFSItems = RecentChangesImpactFiles.GroupBy(f => f.TfsID).Select(g =>
                                                                                       new TfsItem
            {
                TfsID     = g.Key,
                FilesInfo = g.Select(info => new ImpactFileInfo
                {
                    FileName    = info.FileName,
                    CheckedInBy = info.CheckedInBy,
                    CheckInDate = info.CheckInDate
                }).OrderByDescending(date => date.CheckInDate)
                            .Distinct(comparer).ToList()
            });
            DependencyList <TfsItem> dependencyList = new DependencyList <TfsItem>();

            GetDeepDependency(imapctFilesByIdHF, recentTFSItems, dependencyList);
            DependencyList <TfsItem>         sortedTfsList = Sort(dependencyList, x => x.DependentTfsList, (x) => { return(dependencyList.Where(y => y.TfsID == x.TfsID).FirstOrDefault()); }, x => x.TfsID);
            List <DependencyList <TfsItem> > groupDepList  = Group(dependencyList, x => x.DependentTfsList, (x) => { return(dependencyList.Where(y => y.TfsID == x.TfsID).FirstOrDefault()); }, new GenericEqualityComparer <TfsItem, int>(x => x.TfsID));
            string xml = GetXMLFromObject <DependencyList <TfsItem> >(dependencyList);

            Console.Read();
        }
Exemplo n.º 2
0
        static void GetDeepDependency(IEnumerable <TfsItem> inputList, IEnumerable <TfsItem> compareList, DependencyList <TfsItem> dependencyList)
        {
            List <TfsItem> nextIterationInput = new List <TfsItem>();

            foreach (var input in inputList)
            {
                foreach (var compare in compareList)
                {
                    IEnumerable <ImpactFileInfo> intersectFiles = compare.FilesInfo.Intersect(input.FilesInfo, new GenericEqualityComparer <ImpactFileInfo, string>(x => x.FileName));
                    if (intersectFiles.Count() > 0)
                    {
                        input.DependentTfsList.Add(new DependentTfs()
                        {
                            TfsID = compare.TfsID, IntersectFiles = intersectFiles.ToList()
                        });
                        nextIterationInput.Add(compare);
                    }
                }
                dependencyList.Add(input);
            }
            if (nextIterationInput.Count > 0)
            {
                GenericEqualityComparer <TfsItem, int> genericComparer = new GenericEqualityComparer <TfsItem, int>(x => x.TfsID);
                nextIterationInput = nextIterationInput.Distinct(genericComparer).ToList();
                GetDeepDependency(nextIterationInput, compareList.Except(nextIterationInput, genericComparer), dependencyList);
            }
        }
Exemplo n.º 3
0
        public static void Visit <T, D>(T item, Func <T, IEnumerable <D> > getDependencies, Func <D, T> getDependecyDetail, DependencyList <T> sorted, Dictionary <T, bool> visited)
        {
            bool inProcess;
            var  alreadyVisited = visited.TryGetValue(item, out inProcess);

            if (alreadyVisited)
            {
                if (inProcess)
                {
                    throw new ArgumentException("Cyclic dependency found.");
                }
            }
            else
            {
                visited[item] = true;

                var dependencies = getDependencies(item);
                if (dependencies != null)
                {
                    foreach (var dependency in dependencies)
                    {
                        Visit(getDependecyDetail(dependency), getDependencies, getDependecyDetail, sorted, visited);
                    }
                }

                visited[item] = false;
                sorted.Add(item);
            }
        }
Exemplo n.º 4
0
 public static DependencyList <T> Sort <T, D, TKey>(DependencyList <T> source, Func <T, IEnumerable <D> > getDependencies, Func <D, T> getDependecyDetail, Func <T, TKey> getKey)
 {
     return(Sort(source, getDependencies, getDependecyDetail, new GenericEqualityComparer <T, TKey>(getKey)));
 }