Closed VictorVG closed 4 years ago
Сейчас версию 1.7.0 проверяю - там я добавил рекурсию для локального каталога и мелкие ошибки пристрелил. Лучше подождать её - в целом готова, только на сети проверить и доки чуть поправить, а там и в коммит....
закоммитил, документацию пополнил так как добавил в мастера новую команду "Recursive calculate hashes for current dir", переделал команды работы с произвольным файлом или каталогом "UNC file" и "UNC dir" (для них в листинге будет полный UNC путь, для всех иных относительный от текущего каталога). Например:
для "UNC file" и "UNC dir":
SHA-256 (//SERVER/Share/test.txt) = <SHA256SUM>
SHA-256 (C:\Cat\test.txt) = <SHA256SUM>
для остальных команд:
SHA-256 (test.txt) = <SHA256SUM>
SHA-256 (Cat\test.txt) = <SHA256SUM>
То же, в Zip - IntChecker.Run.lua.zip
Переделал значительную часть внутренней логики скрипта с целью решения двух задач: упрощения работы пользователей и коррекции их ошибок, плюс дать им максимум возможеностей в работе с плагином (типа пусть завидуют кошки :) ).
Упрощение работы пользователей со скриптом - для этого команды работы "UNC file" и "UNC dir" объединены в команду "UNC path" и дальше автоматика смотрит что указал человек и считает хэши в зависимости от того на что указывает введённый операторм путь - если на каталог, то считаем хэши для всех находящихся в нём и его подкаталогах файлов, если это файл - посчитаем для него.
Если мы сказали сохранить хэши в файл, то они сохраняться в каталог на который указывает UNC путь, для файла в содержащем его каталоге. Если считали в каталоге на активной панели, то и хэши пишем в него.
Добавлена диагностика, конечно не идеальная, но сообщение "Integrity Checker: UNC path ... not exist or access denied or server is shutdown or user is not log-on!" хотя бы скажет что проверить, а ошибки ввода типа лишних слэшей на хвосте срипт сам правит.
В хэш файлы пишутся относительные пути вида
SHA-256 (test.txt) = <SHA256SUM>
SHA-256 (Cat\test.txt) = <SHA256SUM>
Демо скрипт тоже немного поправил добавив в него пример использования опции Quiet и подстановки параметров функций через local.
Изменения в скриптах отразил в доке и всё вместе закоммитил в общий тарбалл IntChecker.Run.lua.tar.xz и приаттачил в scripts.zip.
Да, я без переделки эту штуку не оставил - сейчас ядро переписал заново и добавил туда возможности и диагностику. Даже рабочий вариант выглядит иначе:
и возможности:
local function chex(hn,pth,ft,r)
--
-- The function of calculating file checksums with support for UNC paths,
-- controlled recursive processing of directories, partial correction of
-- input errors for UNC paths and checking the availability of the target
-- object (the user may not have access rights to it).
--
-- Input parameters:
--
-- hn - is hash algorithm name, string
-- pth - target UNC path, alvays string
-- ft - output record format code, integer: 0 - GNU (defaukt), 1 - BSD;
-- r - enable recursion flag, string or boolean: true - enable, false or
-- nil - disable (default);
--
-- Output:
--
-- s0 - calculated hash summ;
-- d0 - UNC path to the parent director;
-- err - error code is:
-- 0 - Success, no erros and s0 and d0 is valid,
-- 1 - Target not exist, s0 is invalid and d0 is UNC path,
-- 2 - Empty folder or no files found, s0 is empty and d0 is UNC path;
-- 3 - file Access Denied, Errors count greater 0, s0 exclude this files
-- st - statistics
статистика в скрипте задумана к выводу только при ошибках - в другом случае она мешает, а функа выводит параметры в порядке HASHSUM, base dir, err, stat что и видно на экране. Сейчас она реализует все варианты что умеет v1.8.0 плюс управляемую рекурсию в удалённом каталоге. Осталось придумать как поступить со случаем "В указанном каталоге есть выбраные файлы каталоги" и будет скорее всего Bump version up to 2.0 из-за смены значительной части внутренних алгоритмов. Собственно к этому всё и идёт.
Диагностика у нас есть, рекурсия - "Чего изволите-с?":) осталось с селекторами понять "А что с сего гуся можно получить?" и у нас будет не инструмент а конфетка, и пусть зелёные человечки с Тау Кита от зависти слюной исходят - ибо Мы - можем! Нас думать учили!.:)
Сейчас переписал ядро с нуля, так, что все счётные операции выполняются одной chex(), в том числе мы можем работать со смесью из выделенных каталогов и файлов. Пришлось с ней повозится - в старом коде при рекурсии возникала ошибка при наличии выделенных подкаталогов. Прибил, тестовый скрипт выводит картинку так:
для случая объект под курсором , и для смеси выделенных файлов и каталогов (именно это у меня и не получалось):
так что мы расширим и возможности и область применения плагина, и пусть нам завидуют кошки.:)
микробяку с показом пути в режимах "под курсором" и "селектед" я поправил, не будет, правда элементу 2И пришлось превратится в 2И-2И-ИЛИ, но сиё дело привычное, сделал. Убежусь что никаких фокусов не проявится - напишу оболочку, закоммичу. Этот как раз на тестовых испытаниях вылез...
Переписал всё управление заново, поправил демо и документацию. В итоге версия 1.9.0. Пришлось повозится, но я сделал то, чего у нас не было - полная поддержка UNC путей вне зависимости от того куда они указывают, и можем их использовать как фильтр. Например у нас на панели что-то выделено, а часть каталогов нам не нужна, Вот мы и задаём начальный каталог через UNC путь и в наш листинг попадут только те объекты которые в нём находятся, а панели и выделения мы не трогаем - зачем? :)
Закоммитил к себе табаллом - https://github.com/VictorVG/PLG/releases/tag/IntCheckerLua-190 и тут в Zip его же добавил IntChecker.Run.lua.zip
Эту версию уже можно коммитить - финальная. Поднимать номер версии до 2.0 не стал, хотя по объёму изменений - ~ 2/3 кода написано заново и переделаны алгоритмы в общем-то стоило бы, но общая идея интерфейса - пошаговый мастер сохранена, потому 1.9.0.
IntChecker.Run.lua v1.6.0
Переделка коснулась как самой функции chashex() в которой добавлены возможности расчёта хэша для произвольного файла или поддерева каталогов, в т.ч. расположенного вне текущей панели. Для этого мастер выводит запрос пути к пользователю и chashex() строит и обрабатывает рекурсивное дерево каталогов от указанного пользователем в качестве начального. Так же по возможности проверяется факт их существования и если они не существуют или не доступны операция пропускается, правда сообщение об ошибке тут я выводить не стал - стоит подумать как его сделать более информативным чем просто "Не получилось", а значит напрашивается диагностика. А это на будущее, когда появится ясность что и как тут должно быть.
Изменения отражены в script-docs.txt, сами файлы я закоммитил в тарбалл IntChecker.Run.lua.tar.xz и в аттаче IntChecker.Run.lua.zip . Кодировка UTF-8 с BOM - так с ними проблем будет меньше.
P.S.
Очередная порция чёрной магии - пришлось тут отшучивать на вопрос "А почему IntChecker.Run.lua по русски не ругается?" - сказал что мол коли ругательства прикручивать колдовать будет некогда.:)