private void onRequestRevision(IClient client, RevisionRequestPacket packet) { var rev = sys.FindRevision(packet.Guid); if (rev == null) { throw new InvalidOperationException("Unexisting revision requested"); } revisionTransporter.GetTransporterForClient(client).Send(new RevisionPacket(rev)); var di = new DirectoryInfo(sys.getRevisionRoot(rev)); var e = di.EnumerateFiles("*", SearchOption.AllDirectories).GetEnumerator(); FileInfo fi = e.Current; while (e.MoveNext()) { var p = new RevisionFilePacket { Path = sys.getPathFromFileInfo(rev, fi), Complete = e.Current == null }; fileTransporter.SendFileTo(client, p, fi.FullName); fi = e.Current; } }
private Revision retrieveRevision(Guid guid) { var rev = sys.FindRevision(guid); if (rev != null) { return(rev); } requestRevisionTransporter.Send(new RevisionRequestPacket { Guid = guid }); var p = revisionTransporter.Receive(); rev = new Revision(); rev.Guid = p.Guid; rev.Message = rev.Message; rev.Parent = retrieveRevision(p.Parent); rev.MergedParent = retrieveRevision(p.MergedParent); // Always 1 file in revision!!! for (; ;) { var fileP = fileTransporter.ReceiveFile(); File.Move(fileP.CachedFilePath, sys.getFilePath(rev, fileP.Packet.Path)); if (fileP.Packet.Complete) { break; } } return(rev); }