Beispiel #1
0
        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);
        }