OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 06:59

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 17:37 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Вот тут товарищи через использование odcread пришли к возможности просматривать изменения текстовых документов ББ. Это прекрасно.
Но есть несколько моментов.
Во-первых, утилита odcread заброшена. Во-вторых, она написана на C++, идеологически неприятно. В-третьих, будучи одним из тех, кто реализовал конвертер бинарного формата .odc я понимаю, что содержимое бинарного файла не самоописательное, а правильность чтения Store из файла зависит от конкретной реализации кода.
В связи с последним фактом стало понятно, что полноценная поддержка формата возможна только изнутри ББ.

Ещё одним фактом, который останавливает от использования внешних утилит является то, что внешние утилиты примитивизируют навороченный бинарный формат до уровня plaintext. С моей точки зрения, индустрия, которая не может предоставить возможностей работать с чем-то, отличным от plaintext не нужна, поэтому пользоваться ею если и можно, то исключительно с позиции источника правильного способа хранения данных, а не с позиции бедных бинарных родственников.

Поэтому, наряду с утилитой odcread предлагаю реализовать возможность для ущербных plaintext-инструментов хоть как-то понимать содержимое .odc-хранилища. Поэтому, я выдвинул своё видение оберон-решения данной проблемы в сообщении viewtopic.php?p=81466#p81466
Пётр Кушнир писал(а):
В целом, если учитывать, что для двух .odc файлов невозможно найти универсальный способ выделения различий, а для узкой задачи отображения различий в системах CVS достаточно только примитивного plain-text отражения содержимого текстового файла ББ, есть предложение разработать специальный контрол версионности.
По своим функциям он будет представлять мощный аналог контрола StdStamps, и внутри себя сможет содержать отображение текста исходника, например, отдельный детектируемый внешними инструментами непрерывный блок байтов, представляющий текст формате utf8, который смогут читать внешние инструменты, типа diff-плагина и в то же время, такой расширенный Stamp уже внутри ББ сможет предоставлять функции версионности на уровне отдельного документа, с возможностью просмотра диффоф и так далее.

То есть, выделяются две основные функции:
  • Сохранение текущего содержимого документа (в момент сохранения самого документа) в виде плэйн-текст-области внутри файла, аналог предпросмотра
  • Версионность документа на уровне ББ с последующим ростом функциональности
Как решающий фактор, который позволит реализовать такой контрол версионности, выступает тот факт, что внедрённые отображения могут получить доступ к модели контекста, в котором они расположены.
А для желающих принимать участие в разработке базовой сборки ББ, после устаканивания процесса совместной разработки, можно ввести договорённость на обязательное использование подобного контрола версионности.

Теория без практики никуда не годится, поэтому я разработал макетную версию компонента, который мог бы предоставить подобную функциональность. Компонент реализует первый пункт списка требований - умеет сохранять plaintext-содержимое документа, в котором он находится, в определённой области бинарного файла. Эта область ограничена известными бинарными тэгами. Для конечного юзера поддержка документом дифф-инструментов будет заключаться в единоразовом размещении в документе якоря-предпросмотра.
Предполагаемые аспекты подобного решения:
  • положительные:
    • сторонние инструменты будут тесно взаимодействовать только с бинарными данными одной Store, а не многих, как odcread
    • работа с бинарным .odc на уровне области в цепочке байтов освобождает diff-плагины от необходимости понимать формат целиком, а значит упрощает реализацию
    • содержимое документов будет доступно для просмотра даже в случае полного отсутствия ББ
  • отрицательные:
    • размер файла увеличивается на количество символов текстовой модели, сконвертированных в utf8
    • по-умолчанию в документах никаких якорей предпросмотра нет, а значит размещение якорей будет возложено на конечного юзера
    • необходимость плагинов и их настройки в каждом отдельном случае
Учитывая прогресс Ивана Денисова по написанию diff-плагина для git, планируется разработать похожие инструменты для остальных популярных систем, которые будут основаны на анализе области предпросмотра.


Последний раз редактировалось Пётр Кушнир Четверг, 15 Август, 2013 17:51, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 17:39 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
https://bitbucket.org/akastargazer/bb.o ... 39ad444f90 макет компонента якоря.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 18:48 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Пётр, раз вы уже сделали такой труд большой. Вместо того, чтобы сохранять куда-то внутрь документа, пустите результат в stdout. Тогда ваше приложение, будет возможно собрать под linux и заменить odcreader на сервере. Если ваше преобразование лучше, то тогда, и правда, нет надобности пользоваться заброшенным и «идеологически неприятным» инструментом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 19:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Иван, Вы не поняли. Текст будет сохраняться при сохранении всего документа.

Т.е., "вьюшка-шпион", подложенная в документ, когда документ сохраняется (Вы изменили исходник в ББ и нажали Ctrl-S), обеспечивает внутри документа наличие plain-text-области. С которой потом могут работать внешние инструменты.
Это не хак, вьюшка-"планизатор" имеет право записать в свою часть потока любые данные, вот она и запишет - plain-text, обозначенный какой-нибудь оговорённой сигнатурой в начале и конце.

Правильно я понял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 19:45 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Илья Ермаков писал(а):
Иван, Вы не поняли. Текст будет сохраняться при сохранении всего документа.

Т.е., "вьюшка-шпион", подложенная в документ, когда документ сохраняется (Вы изменили исходник в ББ и нажали Ctrl-S), обеспечивает внутри документа наличие plain-text-области. С которой потом могут работать внешние инструменты.
Это не хак, вьюшка-"планизатор" имеет право записать в свою часть потока любые данные, вот она и запишет - plain-text, обозначенный какой-нибудь оговорённой сигнатурой в начале и конце.

Правильно я понял?

Я все понял, но прошу Петра помимо его задумки мимоходом сделать нужную сейчас вещь — новый конвертер для git diff.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 19:59 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Иван, мне как раз и нужно сейчас определиться с этим, насколько я понял, конвертер для git должен только принять в аргументах имя файла а в стандартный выход пустить разобранные байты? В целом, это можно сделать и на ББ, модуль работы с консолью Windows был в Rocot, а модуль работы с консолью в линукс вы и сами видели.

Дальше, например, вопрос по mercurial, сейчас есть два пути, либо делать diff-script который будет ограниченно годен только для Tortoise, либо же делать merge-tool который описывается в документации по чистому hg. Плюс, очевидно, что реализовать надо только экстрактор данных, а diff использовать готовый, то есть, надо будет перенаправлять потоки ввода/вывода, а я не знаю, как, хыхы.

Есть ещё svn.

Я пока на этапе сбора информации, шашкой махать чуть позже будем.

Илья Ермаков писал(а):
Правильно я понял?
Да, именно так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 20:11 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ещё вопрос, на чём писать плагины, я бы хотел всё написать на ББ, но сейчас попробовал консоль из Rocot и она не пожелала выводить тестовую строку в ту же консоль, в которой была запущена.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 20:18 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Пётр Кушнир писал(а):
насколько я понял, конвертер для git должен только принять в аргументах имя файла а в стандартный выход пустить разобранные байты?
Да, все верно, именно так работает odcread. Для git этого хватает, но если будут для других систем прилады, только лучше, конечно. Про потоки, к сожалению, тоже не подскажу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 20:32 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Рабочая консоль, похоже, есть в составе Windows-хоста dev0 в репозитории linproj.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Четверг, 15 Август, 2013 23:34 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Пётр Кушнир писал(а):
https://bitbucket.org/akastargazer/bb.open/commits/42f11fb77cb39a653af3dd566ad14a39ad444f90 макет компонента якоря.
Постараюсь посмотреть в ближайшие дни.
Если можно, был бы рад увидеть результат сериализации в виде картинки, потому что у меня нет под рукой хранилища bb.open, без которого не скомпилируешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Пятница, 16 Август, 2013 10:41 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ну, результатом является участок внутри бинарного файла, в котором находится содержимое текста в формате utf8.
Экспорт пока самый примитивный, без раскрытия фолдов и прочего. На картинке можно увидеть документ с якорем в виде документа :) и просмотр содержимого файла в виде utf8 текста.


Вложения:
1.JPG
1.JPG [ 275.92 КБ | Просмотров: 17908 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Пятница, 16 Август, 2013 23:21 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Цитата:
compiling "ypkTextPreview" 1424 0

(!)ypkTextPreview.Deposit
command error: no deposited view expected


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 08:59 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
У нас какие-то разные ББ?
На самом деле команда должна выглядеть так
Код:
(!)"ObxViews0.Deposit; StdCmds.PasteView"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 12:15 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Тем временем, получилось запилить первую версию консольного экстрактора плоских данных из обозначенной области предпросмотра.
Процитирую тут способ подключения к гитхабу.
Иван Денисов писал(а):
Что надо сделать:
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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 12:56 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Пётр Кушнир писал(а):
Тем временем, получилось запилить первую версию консольного экстрактора плоских данных из обозначенной области предпросмотра.
Процитирую тут способ подключения к гитхабу.
Иван Денисов писал(а):
Что надо сделать:
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 и я запарился искать в чем косяк. Приходится его фильтровать питоном :( а это уже ужасные костыли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 13:11 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Пётр Кушнир писал(а):
У нас какие-то разные ББ?
На самом деле команда должна выглядеть так
Код:
(!)"ObxViews0.Deposit; StdCmds.PasteView"

Тот же ББ. А вот эта команда выводит красный прямоугольник в лог. Что теперь? Надо ведь как-то сохранять?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 13:29 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Роман, из документации Views ясно, что команда Deposit размещает созданное отображение в буфере, а уже StdCmds.PasteView должна разместить отображение из буфера в позиции курсора.
Следовательно, размещение якоря должно выглядеть вот так:
Код:
(!)"ypkTextPreview.Deposit; StdCmds.PasteView"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 13:57 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Так, вроде отладил утилиту, под 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.
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 14:08 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Роман М. писал(а):
Пётр Кушнир писал(а):
У нас какие-то разные ББ?
На самом деле команда должна выглядеть так
Код:
(!)"ObxViews0.Deposit; StdCmds.PasteView"

Тот же ББ. А вот эта команда выводит красный прямоугольник в лог. Что теперь? Надо ведь как-то сохранять?
Роман, Вы помогаете администрировать http://redmine.molpit.com/ или уже участвуете в поддержке Блэкбокс проектом http://oberoncore.ru/projects/oberonredmine? Для последнего рекомендовал бы Вам прежде чем приступать к работам --- основательно изучить матчасть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про diff для .odc
СообщениеДобавлено: Суббота, 17 Август, 2013 14:12 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Теперь кажется, понимаю. Значит, на документы без якоря предпросмотр не распространяется, так?
Если да, то в чём польза odcextract для них?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB