/// <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)); }