예제 #1
0
        public void Branching()
        {
            var br1Commit = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }, Branch = "br1"
            }, GenerateStreamFromString("test data"));
            var br2Commit = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }, Branch = "br2"
            }, GenerateStreamFromString("SOMETESTDATA"));


            var pickedFirst = Persister.Pick(new VcsCommit {
                Branch = "br1", File = new FileDescriptor {
                    Path = "test"
                }
            });
            var pickedSecond = Persister.Pick(new VcsCommit {
                Branch = "br2", File = new FileDescriptor {
                    Path = "test"
                }
            });

            Assert.IsNotNull(pickedFirst);
            Assert.IsNotNull(pickedSecond);

            var contentFirst  = new StreamReader(pickedFirst).ReadToEnd();
            var contentSecond = new StreamReader(pickedSecond).ReadToEnd();

            Assert.AreEqual("test data", contentFirst);
            Assert.AreEqual("SOMETESTDATA", contentSecond);
        }
예제 #2
0
        public void CanCommitFile()
        {
            var elementFirst = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = Guid.NewGuid().ToString()
                }
            }, GenerateStreamFromString("test data"));
            var elementSecond = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = Guid.NewGuid().ToString()
                }
            }, GenerateStreamFromString("SOMETESTDATA"));

            var pickedFirst  = Persister.Pick(elementFirst);
            var pickedSecond = Persister.Pick(elementSecond);

            Assert.IsNotNull(pickedFirst);
            Assert.IsNotNull(pickedSecond);

            var contentFirst  = new StreamReader(pickedFirst).ReadToEnd();
            var contentSecond = new StreamReader(pickedSecond).ReadToEnd();

            Assert.AreEqual("test data", contentFirst);
            Assert.AreEqual("SOMETESTDATA", contentSecond);
        }
예제 #3
0
        /// <summary>
        /// Given the search request, build the response.
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        private async Task <ISearchResponse> BuildResponse(SearchRequest search)
        {
            // we want the stopwatch to include the getting of the transaction as well.
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var log         = new StringBuilder();
            var token       = CancellationToken.None;
            var transaction = await Persister.BeginRead(token).ConfigureAwait(false);

            log.AppendLine($"  > Got transaction        Time Elapsed: {stopwatch.Elapsed:g}");
            try
            {
                // search the words.
                var words = await GetWords(search, token).ConfigureAwait(false);

                log.AppendLine($"  > Got Words              Time Elapsed: {stopwatch.Elapsed:g}");

                // get the percent complete
                var status = await GetStatus(token).ConfigureAwait(false);

                log.AppendLine($"  > Got Status             Time Elapsed: {stopwatch.Elapsed:g}");

                // we are done here.
                Persister.Commit(transaction);
                log.AppendLine($"  > Committed              Time Elapsed: {stopwatch.Elapsed:g}");

                // log it.
                stopwatch.Stop();
                log.Append($"Completed search for '{search.What}' found {words.Count} result(s) (Time Elapsed: {stopwatch.Elapsed:g})");
                Logger.Information(log.ToString());

                // we can now build the response model.
                return(new SearchResponse(words,
                                          stopwatch.ElapsedMilliseconds,
                                          status));
            }
            catch (Exception e)
            {
                Persister.Rollback(transaction);
                Logger.Exception(e);
            }

            // return nothing
            return(new SearchResponse());
        }
예제 #4
0
        public void CanRevert()
        {
            var elementFirst = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }
            }, GenerateStreamFromString("test data"));
            var elementSecond = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }
            }, GenerateStreamFromString("SOMETESTDATA"));
            var elementThird = Persister.Commit(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }
            }, GenerateStreamFromString("ANOTHERDTA"));

            var picked = Persister.Pick(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }
            });

            Assert.IsNotNull(picked);
            var sr      = new StreamReader(picked);
            var content = sr.ReadToEnd();

            sr.Close();

            Assert.AreEqual("ANOTHERDTA", content);
            Persister.Revert(elementSecond);
            picked = Persister.Pick(new VcsCommit {
                File = new FileDescriptor {
                    Path = "test"
                }
            });
            content = new StreamReader(picked).ReadToEnd();
            Assert.AreEqual("SOMETESTDATA", content);
            // выражает то, что изначально у на было три элемента, а после реверта стало 4, т.е.
            // ревер не сносит все старшие комиты, а накатывает поверх
            Assert.AreEqual(4, Persister.Count(new FileDescriptor {
                Path = "test"
            }));
        }