Esempio n. 1
0
        private object PatchFile(dynamic p)
        {
            var    path = Path.Combine(pathProvider.GetRootPath(), p.path);
            string tempPath;
            string etag;

            using (var file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Delete))
            {
                using (var tempFile = OpenTempFile(path, out tempPath))
                {
                    var patchJob = new DeltaReadJob(Request.Body, new PatchProcessor(file, tempFile));
                    patchJob.Run();
                }

                using (var tempFile = File.Open(tempPath, FileMode.Open, FileAccess.Read))
                {
                    etag = GetETag(tempFile);
                }
            }

            if (!MoveFileEx(tempPath, path, MoveFileFlags.ReplaceExisting))
            {
                throw new Win32Exception();
            }

            var response = new Response();

            response.StatusCode = HttpStatusCode.NoContent;
            response.Headers.Add("ETag", "\"" + etag + "\"");

            return(response);
        }
Esempio n. 2
0
        public void TripleTest(string oldName, string newName)
        {
            using (var old = GetTestDataStream(oldName))
                using (var old2 = GetTestDataStream(oldName))
                    using (var @new = GetTestDataStream(newName))
                        using (var actual = new MemoryStream())
                        {
                            var builder = new SignatureBuilder();
                            var sigJob  = new SignatureJob(old, builder);
                            sigJob.Run();

                            old.Seek(0, SeekOrigin.Begin);

                            using (var delta = new MemoryStream())
                            {
                                var deltaEmitter = new DeltaEmitter(delta);
                                var deltaJob     = new DeltaJob(builder.GetSignature(), @new, deltaEmitter);
                                deltaJob.Run();

                                delta.Seek(0, SeekOrigin.Begin);

                                var patchJob = new DeltaReadJob(delta, new PatchProcessor(old2, actual));
                                patchJob.Run();
                            }

                            actual.Seek(0, SeekOrigin.Begin);
                            @new.Seek(0, SeekOrigin.Begin);

                            Assert.AreEqual(StreamToArray(@new), StreamToArray(actual));
                        }
        }
        public void Issue1Test()
        {
            using (var ms = new MemoryStream())
            {
                var emitter = new DeltaEmitter(ms);

                emitter.Header();
                emitter.Literal(new byte[0x1ffffff], 0, 0x1ffffff);
                emitter.Copy(0x1ffffff, 0x1ffffff);
                emitter.End();

                ms.Seek(0, SeekOrigin.Begin);

                var processor = new HumanReadableDeltaWriter();
                var readJob   = new DeltaReadJob(ms, processor);
                readJob.Run();

                // 33554431 == 0x1ffffff
                Assert.AreEqual(Multiline("LITERAL 33554431", "COPY 33554431 33554431"),
                                processor.ToString());
            }
        }