public void AddNewVersion(VCSCommit parentCommit, byte[] newData)
        {
            // First remove all changes for this file in the parent commit, if any.
            foreach (var otherChange in from ch in parentCommit.Changes where ch.ParentFile == this select ch)
            {
                parentCommit.Changes.Remove(otherChange);
            }

            // Add this change to the parent commit and to the list of local changes.
            var change = new VCSChange(parentCommit, this, new XDeltaPatch(source: latestVersion, target: newData));

            changes.Push(change);
            parentCommit.Changes.Add(change);

            // Update the latest version to this new data.
            latestVersion = newData;
        }
 public VCSChange(SerializationInfo info, StreamingContext context)
 {
     RollbackPatch = (XDeltaPatch)info.GetValue(nameof(RollbackPatch), typeof(XDeltaPatch));
     ParentCommit  = (VCSCommit)info.GetValue(nameof(ParentCommit), typeof(VCSCommit));
     ParentFile    = (NDSFile)info.GetValue(nameof(ParentFile), typeof(NDSFile));
 }
 public VCSChange(VCSCommit parentCommit, NDSFile parentFile, XDeltaPatch rollbackPatch)
 {
     RollbackPatch = rollbackPatch;
     ParentCommit  = parentCommit;
     ParentFile    = parentFile;
 }