OberonCore https://forum.oberoncore.ru/ |
|
Про diff для .odc https://forum.oberoncore.ru/viewtopic.php?f=47&t=4432 |
Страница 1 из 2 |
Автор: | Пётр Кушнир [ Четверг, 15 Август, 2013 17:37 ] |
Заголовок сообщения: | Про diff для .odc |
Вот тут товарищи через использование odcread пришли к возможности просматривать изменения текстовых документов ББ. Это прекрасно. Но есть несколько моментов. Во-первых, утилита odcread заброшена. Во-вторых, она написана на C++, идеологически неприятно. В-третьих, будучи одним из тех, кто реализовал конвертер бинарного формата .odc я понимаю, что содержимое бинарного файла не самоописательное, а правильность чтения Store из файла зависит от конкретной реализации кода. В связи с последним фактом стало понятно, что полноценная поддержка формата возможна только изнутри ББ. Ещё одним фактом, который останавливает от использования внешних утилит является то, что внешние утилиты примитивизируют навороченный бинарный формат до уровня plaintext. С моей точки зрения, индустрия, которая не может предоставить возможностей работать с чем-то, отличным от plaintext не нужна, поэтому пользоваться ею если и можно, то исключительно с позиции источника правильного способа хранения данных, а не с позиции бедных бинарных родственников. Поэтому, наряду с утилитой odcread предлагаю реализовать возможность для ущербных plaintext-инструментов хоть как-то понимать содержимое .odc-хранилища. Поэтому, я выдвинул своё видение оберон-решения данной проблемы в сообщении viewtopic.php?p=81466#p81466 Пётр Кушнир писал(а): В целом, если учитывать, что для двух .odc файлов невозможно найти универсальный способ выделения различий, а для узкой задачи отображения различий в системах CVS достаточно только примитивного plain-text отражения содержимого текстового файла ББ, есть предложение разработать специальный контрол версионности. По своим функциям он будет представлять мощный аналог контрола StdStamps, и внутри себя сможет содержать отображение текста исходника, например, отдельный детектируемый внешними инструментами непрерывный блок байтов, представляющий текст формате utf8, который смогут читать внешние инструменты, типа diff-плагина и в то же время, такой расширенный Stamp уже внутри ББ сможет предоставлять функции версионности на уровне отдельного документа, с возможностью просмотра диффоф и так далее. То есть, выделяются две основные функции:
А для желающих принимать участие в разработке базовой сборки ББ, после устаканивания процесса совместной разработки, можно ввести договорённость на обязательное использование подобного контрола версионности. Теория без практики никуда не годится, поэтому я разработал макетную версию компонента, который мог бы предоставить подобную функциональность. Компонент реализует первый пункт списка требований - умеет сохранять plaintext-содержимое документа, в котором он находится, в определённой области бинарного файла. Эта область ограничена известными бинарными тэгами. Для конечного юзера поддержка документом дифф-инструментов будет заключаться в единоразовом размещении в документе якоря-предпросмотра. Предполагаемые аспекты подобного решения:
|
Автор: | Пётр Кушнир [ Четверг, 15 Август, 2013 17:39 ] |
Заголовок сообщения: | Re: Про diff для .odc |
https://bitbucket.org/akastargazer/bb.o ... 39ad444f90 макет компонента якоря. |
Автор: | Иван Денисов [ Четверг, 15 Август, 2013 18:48 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Пётр, раз вы уже сделали такой труд большой. Вместо того, чтобы сохранять куда-то внутрь документа, пустите результат в stdout. Тогда ваше приложение, будет возможно собрать под linux и заменить odcreader на сервере. Если ваше преобразование лучше, то тогда, и правда, нет надобности пользоваться заброшенным и «идеологически неприятным» инструментом. |
Автор: | Илья Ермаков [ Четверг, 15 Август, 2013 19:35 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Иван, Вы не поняли. Текст будет сохраняться при сохранении всего документа. Т.е., "вьюшка-шпион", подложенная в документ, когда документ сохраняется (Вы изменили исходник в ББ и нажали Ctrl-S), обеспечивает внутри документа наличие plain-text-области. С которой потом могут работать внешние инструменты. Это не хак, вьюшка-"планизатор" имеет право записать в свою часть потока любые данные, вот она и запишет - plain-text, обозначенный какой-нибудь оговорённой сигнатурой в начале и конце. Правильно я понял? |
Автор: | Иван Денисов [ Четверг, 15 Август, 2013 19:45 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Илья Ермаков писал(а): Иван, Вы не поняли. Текст будет сохраняться при сохранении всего документа. Т.е., "вьюшка-шпион", подложенная в документ, когда документ сохраняется (Вы изменили исходник в ББ и нажали Ctrl-S), обеспечивает внутри документа наличие plain-text-области. С которой потом могут работать внешние инструменты. Это не хак, вьюшка-"планизатор" имеет право записать в свою часть потока любые данные, вот она и запишет - plain-text, обозначенный какой-нибудь оговорённой сигнатурой в начале и конце. Правильно я понял? Я все понял, но прошу Петра помимо его задумки мимоходом сделать нужную сейчас вещь — новый конвертер для git diff. |
Автор: | Пётр Кушнир [ Четверг, 15 Август, 2013 19:59 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Иван, мне как раз и нужно сейчас определиться с этим, насколько я понял, конвертер для git должен только принять в аргументах имя файла а в стандартный выход пустить разобранные байты? В целом, это можно сделать и на ББ, модуль работы с консолью Windows был в Rocot, а модуль работы с консолью в линукс вы и сами видели. Дальше, например, вопрос по mercurial, сейчас есть два пути, либо делать diff-script который будет ограниченно годен только для Tortoise, либо же делать merge-tool который описывается в документации по чистому hg. Плюс, очевидно, что реализовать надо только экстрактор данных, а diff использовать готовый, то есть, надо будет перенаправлять потоки ввода/вывода, а я не знаю, как, хыхы. Есть ещё svn. Я пока на этапе сбора информации, шашкой махать чуть позже будем. Илья Ермаков писал(а): Правильно я понял? Да, именно так.
|
Автор: | Пётр Кушнир [ Четверг, 15 Август, 2013 20:11 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Ещё вопрос, на чём писать плагины, я бы хотел всё написать на ББ, но сейчас попробовал консоль из Rocot и она не пожелала выводить тестовую строку в ту же консоль, в которой была запущена. |
Автор: | Иван Денисов [ Четверг, 15 Август, 2013 20:18 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Пётр Кушнир писал(а): насколько я понял, конвертер для git должен только принять в аргументах имя файла а в стандартный выход пустить разобранные байты? Да, все верно, именно так работает odcread. Для git этого хватает, но если будут для других систем прилады, только лучше, конечно. Про потоки, к сожалению, тоже не подскажу.
|
Автор: | Пётр Кушнир [ Четверг, 15 Август, 2013 20:32 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Рабочая консоль, похоже, есть в составе Windows-хоста dev0 в репозитории linproj. |
Автор: | Роман М. [ Четверг, 15 Август, 2013 23:34 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Пётр Кушнир писал(а): https://bitbucket.org/akastargazer/bb.open/commits/42f11fb77cb39a653af3dd566ad14a39ad444f90 макет компонента якоря. Постараюсь посмотреть в ближайшие дни.Если можно, был бы рад увидеть результат сериализации в виде картинки, потому что у меня нет под рукой хранилища bb.open, без которого не скомпилируешь. |
Автор: | Роман М. [ Пятница, 16 Август, 2013 23:21 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Цитата: compiling "ypkTextPreview" 1424 0
(!)ypkTextPreview.Deposit command error: no deposited view expected |
Автор: | Пётр Кушнир [ Суббота, 17 Август, 2013 08:59 ] |
Заголовок сообщения: | Re: Про diff для .odc |
У нас какие-то разные ББ? На самом деле команда должна выглядеть так Код: (!)"ObxViews0.Deposit; StdCmds.PasteView"
|
Автор: | Пётр Кушнир [ Суббота, 17 Август, 2013 12:15 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Тем временем, получилось запилить первую версию консольного экстрактора плоских данных из обозначенной области предпросмотра. Процитирую тут способ подключения к гитхабу. Иван Денисов писал(а): Что надо сделать: 1. Качаем https://github.com/gertvv/odcread собираем, ставим в папку /usr/local/bin/ 2. В репозитории создаем файл .gitattributes с содержимым *.odc diff=cp 3. В файле .git/config добавляем три строки: Код: [diff "cp"] binary = true textconv = /usr/local/bin/odcread Разбирался на основе более полной документации http://git-scm.com/book/en/Customizing- ... Attributes И теперь надо пробовать это реализовать под Windows. |
Автор: | Иван Денисов [ Суббота, 17 Август, 2013 12:56 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Пётр Кушнир писал(а): Тем временем, получилось запилить первую версию консольного экстрактора плоских данных из обозначенной области предпросмотра. Процитирую тут способ подключения к гитхабу. Иван Денисов писал(а): Что надо сделать: 1. Качаем https://github.com/gertvv/odcread собираем, ставим в папку /usr/local/bin/ 2. В репозитории создаем файл .gitattributes с содержимым *.odc diff=cp 3. В файле .git/config добавляем три строки: Код: [diff "cp"] binary = true textconv = /usr/local/bin/odcread Разбирался на основе более полной документации http://git-scm.com/book/en/Customizing- ... Attributes И теперь надо пробовать это реализовать под Windows. Пётр, жду вашей версии с нетерпением, odcread выдает какой-то корявый utf-8 и я запарился искать в чем косяк. Приходится его фильтровать питоном а это уже ужасные костыли. |
Автор: | Роман М. [ Суббота, 17 Август, 2013 13:11 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Пётр Кушнир писал(а): У нас какие-то разные ББ? На самом деле команда должна выглядеть так Код: (!)"ObxViews0.Deposit; StdCmds.PasteView" Тот же ББ. А вот эта команда выводит красный прямоугольник в лог. Что теперь? Надо ведь как-то сохранять? |
Автор: | Пётр Кушнир [ Суббота, 17 Август, 2013 13:29 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Роман, из документации Views ясно, что команда Deposit размещает созданное отображение в буфере, а уже StdCmds.PasteView должна разместить отображение из буфера в позиции курсора. Следовательно, размещение якоря должно выглядеть вот так: Код: (!)"ypkTextPreview.Deposit; StdCmds.PasteView"
|
Автор: | Пётр Кушнир [ Суббота, 17 Август, 2013 13:57 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Так, вроде отладил утилиту, под Windows всё работает стабильно. для Windows в .git/config путь к утилите надо указывать в таком вот виде Код: [diff "odc"] binary = true textconv = d:/dev/bbcb/odcextract.exe в .gitattributes соответственно Код: *.odc diff=odc Бинарник вот тут https://dl.dropboxusercontent.com/u/953 ... extract.7z Исходник для него пока в подсистеме YWin в репозитории bb.open, соответственно, он только для Windows. Важно, что утилита начнёт работать только когда в документе появится якорь предпросмотра. Его можно разместить командой из меню подсистемы ypk или вручную, как было уже сказано, через команду Deposit. Размещение сделает документ несохраненным и при первом же сохранении якорь запишет внутрь актуальное содержимое в формате utf8. Фолды пока не раскрывает, и содержимое документа вообще не анализирует. О развитии функций можно поговорить отдельно. А я пока продолжу поиск информации для поддержки mercurial. |
Автор: | Евгений Темиргалеев [ Суббота, 17 Август, 2013 14:08 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Роман М. писал(а): Пётр Кушнир писал(а): У нас какие-то разные ББ? На самом деле команда должна выглядеть так Код: (!)"ObxViews0.Deposit; StdCmds.PasteView" Тот же ББ. А вот эта команда выводит красный прямоугольник в лог. Что теперь? Надо ведь как-то сохранять? |
Автор: | Роман М. [ Суббота, 17 Август, 2013 14:12 ] |
Заголовок сообщения: | Re: Про diff для .odc |
Теперь кажется, понимаю. Значит, на документы без якоря предпросмотр не распространяется, так? Если да, то в чём польза odcextract для них? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |