/// <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> public bool Exists(VcsCommit commit) { var found = Find(commit); if (!found.Any()) { return(false); } // если код коммита имеет некорректную форму или не указан, а элемент // найден - просто вернём true if (!VcsStorageUtils.CorrectCommitCode(commit)) { return(true); } return(found.Any(c => c.Code == commit.Code)); }
/// <summary> /// Удаляет элемент из маппинга. Если указан коммит, то только /// данный коммит, в противном случае - весь элемент /// </summary> /// <param name="commit">Представление коммита</param> public void Remove(VcsCommit commit) { var container = GetElement(commit); if (!VcsStorageUtils.CorrectCommitCode(commit)) { container.SetAttributeValue("Removed", true); } else { var xmlCommit = container.XPathSelectElement("/Element/Commit[@Code='" + commit.Code + "']"); if (xmlCommit != null) { xmlCommit.SetAttributeValue("Removed", true); } if (!container.Elements().All(el => el.IsRemovedElement())) { container.SetAttributeValue("Removed", true); } } }
/// <summary> /// Возвращает поток на чтение файла из хранилища /// </summary> /// <param name="commit"></param> /// <returns></returns> public Stream Pick(VcsCommit commit) { return(VcsStorageUtils.CorrectCommitCode(commit) ? PickCommit(commit) : PickLatestCommit(commit)); }