Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2008-09-23 08:02:04 ЛС | профиль | цитата
Ни для кого не секрет, что существующий механизм работы с дополнительных (ака "потусторонними" (с)) элементами в HiAsm-е не просто далёк от совершенства - практически отсутствует. Тема эта всплывала не раз, но воз и ныне там.

Для тех, кто не в курсе этой проблемы, поясняю: при любом обновлении среды - будь то через SVN или через установку новой версии поверх - теряются установленные дополнительные элементы. Точнее, теряется их регистрация в среде (сами файлы никуда не деваются).

Собственно, было предложено несколько решений проблемы:
Метод 1. Вручную переустанавливать нужные элементы перетаскиванием ini-файла в окно HiAsm-а
Метод 2. Создать единый his-файл, устанавливающий одним махом все нужные элементы
Метод 3а. Написать внешний менеджер установки файлов, который бы вызывался вместо hiasm при открытии his-файлов, копировал информацию об устанавливаемом элементе (элементах) и передавал His-файл дальше HiAsm-у
Метод 3б. Написать менеджер из 3а в виде плагина к HiAsm-у
Метод 4 (максимальный). Написать единую программу обновления HiAsm-а и компонентов, объединяющую возможности SVN и hiUpdate.

Вот про 4й метод я и хочу поговорить. Сейчас готов скелет программы, занимающейся автоматическим обновлением с SVN с сохранением регистрации дополнительных элементов. Идея проста: сравнивая sql-код имеющейся базы Elements.db с кодом, хранящимся на SVN, можно получить набор различий. Останется только отфильтровать их (при участии пользователя) и применить к существующей базе.

Так как программу я пишу не только для себя, а для всех, то хотелось бы привлечь форумчан к разработке и обсуждению. Я не буду здесь касаться вопроса получения sql-кодов (это уже изучено). Допустим, что исходные sql-файлы уже лежат в рабочей директории (напр. HiAsmElementsDelphi), и называются Elements.sql (копия с SVN) и el.sql (локальная база). Примерный алгоритм обработки этих файлов такой:

  • В каждом из файлов убрать строки вида INSERT INTO "sqlite_sequence"
  • Для всех строк, начинающихся с INSERT INTO, заменить "VALUES(число" на "VALUES(NULL"
  • Используя утилиту GNU diff, получить файл, содержащий изменения файлов друг относительно друга
  • (самый сложный этап) Используя диалог с пользователем, выбрать изменения, которые необходимо схранить (т.е., записи о дополнительных компонентах).
  • (муторный этап) Привести в порядок позиции элементов в пределах вкладок. Опция: в случае конфликта, приоритет имеют (штатные|дополнительные) элементы
  • Готовый файл сохранить и применить утилиту GNU patch для внесения изменений в файл el.sql
  • Исправленый el.sql превратить обратно в Elements.db

На первом этапе анализа проблемы я бы хотел увидеть наборски интерфейса для этапа отбора изменений. Позже вложу готовую часть GUI.
карма: 1

0