diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 2303b63..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,81 +0,0 @@ -cmake_minimum_required(VERSION 3.14) - -project(snag) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -include(snag_version) -string(TIMESTAMP PROJECT_VERSION_BUILD "%y%j.%H%M") -if(GIT_HASH_VERSION) - message(STATUS "GIT_HASH_VERSION is set") - include(snag_git) -endif() -include(snag_platforms) - -set(CMAKE_BUILD_TYPE "Release") -if(CMAKE_BUILD_TYPE) - set(BUILD_TYPE ${CMAKE_BUILD_TYPE}) -else() - set(BUILD_TYPE "Debug") -endif() - -set(PROJECT_VERSION_CODENAME ${OS_RELEASE_VERSION_CODENAME}) -set(PROJECT_VERSION_DISPLAY "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_BUILD}") -message(STATUS "PROJECT_VERSION_CODENAME: ${PROJECT_VERSION_CODENAME}") -message(STATUS "PROJECT_VERSION_DISPLAY: ${PROJECT_VERSION_DISPLAY}") -message(STATUS "") - -# Deb package -set(DEB_PACKAGE_VERSION "${PROJECT_VERSION_DISPLAY}${PROJECT_VERSION_SUFFIX}${GIT_VERSION_SUFFIX}") -if(PROJECT_VERSION_CODENAME) - set(DEB_PACKAGE_VERSION "${DEB_PACKAGE_VERSION}-${PROJECT_VERSION_CODENAME}") -endif() -set(DEB_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") -string(TIMESTAMP DEB_PACKAGE_CHANGELOG_DATE "%a, %d %b %Y %H:%M:%S +0000") - -configure_file( - "${CMAKE_SOURCE_DIR}/debian/changelog.in" - "${CMAKE_SOURCE_DIR}/debian/changelog" -) - -configure_file( - "${CMAKE_SOURCE_DIR}/source/snag/version_.d.in" - "${CMAKE_SOURCE_DIR}/source/snag/version_.d" -) - -message(STATUS "DEB_PACKAGE_NAME: ${DEB_PACKAGE_NAME}") -message(STATUS "DEB_PACKAGE_VERSION: ${DEB_PACKAGE_VERSION}") -message(STATUS "") - -file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/bin") - -add_custom_command( - OUTPUT "${CMAKE_SOURCE_DIR}/bin/${CMAKE_PROJECT_NAME}" - COMMAND build dlang ldc --output "${CMAKE_SOURCE_DIR}/bin" --project "${CMAKE_SOURCE_DIR}" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - COMMENT "Building snag with dub" -) - -add_custom_target(snag ALL - DEPENDS "${CMAKE_SOURCE_DIR}/bin/${CMAKE_PROJECT_NAME}" -) - -include(snag_patch) - -add_dependencies(snag apply_config_patch) - -install( - FILES "${CMAKE_SOURCE_DIR}/bin/${CMAKE_PROJECT_NAME}" - DESTINATION bin - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ -) - -install( - FILES "${CMAKE_SOURCE_DIR}/files/snag.json.bak" - DESTINATION /etc/snag/ - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ -) - -install( - FILES "${CMAKE_SOURCE_DIR}/files/snag.8" - DESTINATION /usr/share/man/ru/man8/ - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ -) diff --git a/cmake/snag_git.cmake b/cmake/snag_git.cmake deleted file mode 100644 index fe97527..0000000 --- a/cmake/snag_git.cmake +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.6) - -find_package(Git) - -if(GIT_FOUND) - # Получаем короткий хэш текущего коммита - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_SHORT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - # Проверяем, успешно ли получен хэш - if(GIT_SHORT_HASH) - message(STATUS "Git short hash: ${GIT_SHORT_HASH}") - set(GIT_VERSION_SUFFIX "-${GIT_SHORT_HASH}") - else() - message(WARNING "Failed to retrieve Git short hash") - endif() -endif() diff --git a/cmake/snag_patch.cmake b/cmake/snag_patch.cmake deleted file mode 100644 index 8e438da..0000000 --- a/cmake/snag_patch.cmake +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.6) - -find_program(PATCH_EXECUTABLE patch) -if(NOT PATCH_EXECUTABLE) - message(FATAL_ERROR "Patch utility not found! Install patch tool before continuing.") -endif() - -set(PATCH_FILE "${CMAKE_SOURCE_DIR}/patches/config.patch") -set(PATCH_MARKER_FILE "${CMAKE_BINARY_DIR}/.config_patch_applied") - -if(NOT EXISTS "${PATCH_FILE}") - message(WARNING "Patch file not found: ${PATCH_FILE}") -endif() - -add_custom_command( - OUTPUT "${PATCH_MARKER_FILE}" - COMMAND "${PATCH_EXECUTABLE}" -p1 -i "${PATCH_FILE}" --reject-file=- --silent || exit 0 - COMMAND cmake -E touch "${PATCH_MARKER_FILE}" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - COMMENT "Applying config.patch..." - VERBATIM -) - -add_custom_target(apply_config_patch - DEPENDS "${PATCH_MARKER_FILE}" -) diff --git a/cmake/snag_platforms.cmake b/cmake/snag_platforms.cmake deleted file mode 100644 index 5608fef..0000000 --- a/cmake/snag_platforms.cmake +++ /dev/null @@ -1,59 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -if (NOT WIN32) - set (OS_RELEASE_FILE "/etc/os-release") - file(STRINGS ${OS_RELEASE_FILE} OS_RELEASE) -else () - list(APPEND OS_RELEASE "ID=${CMAKE_SYSTEM_NAME}") -endif () - -foreach(_line IN LISTS OS_RELEASE) - if (_line STREQUAL "") - continue() - endif() - string(REPLACE "=" ";" _pair "${_line}") - list(GET _pair 0 _name) - list(GET _pair 1 _value) - set(OS_RELEASE_${_name} ${_value}) -endforeach() - -if (${OS_RELEASE_ID} MATCHES "altlinux") - string(REGEX REPLACE "[\"\.]" "" alt_branch_id ${OS_RELEASE_ALT_BRANCH_ID}) - set (OS_RELEASE_VERSION_CODENAME "${alt_branch_id}") -elseif (${OS_RELEASE_ID} MATCHES "astra") - #string(REGEX REPLACE "_x86-64$" "" _version ${OS_RELEASE_VERSION_CODENAME}) - file(STRINGS "/etc/astra_version" _version) - string(REGEX REPLACE "\\.|\t|\n|\r" "" _version ${_version}) - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_VERSION_CODENAME}") - if (${OS_RELEASE_VERSION_CODENAME} MATCHES "4.7_arm") - set (OS_RELEASE_VERSION_CODENAME "astra47") - elseif (NOT ${OS_RELEASE_VERSION_CODENAME} MATCHES "orel") - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_ID}${_version}") - else () - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_VERSION_CODENAME}") - endif() -elseif (${OS_RELEASE_ID} MATCHES "debian") - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_VERSION_CODENAME}") -elseif (${OS_RELEASE_ID} MATCHES "centos") - string(REGEX REPLACE "[\"\.]" "" version_id ${OS_RELEASE_VERSION_ID}) - set (OS_RELEASE_VERSION_CODENAME "el${version_id}") -elseif (${OS_RELEASE_ID} MATCHES "fedora") - set (OS_RELEASE_VERSION_CODENAME "f${OS_RELEASE_VERSION_ID}") -elseif (${OS_RELEASE_ID} MATCHES "freebsd") - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_NAME}") -elseif (${OS_RELEASE_ID} MATCHES "msys2") - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_ID}") -elseif (${OS_RELEASE_ID} MATCHES "ubuntu") - set (OS_RELEASE_VERSION_CODENAME "${OS_RELEASE_UBUNTU_CODENAME}") -elseif (${OS_RELEASE_ID} MATCHES "sberlinux") - string(REGEX REPLACE "[\"\.]" "" version_id ${OS_RELEASE_VERSION_ID}) - set (OS_RELEASE_VERSION_CODENAME "sl${version_id}") -elseif (${OS_RELEASE_ID} MATCHES "Windows") - set (OS_RELEASE_VERSION_CODENAME "win") -else () - set (OS_RELEASE_VERSION_CODENAME "") -endif() - -MESSAGE(STATUS "OS_RELEASE_ID: ${OS_RELEASE_ID}") -MESSAGE(STATUS "OS_RELEASE_VERSION_CODENAME: ${OS_RELEASE_VERSION_CODENAME}") -MESSAGE(STATUS "") diff --git a/cmake/snag_version.cmake b/cmake/snag_version.cmake deleted file mode 100644 index e5d7c23..0000000 --- a/cmake/snag_version.cmake +++ /dev/null @@ -1,28 +0,0 @@ -cmake_minimum_required (VERSION 3.6) - -# Сохраняем копию файла с версией программы и каждый раз обновляем при конфигуре через Cmake -if(EXISTS "${CMAKE_SOURCE_DIR}/source/snag/version_.d.bak") - configure_file( - "${CMAKE_SOURCE_DIR}/source/snag/version_.d.bak" - "${CMAKE_SOURCE_DIR}/source/snag/version_.d" - COPYONLY - ) -else() - configure_file( - "${CMAKE_SOURCE_DIR}/source/snag/version_.d" - "${CMAKE_SOURCE_DIR}/source/snag/version_.d.bak" - COPYONLY - ) -endif() - -# Чтение файла version_.d -file(READ "${CMAKE_SOURCE_DIR}/source/snag/version_.d" VERSION_FILE_CONTENT) - -# Извлечение строки версии (например, "0.1.0-alpha.1") -string(REGEX MATCH "snagVersion = \"([0-9]+)\\.([0-9]+)\\.([0-9]+)([^\"]*)\"" _ ${VERSION_FILE_CONTENT}) - -# Установка переменных для мажорной, минорной, патч-версии и суффикса -set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) -set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) -set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3}) -set(PROJECT_VERSION_SUFFIX ${CMAKE_MATCH_4}) diff --git a/debian.md b/debian.md deleted file mode 100644 index 1cb700c..0000000 --- a/debian.md +++ /dev/null @@ -1,6 +0,0 @@ -# Сборка из под Debian - -``` -cmake . -DGIT_HASH_VERSION=ON -dpkg-buildpackage -us -uc -nc -``` diff --git a/debian/.gitignore b/debian/.gitignore deleted file mode 100644 index 14331c5..0000000 --- a/debian/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.debhelper -*.debhelper -*.debhelper.log -changelog -debhelper-build-stamp -termidesk-lsb -termidesk-lsb.substvars -files -tmp - diff --git a/debian/changelog.in b/debian/changelog.in deleted file mode 100644 index 962b128..0000000 --- a/debian/changelog.in +++ /dev/null @@ -1,6 +0,0 @@ -${DEB_PACKAGE_NAME} (${DEB_PACKAGE_VERSION}) stable; urgency=medium - - * Release snag ${DEB_PACKAGE_VERSION} - - -- Alexander Zhirov ${DEB_PACKAGE_CHANGELOG_DATE} - diff --git a/debian/compat b/debian/compat deleted file mode 100644 index b4de394..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -11 diff --git a/debian/control b/debian/control deleted file mode 100644 index a4d4abd..0000000 --- a/debian/control +++ /dev/null @@ -1,14 +0,0 @@ -Source: snag -Maintainer: Alexander Zhirov -Section: non-free/admin -Priority: optional -Build-Depends: debhelper (>= 11), cmake -Homepage: https://zhirov.kz - -Package: snag -Architecture: any -Section: non-free/admin -Priority: optional -Description: Сommand-line utility for creating, managing, and restoring data snapshots -Depends: git (>= 2.30) -Homepage: https://zhirov.kz diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 0f12aca..0000000 --- a/debian/rules +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/make -f - -BUILD_SYSTEM = --buildsystem=cmake -DEBIAN_DIR = $(CURDIR)/debian -DEST_DIR = $(DEBIAN_DIR)/snag - -%: - dh $@ $(BUILD_SYSTEM) - -override_dh_auto_configure: - cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr -DGIT_HASH_VERSION=ON - -override_dh_auto_build: - cmake --build build - -override_dh_auto_test: - # Ничего не делаем, тесты отсутствуют - -override_dh_auto_install: - DESTDIR=$(DEST_DIR) cmake --install build - -override_dh_shlibdeps: - # Отключить проверку зависимостей от *.so diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 89ae9db..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (native) diff --git a/files/snag.8 b/files/snag.8 deleted file mode 100644 index 0ee9aa2..0000000 --- a/files/snag.8 +++ /dev/null @@ -1,324 +0,0 @@ -.\" Man-страница для snag -.\" Сгенерирована из документации Markdown -.TH SNAG 1 "30 мая 2025" "1.0" "Команды пользователя" -.SH НАЗВАНИЕ -snag \- утилита для создания, управления и восстановления снимков данных -.SH СИНТАКСИС -.B snag -[\fIфлаги\fR] [\fIопции\fR] \fIкоманда\fR -.SH ОПИСАНИЕ -.B snag -(snapshot git) — это утилита командной строки для создания, управления и восстановления снимков данных. Она позволяет импортировать, экспортировать, создавать и восстанавливать снимки, а также управлять правилами отслеживания файлов. -.SH ФЛАГИ -.TP -.BR \-h ", " \-\-help -Выводит справку. -.TP -.BR \-\-version -Выводит версию утилиты. -.SH ОПЦИИ -.TP -.BR \-c ", " \-\-config " <путь>" -Указывает путь к файлу конфигурации. -.SH КОМАНДЫ -.TP -.B init -Инициализация репозитория для хранения снимков. -.RS -.B snag init -[\-h] [\-f] -.TP -.BR \-f ", " \-\-force -Перезаписывает существующий репозиторий. -.RE -.TP -.B create -Создание нового снимка. -.RS -.B snag create -[\-h] [\-\-no\-pre] [\-\-no\-post] [\-c <комментарий>] [\-a <автор>] [\-e ] -.TP -.BR \-\-no\-pre -Выполнение без предкоманд. -.TP -.BR \-\-no\-post -Выполнение без посткоманд. -.TP -.BR \-c ", " \-\-comment " <значение>" -Указывает комментарий к снимку. -.TP -.BR \-a ", " \-\-author " <значение>" -Указывает автора снимка. -.TP -.BR \-e ", " \-\-email " <значение>" -Указывает email автора. -.RE -.TP -.B import -Импорт снимка из архива tar.gz. -.RS -.B snag import -[\-h] [\-\-no\-pre] [\-\-no\-post] [\-c <комментарий>] [\-a <автор>] [\-e ] <путь_к_архиву> -.TP -.BR \-\-no\-pre -Без выполнения предкоманд. -.TP -.BR \-\-no\-post -Без выполнения посткоманд. -.TP -.BR \-c ", " \-\-comment " <значение>" -Комментарий к снимку. -.TP -.BR \-a ", " \-\-author " <значение>" -Автор снимка. -.TP -.BR \-e ", " \-\-email " <значение>" -Email автора. -.TP -.BR <путь_к_архиву> -Путь к файлу tar.gz. -.RE -.TP -.B export -Экспорт снимка в архив tar.gz. -.RS -.B snag export -[\-h] [\-s <хэш_снимка>] <путь_к_папке> -.TP -.BR \-s ", " \-\-snapshot " <хэш>" -Указывает хэш снимка. -.TP -.BR <путь_к_папке> -Путь к папке для сохранения архива. -.RE -.TP -.B restore -Восстановление состояния из указанного снимка. -.RS -.B snag restore -[\-h] [\-\-no\-pre] [\-\-no\-post] <хэш_снимка> -.TP -.BR \-\-no\-pre -Без выполнения предкоманд. -.TP -.BR \-\-no\-post -Без выполнения посткоманд. -.TP -.BR <хэш_снимка> -Хэш восстанавливаемого снимка. -.RE -.TP -.B list -Вывод списка снимков. -.RS -.B snag list -[\-h] [\-c] [\-a] [\-e] -.TP -.BR \-c ", " \-\-comment -Показать комментарии к снимкам. -.TP -.BR \-a ", " \-\-author -Показать авторов снимков. -.TP -.BR \-e ", " \-\-email -Показать email авторов. -.RE -.TP -.B diff -Показ изменённых данных. -.RS -.B snag diff -.RE -.TP -.B status -Проверка статуса отслеживаемых файлов. -.RS -.B snag status -.RE -.TP -.B size -Отображение размера снимков. -.RS -.B snag size -.RE -.TP -.B rules -Управление правилами отслеживания. -.RS -.B snag rules -[\-h] save|show|update|reset|clear -.TP -.B save -Сохраняет правила. -.TP -.B show -Показывает правила. -.RS -.B snag rules show -[\-h] [\-c] -.TP -.BR \-c ", " \-\-config -Показать правила из файла конфигурации. -.RE -.TP -.B update -Обновляет правила. -.RS -.B snag rules update -[\-h] [\-r] -.TP -.BR \-r ", " \-\-remove -Удаляет игнорируемые файлы из отслеживания (требуется осторожность). -.RE -.TP -.B reset -Сбрасывает правила до состояния внесенных изменений. -.TP -.B clear -Очищает правила. -.RE -.SH ПРИМЕРЫ -.TP -Инициализация репозитория: -.RS -.B snag init -.RE -.TP -Создание снимка с комментарием: -.RS -.B snag create -c \(dqНачальный снимок\(dq -a \(dqИван Иванов\(dq -e \(dqivan@example.com\(dq -.RE -.TP -Импорт снимка из архива: -.RS -.B snag import archive.tar.gz -.RE -.TP -Экспорт снимка: -.RS -.B snag export -s abc123 /path/to/output -.RE -.TP -Восстановление снимка: -.RS -.B snag restore abc123 -.RE -.TP -Просмотр списка снимков с комментариями: -.RS -.B snag list -c -.RE -.TP -Обновление правил отслеживания: -.RS -.B snag rules update -.RE -.SH КОНФИГУРАЦИЯ -.B snag -поддерживает настройку через конфигурационный файл в формате JSON, который задаётся с помощью опции -.B -c -или -.B --config. -Этот файл определяет параметры работы утилиты, включая пути, автора, команды для выполнения до и после создания снимков, а также правила отслеживания файлов. - -Пример использования конфигурационного файла: -.RS -.B snag -c /path/to/config.json create -.RE - -.SS Пример конфигурационного файла -.nf -{ - "git": "/path/to/git/repository/dir", - "project": "/path/to/project", - "email": "user@site.domain", - "author": "snag", - "presnag": [ - "systemctl stop my.service" - ], - "postsnag": [ - "systemctl start my.service" - ], - "rules": { - "tracking": [ - "/first_dir/", - "/second_dir/*.conf", - "/second_dir/more/" - ], - "ignore": [ - "/second_dir/more/*.so" - ] - } -} -.fi - -.SS Описание полей конфигурационного файла -.TP -.B git (строка) -Путь к репозиторию для хранения снимков (например, /path/to/git/repository/dir). -.TP -.B project (строка) -Путь к проекту или директории, файлы которой отслеживаются (например, /path/to/project). -.TP -.B email (строка) -Email автора снимков (например, user@site.domain). Переопределяется опцией -.B -e -или -.B --email. -.TP -.B author (строка) -Имя автора снимков (например, snag). Переопределяется опцией -.B -a -или -.B --author. -.TP -.B presnag (массив строк) -Список команд, выполняемых перед созданием или импортом снимка (если не указан -.B --no-pre). -Пример: systemctl stop my.service. -.TP -.B postsnag (массив строк) -Список команд, выполняемых после создания или импорта снимка (если не указан -.B --no-post). -Пример: systemctl start my.service. -.TP -.B rules (объект) -Определяет правила отслеживания файлов. -.RS -.TP -.B tracking (массив строк) -Список шаблонов файлов или директорий для отслеживания (например, /first_dir/, /second_dir/*.conf, /second_dir/more/). -.TP -.B ignore (массив строк) -Список файлов или директорий, исключаемых из отслеживания (например, /second_dir/more/*.so). -.RE -.SS Примечания -.IP \(bu 4 -Правила в разделе -.B rules -можно обновлять с помощью -.B snag rules update -или просматривать с помощью -.B snag rules show -c. -.IP \(bu 4 -Параметры командной строки, такие как -.B -e -или -.B -a, -имеют приоритет над значениями из конфигурационного файла. -.IP \(bu 4 -Убедитесь, что пути, указанные в -.B git -и -.B project, -существуют и доступны для записи/чтения. -.IP \(bu 4 -Команды в -.B presnag -и -.B postsnag -должны быть корректными и доступными в системе, иначе операция может завершиться ошибкой. -.SH ЛИЦЕНЗИЯ -GPL-2.0. Подробности см. в файле LICENSE. -.SH КОНТАКТЫ -Для вопросов и предложений: alexander@zhirov.kz \ No newline at end of file diff --git a/files/snag.json.bak b/files/snag.json.bak deleted file mode 100644 index 4cf4d52..0000000 --- a/files/snag.json.bak +++ /dev/null @@ -1,16 +0,0 @@ -{ - "git": "", - "project": "", - "email": "", - "author": "", - "presnag": [ - ], - "postsnag": [ - ], - "rules": { - "tracking": [ - ], - "ignore": [ - ] - } -} diff --git a/patches/config.patch b/patches/config.patch deleted file mode 100644 index d436ffe..0000000 --- a/patches/config.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/source/app.d b/source/app.d -index a79b3f8..2872378 100644 ---- a/source/app.d -+++ b/source/app.d -@@ -148,7 +148,7 @@ int main(string[] args) - ) - .parse(args); - -- string configFile = argumets.option("config", "snag.json"); -+ string configFile = argumets.option("config", "/etc/snag/snag.json"); - - SnagConfig config; - diff --git a/source/snag/version_.d.in b/source/snag/version_.d.in deleted file mode 100644 index 9005846..0000000 --- a/source/snag/version_.d.in +++ /dev/null @@ -1,3 +0,0 @@ -module snag.version_; - -enum snagVersion = "${PROJECT_VERSION_DISPLAY}${PROJECT_VERSION_SUFFIX}${GIT_VERSION_SUFFIX}";