Exemplo n.º 1
0
        static (VbpLine, Comparison) FindLine(VbpLine queryLine, Vbp targetVbp)
        {
            var searchSpace = targetVbp.Lines.Where(targetLine => (!targetLine.processed) && (targetLine.Section == queryLine.Section));

            foreach (var targetLine in searchSpace)
            {
                var comparison = queryLine.Compare(targetLine);

                if (comparison != Comparison.different)
                {
                    return(targetLine, comparison);
                }
            }
            return(null, Comparison.different);
        }
Exemplo n.º 2
0
        static void ProcessStep(Vbp vbpOurs, Vbp vbpTheirs, Vbp vbpCommon)
        {
            var unprocLines = vbpOurs.Lines.Where(ourLine => !ourLine.processed);

            foreach (var ourLine in unprocLines)
            {
                if (ourLine.Line == "")
                {
                    ourLine.mergestatsus = MergeStatus.excluded;
                }
                else
                {
                    (var theirLine, var compareTheirs) = FindLine(ourLine, vbpTheirs);

                    if (compareTheirs == Comparison.different)
                    {
                        (var commonLine, var compareCommon) = FindLine(ourLine, vbpCommon);
                        if (compareCommon == Comparison.different)
                        {
                            ourLine.mergestatsus = MergeStatus.included;
                        }
                        else
                        {
                            ourLine.mergestatsus = MergeStatus.excluded;
                        }
                    }
                    else
                    {
                        theirLine.processed    = true;
                        theirLine.mergestatsus = MergeStatus.excluded;
                        ourLine.mergestatsus   = MergeStatus.included;

                        if (compareTheirs == Comparison.modified)
                        {
                            (var commonOurs, var compareCommonOurs) = FindLine(ourLine, vbpCommon);

                            if (compareCommonOurs == Comparison.equal)
                            {
                                theirLine.mergestatsus = MergeStatus.included;
                                ourLine.mergestatsus   = MergeStatus.excluded;
                            }
                        }
                    }
                }
                ourLine.processed = true;
            }
        }
Exemplo n.º 3
0
        static IEnumerable <string> Merge(Vbp vbpOurs, Vbp vbpTheirs)
        {
            var oursIncluded   = NumerateAndFilter(vbpOurs).ToList();
            var theirsIncluded = NumerateAndFilter(vbpTheirs);

            foreach (var element in theirsIncluded)
            {
                var objective = oursIncluded.Where(x => x.Item2.Section == element.Item2.Section && x.Item1 > element.Item1).FirstOrDefault();
                if (objective == null)
                {
                    objective = oursIncluded.Where(x => x.Item1 > element.Item1).FirstOrDefault();
                }
                if (objective == null)
                {
                    oursIncluded.Append(element);
                }
                else
                {
                    oursIncluded.Insert(oursIncluded.IndexOf(objective), element);
                }
            }

            return(oursIncluded.Select(x => x.Item2.Line));
        }
Exemplo n.º 4
0
 private static IEnumerable <Tuple <int, VbpLine> > NumerateAndFilter(Vbp vbp)
 {
     return(vbp.Lines.Select((item, index) => new Tuple <int, VbpLine>(index, item)).Where(x => x.Item2.mergestatsus == MergeStatus.included));
 }