SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
Repository.hxx
См. документацию.
1
21#pragma once
22
24#include "ObjectStorage.hxx"
25#include "Index.hxx"
26
27#include <string>
28#include <vector>
29#include <memory>
30#include <filesystem>
31
37 * that form the building blocks of the version control system.
38 *
39 * @russian
40 * @namespace svcs::core
41 * @brief Основные структуры данных СКВ и модель объектов.
42 * @details Содержит фундаментальные типы объектов СКВ, такие как Blob, Tree, Commit,
43 * которые формируют строительные блоки системы контроля версий.
44 */
45namespace svcs::core {
46
58class Repository : public ISubject {
59private:
67 const std::filesystem::path root_path;
68
76 std::unique_ptr<ObjectStorage> objects;
77
87 std::vector<std::weak_ptr<IObserver>> observers;
88
96 std::unique_ptr<Index> index;
97
98public:
108 ~Repository() override;
109
119 explicit Repository(std::filesystem::path rpath);
120
131
141 bool init();
142
144
152 [[nodiscard]] bool is_initialized() const;
153
163 [[nodiscard]] const std::filesystem::path& getPath() const { return root_path; }
164
174 [[nodiscard]] ObjectStorage* getObjectStorage() const { return objects.get(); }
175
185 void attach(std::shared_ptr<IObserver> observer) override;
186
196 void detach(std::shared_ptr<IObserver> observer) override;
197
207 void notify(const Event& event) const override;
208
220 static std::shared_ptr<Repository> findRepository(const std::string& start_path = ".");
221
233 static bool isRepository(const std::string& path);
234
250 bool stageFile(const std::string& path);
251};
252
253}
Определяет интерфейс для компонента Subject (Издатель) шаблона Observer.
Определение структуры данных IndexEntry и структуры Index.
Управляет чтением, записью и жизненным циклом объектов СКВ на диске с использованием формата Git.
Управляет базой данных объектов системы контроля версий, включая сохранение и восстановление объектов...
Определения ObjectStorage.hxx:37
~Repository() override
Виртуальный деструктор.
Определения Repository.cxx:27
void detach(std::shared_ptr< IObserver > observer) override
Отсоединяет зарегистрированного наблюдателя.
Определения Repository.cxx:141
const std::filesystem::path & getPath() const
Получает корневой путь репозитория.
Определения Repository.hxx:95
ObjectStorage * getObjectStorage() const
Получает сырой указатель на управляемый экземпляр ObjectStorage для взаимодействия с базой данных.
Определения Repository.hxx:101
void notify(const Event &event) const override
Уведомляет всех прикрепленных наблюдателей о событии.
Определения Repository.cxx:153
void initializeDependencies()
Инициализирует внутренние зависимости репозитория.
Определения Repository.cxx:39
Repository(std::filesystem::path rpath)
Конструирует менеджер репозитория.
Определения Repository.cxx:32
bool stageFile(const std::string &path)
Подготавливает файл, хешируя его содержимое, сохраняя его в базе данных объектов и обновляя индекс по...
Определения Repository.cxx:209
static std::shared_ptr< Repository > findRepository(const std::string &start_path=".")
Статически ищет существующий репозиторий, начиная с заданного пути и поднимаясь вверх.
Определения Repository.cxx:166
bool is_initialized() const
Проверяет, полностью ли инициализирована и действительна структура репозитория.
Определения Repository.cxx:116
void attach(std::shared_ptr< IObserver > observer) override
Прикрепляет наблюдателя для получения событий.
Определения Repository.cxx:130
bool init()
Инициализирует базовую структуру репозитория (.svcs, objects, refs) на диске.
Определения Repository.cxx:45
static bool isRepository(const std::string &path)
Статически проверяет, является ли заданный путь корнем репозитория SVCS.
Определения Repository.cxx:194
Интерфейс Subject (Издатель) (Абстрактный Базовый Класс).
Определения ISubject.hxx:35
Основные структуры данных СКВ и модель объектов.