/// <summary>
        ///     Производит реверт элемента на коммит, указанный в поле IVcsStorageElement::commit
        /// </summary>
        /// <param name="commit">Представление элемента</param>
        public VcsCommit Revert(VcsCommit commit)
        {
            if (!VcsStorageUtils.CorrectCommitCode(commit))
            {
                throw new Exception("Incorrect commit code!");
            }

            if (!CommitExists(commit))
            {
                throw new Exception("Transaction not exists!");
            }

            var sourceStream = Engine.Get(new FileDescriptor {
                Path = Path.Combine(VcsStorageDefaults.ObjFilesDirectory, commit.Code)
            }).GetStream(FileAccess.Read);
            var revertedCode = ComputeCommitCode(sourceStream);
            var reverted     = new VcsCommit {
                File = new FileDescriptor {
                    Path = Path.Combine(VcsStorageDefaults.ObjFilesDirectory, revertedCode)
                },
                Code = revertedCode
            };

            Transaction(commit, VcsStorageTransactionType.Revert);
            Engine.Set(reverted.File, sourceStream);

            return(reverted);
        }
        /// <summary>
        ///     Возвращает поток до версии файла, если он существует
        /// </summary>
        /// <param name="commit"></param>
        /// <returns></returns>
        private Stream PickCommit(VcsCommit commit)
        {
            if (_mapper.Exists(commit))
            {
                return(Engine.Get(new FileDescriptor {
                    Path = Path.Combine(VcsStorageDefaults.ObjFilesDirectory, commit.Code)
                }).GetStream(FileAccess.Read));
            }

            return(null);
        }
        /// <summary>
        ///     Возвращает наиболее позднюю версию элемента из хранилища
        /// </summary>
        /// <param name="commit"></param>
        /// <returns></returns>
        private Stream PickLatestCommit(VcsCommit commit)
        {
            var latestVersion = GetLatestVersion(commit);

            if (latestVersion == null)
            {
                return(null);
            }

            return(Engine.Get(new FileDescriptor {
                Path = Path.Combine(VcsStorageDefaults.ObjFilesDirectory, latestVersion.Code)
            }).GetStream(FileAccess.Read));
        }
 /// <summary>
 ///     Возвращает актуальную версию элемента
 /// </summary>
 /// <param name="commit"></param>
 /// <returns></returns>
 private VcsCommit GetLatestVersion(VcsCommit commit)
 {
     return(_mapper.Find(new VcsCommit {
         File = commit.File, Branch = commit.Branch
     }).ToList().FirstOrDefault());
 }
 /// <summary>
 ///     Проверяет наличие коммита в системе
 /// </summary>
 /// <param name="commit">Представление элемента</param>
 /// <returns>True, если коммит присутствует</returns>
 private bool CommitExists(VcsCommit commit)
 {
     return(_mapper.Find(commit).Any(c => c.Code == commit.Code));
 }