public static IEnumerable <InstallItemDiff> GetDiffs(IEnumerable <InstallItem> left, IEnumerable <InstallItem> right)
        {
            var leftList  = left.Where(i => i.Type != InstallType.Warning).ToArray();
            var rightList = right.Where(i => i.Type != InstallType.Warning).ToArray();
            var compares  = ListCompare.Create(leftList, rightList, i => i.Reference);
            var results   = new List <InstallItemDiff>();

            foreach (var compare in compares)
            {
                if (compare.Base < 0)
                {
                    results.Add(new InstallItemDiff()
                    {
                        _itemRef    = rightList[compare.Compare].Reference,
                        _type       = rightList[compare.Compare].Type,
                        DiffType    = DiffType.RightOnly,
                        RightScript = rightList[compare.Compare].Script
                    });
                }
                else if (compare.Compare < 0)
                {
                    results.Add(new InstallItemDiff()
                    {
                        _itemRef   = leftList[compare.Base].Reference,
                        _type      = leftList[compare.Base].Type,
                        DiffType   = DiffType.LeftOnly,
                        LeftScript = leftList[compare.Base].Script
                    });
                }
                else
                {
                    results.Add(new InstallItemDiff()
                    {
                        _itemRef = leftList[compare.Base].Reference,
                        _type    = leftList[compare.Base].Type,
                        DiffType = (AmlDiff.IsDifferent(new XmlNodeReader(leftList[compare.Base].Script), new XmlNodeReader(rightList[compare.Compare].Script)) ?
                                    DiffType.Different : DiffType.Identical),
                        LeftScript  = leftList[compare.Base].Script,
                        RightScript = rightList[compare.Compare].Script
                    });
                }
            }

            return(results);
        }
Exemple #2
0
 public bool Equals(ListCompare c)
 {
     return(c._base == this._base && c._compare == this._compare && c._isDifferent == this._isDifferent);
 }