Утилита для создания сложных zip-архивов по скрипту, полезный инструмент разработчику

?
в блоге IT Pony!
Всем добрый день, уже два человека считают, что проект многим полезен, так что делаю отдельный пост.

Предыстория: меня так достала невозможность указать при создании zip-архива игр через консольный архиватор, в какой каталог внутри архива класть файлы, что сделал собственный скриптовый архиватор на основе 7-zip.

Репозиторий с исчерпывающим описанием и бинарный релиз:
github.com/tereshenkovav/SmartZipBuilder/

Разработано на Delphi, поддерживается компиляция через FreePascal.
Под катом обзор возможностей, описание пользы и пример реального скрипта.



Возможности:
  • Автоматическое удаление целевого файла при запуске построения архива
  • Установка имени целевого файла
  • Установка степени сжатия и алгоритма сжатия
  • Установка рабочего каталога в архиве (по умолчанию, используется корень архива)
  • Добавление конкретного файла в архив с возможным изменением имени
  • Добавление файлов по маске в архив
  • Добавление каталога в архив и всех вложенных подкаталогов
  • Добавление строки в указанный файл в архиве
  • Поддержка переменных среды как строк в скрипте
  • Поддержка аргументов архиватора как строк в скрипте
  • Поддержка имен файлов и каталогов с пробелами, при использовании двойных кавычек
  • Поддержка русских имен файлов и каталогов при кодировании файла скрипта в UTF-8

В чём польза для разработчика, который регулярно собирает дистрибутивы в виде архивов? В возможности один раз написать скрипт формирования архива, и далее вызывать его в пакетном файле.
Первая выгода — не нужно использовать временный каталог, куда копируются данные, можно сразу указать, в какой каталог что кладём.
Вторая выгода — если в архив нужно записать какие-то строки, например, конфигурацию — это делается опять же одной командой, без временных файлов.
Третья выгода — если какая-то команда скрипта прошла с ошибкой, то выполнение прерывается, но старый файл архива — удаляется в любом случае. Это исключает выпуск битого архива, куда не вошел какой-то важный файл. Обычный архиватор просто пропускает удаление, кидая в консоль предупреждение, но поди еще его угляди.

Уже перевел на проект системы сборки почти всех своих игр, а чуть позже, и в коммерческих разработках заменю. Доволен как слон.

Пример скрипта для моего проекта игры:
SetCompressor LZMA
SetCompressionLevel 9
ZipFile PonyRubyGrabber-$LANGH$-%VERSION%-Win32.zip

Dir ..\..\data

SetOutPath data\texts
Text $LANGL$\r\n deflang

SetOutPath bin
File ..\..\bin\PonyRubyGrabber.exe
Files ..\..\PascalGameEngine\csfml\win32\*.dll


PS: Необходимое примечание — использовать осторожно, потому что сделано быстро, и толком не тестировалось. Как минимум, после сборки разок проверить архив вручную стоит.
PPS: Пожелания по улучшению и прямые доработки приветствуются, благо, исходник открыт.

11 комментариев

В ленту разработчикам, даром, на пользу.
NTFS
+4
Пользительная штука…
Opaline_Arcana
+2
Удивлен, что не нашел готовых решений, наверняка они есть, просто не рекламируются поиском.
Ну или всё работают так: складываем в %TEMP%, изнашиваем SSD, потом пакуем в архив.
NTFS
+1
Или клепают под себя питонячий скрипт сборочный (под линухом то 99%), куда и пихают все че надо
Opaline_Arcana
+1
Минусы питонов и прочих — что для работы скрипта на питоне нужен питон. И желательно, правильной версии.
Данная же утилита — запускается без зависимостей, не считая включенной в релиз 7z.dll, на Win32 и Win64.

Под Linux релиза нет и не будет, потому что там мне не нужны сборки zip-архивов — всё публикую в AppImage
NTFS Изменён автором
+1
Это да — под виндой питонятина бесячая
Opaline_Arcana
+2
То что надо
Brid
+2
Думаю ещё добавить условные директивы, тогда будет возможно включать файлы по ключам скрипта, создавая разные версии дистрибутивов.
NTFS
+2
Табун полезный
vlad2005vlad
+2
На будущем может пригодиться
cuberryalyublyuponi
+2
Ммм, это почти cpack на минималках! Интересная тулза, да.
(мне в своё время нужна была подобная штука для сборки deb-ов и я писал костыль на баше с использованием dpkg-deb, но там да, структуру каталогов приходилось создавать заранее).
makise_homura
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Скрыто Показать