in dsl-samples/MergeConflictsResolution/MergeConflictsResolution/MergeConflict.cs [18:76]
public MergeConflict(string conflict, string fileContent = null, string filePath = null)
{
string headLookup = "<<<<<<< HEAD";
string middleLookup = "=======";
string endLookup = ">>>>>>>";
bool inHeadSection = false;
string[] linesConflict = conflict.SplitLines();
List<string> conflictsInForked = new List<string>();
List<string> conflictsInMain = new List<string>();
foreach (string line in linesConflict)
{
if (line.StartsWith(Include) && inHeadSection == false)
{
conflictsInMain.Add(line.NormalizeInclude());
}
if (line.StartsWith(Include) && inHeadSection == true)
{
conflictsInForked.Add(line.NormalizeInclude());
}
if (line.StartsWith(headLookup))
{
inHeadSection = true;
}
if (line.StartsWith(middleLookup))
{
inHeadSection = false;
}
}
string[] linesContent = fileContent.SplitLines();
bool isOutsideConflicts = true;
List<string> outsideConflictContent = new List<string>();
foreach (string line in linesContent)
{
if (line.StartsWith(Include) && isOutsideConflicts)
{
outsideConflictContent.Add(line.NormalizeInclude());
}
if (line.StartsWith(headLookup))
{
isOutsideConflicts = false;
}
if (line.StartsWith(endLookup))
{
isOutsideConflicts = true;
}
}
this.Upstream = PathToNode(conflictsInForked);
this.Downstream = PathToNode(conflictsInMain);
this.UpstreamContent = PathToNode(outsideConflictContent);
this.BasePath = filePath;
}