XDelta Recursive Patch Maker :: Программы :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » XDelta Recursive Patch Maker

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Vsalat

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
 
Recursive Patch Maker (RPM) - утилита предназначенная для создания бинарных патчей. С ее помощью вы сможете с легкостью сопоставить две версии файлов и записать разницу между ними для последующего обновления.  
 
Данная утилита является полностью консольной и как понятно из заголовка основана на другой утилите под названием xDelta.
Естественно существуют программы для осуществления операции по созданию патча из директории, однако 99% из них имеют убогий и неудобный интерфейс с нечитабельными настройками. Ко всему прочему добрая часть из них не предоставляет возможности собрать свой инсталлятор, что в свою очередь ведет к ограничению вариативности.
 



Чем же так хорош RPM?
 
1. Основан на проверенных утилитах xdelta, bincomp, freearc.
2. Создает и применяет рекурсивные «заплатки».
3. Простая, понятная и минималистичная настройка параметров.
4. Последующее использование с Inno компилятором.
 



Структура приложения
 
- modules
-- modules\arc.exe (модуль freearc, предназначен для архивации)
-- modules\arc.sfx (расширение freearc, для создания sfx архивов)
-- modules\bincomp.exe (утиль для проверки различий между файлами)
-- modules\xdelta3.exe (последняя стабильная версия 3.0.11)
- builder.exe
- config.ini (конфигурационный файл для билдера)
- patcher.exe
 



Использование билдера
 
Ниже представлена дефолтная конфигурация для билдера. Разберем ее параметры по порядку.
 
[COMPARING]
Original — Папка с исходными/оригинальными файлами
Modified — Папка с измененными файлами, которые должны быть получены после применения патча
 
[FLTERS]
excludefolders — Папки которые будут исключены из списка патчей ["FolderName", "FolderName\Subfolder"]
excludefiles — Файлы которые будут исключены из списка патча ["FileName.exe", "*Name", "Name*", "*Name*"]
excludeexts — Файлы с расширениями которые будут исключены из списка патча ["*.dll", "*.txt"]
 
[FILENAMES]
Filelist — Название файла с списком путей модифицированной папки (это просто текстовый файл. имя и расширение может быть абсолютно любыми)
Missedfolder — Название директории в которой будут храниться отсутствующие файлы из мод. папки
Patchfolder — Название директории в которой будут храниться созданные файлы патчей
 
[COMPRESSION]
Compressing — Параметр отвечающий за вкл или откл компрессии с помощью Freearc
Arcpass — Пароль архива (пустой по дефолту)
 

Код:
 
; Comparing folders
[COMPARING]
original=C:\Windows
modified=D:\Windows
 
; Add `*` as any symbol and any length. Leave empty [] if you dont need any rules.
; To exclude folders or subfolders ["FolderName", "FolderName\Subfolder"]
; To exclude files by full name ["FileName.exe"], by a part of name ["*Name", "Name*", "*Name*"]
; To exclude files with specific extension ["*.dll", "*.txt"]
[FILTERS]
excludefolders=[]
excludefiles=[]
excludeexts=[]
 
; Update folder, Patch folder, Files list
[FILENAMES]
missedfolder=rpm_update
patchfolder=rpm_patch
fileslist=fileslist.info
 
; Enable/Disable archiving [0|1]
; You cant use special chars in password(!@#$%^&*()+{}[]><?|\/:; etc.)
[COMPRESSION]
compressing=0
arcpass=
 

 



Использование патчера
 
В следующем листинге перечислены доступные на данный момент внешние передаваемые параметры.
-t — Заголовок отображаемый в консоли и последующих блоках внутри скрипта *
-n — Название директории в которой будет производится применение патчей
-p — Название директории в которую будет распаковываться архив с патчами
-u — Название директории в которую будет распаковываться архив с обновлениями
-l — Название файла с списком путей  
-psw — Пароль, если был задан в конфиге
 
Использование кириллических символов возможно, но нежелательно
Дефисы передаваемые в параметрах будут заменены на пробелы ( -t My-Patch-Name => -t My Patch Name )
Параметры содержащие пробельные символы заключайте в кавычки ( "My Application Title" )
 
-t [title] (default: Recursive Patch Maker)
-n [patched folder name] (default: rpm_new)
-p [patch folder name] (default: rpm_patch)
-u [update folder name] (default: rpm_update)
-l [file with pathes list] (default: fileslist.info)
-psw [archive password] (default: null)
 



Скрипт Inno Setup
 
В следующем листинге представлен самый простой скрипт для Inno, позволяющий создать установочный визард.
В дефайнах для удобства заданы переменные, которые изменяются в соответствии с создаваемым патчем. Для их работы обязательно должен быть включен препроцессор.  
Все они разбиты на отдельные сорсы, однако возможно использование и из директории (Source: {#rpmPath}{#updFolder }*;)
 
appID — ID созданного ранее в Inno Setup визарда (опционально)  
appName — Название приложения
version — Версия
rpmPath — Путь до папки с утилитой RPM
updFolder — Название папки с патчем, созданной RPM
patcherName — Название исполняемого файла (по умолчанию patcher.exe)
updName — Название exe архива с обновлением  
patchName — Название exe архива с патчем
fileListName — Название файла с списком путей
parameters — Параметры для RPM патчера
 

Код:
 
#define appID '36E6CAF2-C966-44E3-A0FB-339CC862C640'
#define appName 'Demo Patcher'
#define version '0.0.1'
#define rpmPath 'С:\RPM [build 1.0.0]'
#define updFolder '20151107.53638'
#define patcherName 'patcher'
#define updName 'rpm_update'
#define patchName 'rpm_patch'
#define fileListName 'fileslist.info'
#define parameters '-t "Заголовок"'
 
[Setup]
AppID={{{#appID}}
AppName={#appName} - Update {#version}
AppVersion={#version}
DefaultDirName={pf}\{#appName}
OutputDir=D:\
OutputBaseFilename=-01-{#appName}-{#version}
SolidCompression=true
UsePreviousAppDir=true
AppendDefaultDirName=false
DirExistsWarning=false
Uninstallable=false
Compression=lzma2/Ultra64
InternalCompressLevel=Ultra64
 
[Files]
Source: {#rpmPath}\{#patcherName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\modules\xdelta3.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#updName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#patchName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#fileListName}; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
 
[Run]
Filename: {app}\{#patcherName}.exe; Parameters: "{#parameters}"; WorkingDir: {app}; StatusMsg: Updating..;

 
   
 

 



Скачать:
v1.0.0 — https://sourceforge.net/projects/xdeltapatchmaker
 



Всего записей: 10 | Зарегистр. 02-08-2011 | Отправлено: 05:35 09-08-2016 | Исправлено: Maz, 17:08 08-02-2025
MrTokio



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отчный продукт, есть смысл ждать его развития?

Всего записей: 233 | Зарегистр. 20-10-2007 | Отправлено: 23:56 18-01-2020
Vsalat

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Отчный продукт, есть смысл ждать его развития?

Сомневаюсь. Тупиковая ветка. Существует гит система к тому же реверсивная.
Хотя периодически сам пользуюсь дельтой для очень крупных директорий, 50Гб+. Возможно пофикшу баги с компрессией и сделаю гуи, но неизвестно когда это произойдет.

Всего записей: 10 | Зарегистр. 02-08-2011 | Отправлено: 05:10 22-03-2020
Dimoks

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Версия 1.0.4
Починил работу с архивами. В builder сделал переход в папку timestamp перед архивацией, в patcher добавление параметра пароля для распаковки только тогда, когда он указывается в -psw.
 
Нужно иметь ввиду, что в качестве исходника должна быть полная версия со всеми папками и файлами, а вот в источнике обновлённых файлов можно держать только изменённые и новые.
Если в качестве исходника будет неполная версия, то при обновлении потрутся все файлы, не вошедшие в список fileslist.info, получаемый при создании патча. Этот список можно редактировать после создания патча.

Всего записей: 3 | Зарегистр. 25-03-2018 | Отправлено: 23:31 07-02-2025 | Исправлено: Dimoks, 18:25 09-02-2025
persicum

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В принципе, для патчей можно приспособить коды рида-соломона. Будет очень медленно, малоэффективно, несжимаемо... Но зато можно любые похожие версии файлов превращать в целевую версию, а не только одну какую-то бит-в-бит определенную.

Всего записей: 626 | Зарегистр. 27-06-2007 | Отправлено: 00:10 08-02-2025
Dimoks

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Там ошибку я допустил. Новые файлы совсем не извлекаются…
 
Добавлено:
Исправил ошибку.

Всего записей: 3 | Зарегистр. 25-03-2018 | Отправлено: 01:32 08-02-2025 | Исправлено: Dimoks, 01:57 08-02-2025
Dimoks

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У FreeArc arc.exe в modules всё-таки можно реализовать архивацию без перехода в папку timestamp.
Например у нас такие папки:
 
timestamp\rpm_patch
 
Чтобы заархивировать только папку rpm_patch, нужно написать такую часть команды:
 
"Путь\к\arc.exe" a -r -ep1 -aprpm_patch timestamp\rpm_patch timestamp\rpm_patch\*

Всего записей: 3 | Зарегистр. 25-03-2018 | Отправлено: 17:06 08-02-2025 | Исправлено: Dimoks, 10:53 09-02-2025
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Программы » XDelta Recursive Patch Maker


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru