Исчезают табуляции при экспорте-импорте в CDL

Николаев Михаил
Дата: 02.11.2005 15:44:10
Вот такая вот проблема
Берем метод
ClassMethod ИдетРасчет() As %Integer
{
	q ##class(Раскладка.Состояние).СостояниеРасчета()
}
Перед q стоит простая табуляция
конвертируем в CDL
d $system.OBJ.ExportCDL(ЛокальноеИмяБезРасширения,
			ВнешнееИмя,
			"",
			"",
			"windows-1251")
Получаем
	method ИдетРасчет
	{
		returntype = %Integer;
		classmethod;
		code =
		[
	:	q ##class(Раскладка.Состояние).СостояниеРасчета()
		]
	}
Стоит двоеточие и загрузится нормально
Если же мы в первом примере поставим пробел перед табуляцией
ClassMethod ИдетРасчет() As %Integer
{
/Пробел/     q ##class(Раскладка.Состояние).СостояниеРасчета()
}
Тогда в CDL вместо двоеточия будет пробел и при загрузке, вся табуляция после пробела исчезнет.
Ни у кого не было подобного косяка? Единственное решение которое я сейчас вижу - делать в CDL замену после выгрузки.
VadimF
Дата: 02.11.2005 18:09:10
Добрый день, Михаил!

Если у Вас версия Cache' 5.0.x советую использовать XML для импорта и экспорта.
Об этом написано в документации.

Надеюсь в XML все будет нормально!


Вадим
Николаев Михаил
Дата: 03.11.2005 01:15:16
Я использую CDL для контроля версий. Через XML это делать крайне не удобно.
VadimF
Дата: 03.11.2005 16:11:18
Михаил,

В чем проблема с XML?
С какой системой контроля версий Вы работаете?

Вадим
гость123123
Дата: 03.11.2005 23:59:38
Вадим,

VadimF
В чем проблема с XML?
С какой системой контроля версий Вы работаете?


Вам нужно выполнить пару реальных проектов или посмотреть, как это делается.
Сейчас, конечно, все кинутся переделывать инсталяторы, импортеры, экспортеры, билд машины. Терять историю изменений в контроле версий (или всем объяснять, что нужно сначала посмотреть в контроле версий в одноименном CDL файле).
А все потому что Intersystems, в очередной раз, сначала изобрела кривое колесо, а потом сами замучались это сопровождать и бросили это дело.
гость123123
Дата: 04.11.2005 00:01:27
Вадим,

VadimF
В чем проблема с XML?
С какой системой контроля версий Вы работаете?


Вам нужно выполнить пару реальных проектов или посмотреть, как это делается.
Сейчас, конечно, все кинутся переделывать инсталяторы, импортеры, экспортеры, билд машины. Терять историю изменений в контроле версий (или всем объяснять, что нужно сначала посмотреть в контроле версий в одноименном CDL файле).
А все потому что Intersystems, в очередной раз, сначала изобрела кривое колесо, а потом сами замучались это сопровождать и бросили это дело.
Николаев Михаил
Дата: 07.11.2005 12:35:48
to гость
Ну, не надо так драматизировать. В конечном счете в кэш _можно_ сделать контроль версий - это уже хорошо. А насчет сделали и забросили... Когда я пишу на c# я нос не вытаскиваю из MSDN. Специфика задач, конечно, предполагает что нужны уникальные решения единоразово, может в этом все дело. В документацию кэша я залазил только первую неделю. Инструмент должен быть адекватен задаче. Кэш хороший инструмент. Не идеальный, это да. Но хороший.
to Вадим
Для контроля версий я использую ClearCase. Да и какую бы программу я не использовал, приходится сталкиваться со следующим:
- требуется сравнивать исходный текст двух любых версий.
- требуется слить изменения из двух веток в одну.
Подобные операции обычно делаются не системой контроля версий, а программой сравнения текстов. Я не пользуюсь стандартной программкой, а использую KDiff3.
В стандартном пакете есть прога, которая позволяет сравнивать и сливать XML. Но она оперирует листьями дерева и воспринимает метод, как цельный кусок. Если ты его изменил, то можешь оставить старый или заменить на новый. Также в XML идет много мусора, который меняется при каждой выгрузке. Контрольные суммы, хранение свойств класса в отдельных листьях и прочее. Это конечно недостатки программы, если найти инструмент, который грамотно работает со сравнением и слиянием XML то может и можно его использовать, но я сильно сомневаюсь. Все нормальные люди работают с исходиками в виде текста, и инструменты создают именно для этого.
Я могу увидеть единичное изменение, оно мне подкрасится цветом, я всегда знаю что заливаю и кто что менял, я спокойно сливаю работу несколько человек с одним классом (хотя конечно стараюсь разводить задани так чтобы они не пересекались).
Если Вы используете XML для контроля версий - было бы любопытно узнать, какие инструменты используете и в чем заключается контроль версий.
VadimF
Дата: 07.11.2005 18:26:27
гость123123
Вадим,

VadimF
В чем проблема с XML?
С какой системой контроля версий Вы работаете?


Вам нужно выполнить пару реальных проектов или посмотреть, как это делается.
Сейчас, конечно, все кинутся переделывать инсталяторы, импортеры, экспортеры, билд машины. Терять историю изменений в контроле версий (или всем объяснять, что нужно сначала посмотреть в контроле версий в одноименном CDL файле).
А все потому что Intersystems, в очередной раз, сначала изобрела кривое колесо, а потом сами замучались это сопровождать и бросили это дело.


гость123123,

Во-первых, если у партнеров или заказчиков InterSystems возникают ошибки в Cache' они могут открыть проблему в службе технической поддержке и получить консультацию специалистов.
Это правильный официальный способ решить проблему!


CDL использоался для импорта и экспорта классов в нескольких версиях Cache' на протяжении нескольких лет.
В документации Cache' 5.0.х рекомендуется использовать XML для импорта и экспорта классов.

"The previous CDL (Class Definition Language) format is still supported within this release; you can import into and export them from Caché. You should use the new XML format starting with this release."

В Cache' 5.1. поддерживается только импорт XML.

"XML Export Replaces CDL
In this version, CDL is no longer available as an export format for classes. Users should export their classes in XML instead. CDL will still be accepted as an import format for this release. "

Как видите, переход с CDL на XML достаточно плавный.

Если Вас не устраивает отсутствие поддержки CDL в следующих версиях Cache', то Вы можете написать запрос на улучшение (Enhancement Request) и попросить оставить CDL.

Если есть проблема или нужен какой-либо новый функционал, используйте официальные каналы связи с InterSystems.
Только если менеджмент, который отвечает за развитие продукта, узнает о существовании проблемы, она может быть исправлена.

С уважением, Вадим
VadimF
Дата: 07.11.2005 18:44:39
Николаев Михаил
to гость
Ну, не надо так драматизировать. В конечном счете в кэш _можно_ сделать контроль версий - это уже хорошо. А насчет сделали и забросили... Когда я пишу на c# я нос не вытаскиваю из MSDN. Специфика задач, конечно, предполагает что нужны уникальные решения единоразово, может в этом все дело. В документацию кэша я залазил только первую неделю. Инструмент должен быть адекватен задаче. Кэш хороший инструмент. Не идеальный, это да. Но хороший.


Какой интерфейс Вы используете для работы с Cache' из .Net ?
Скоро появится новая версия Native ADO .Net Provider с рядом исправлений и полезных усовершенствований. Взаимодействовать из .Net с Cache' будет гораздо удобнее. Сообщу Вам, когда появиться новая версия.

Николаев Михаил

to Вадим
Для контроля версий я использую ClearCase. Да и какую бы программу я не использовал, приходится сталкиваться со следующим:
- требуется сравнивать исходный текст двух любых версий.
- требуется слить изменения из двух веток в одну.
Подобные операции обычно делаются не системой контроля версий, а программой сравнения текстов. Я не пользуюсь стандартной программкой, а использую KDiff3.
В стандартном пакете есть прога, которая позволяет сравнивать и сливать XML. Но она оперирует листьями дерева и воспринимает метод, как цельный кусок. Если ты его изменил, то можешь оставить старый или заменить на новый. Также в XML идет много мусора, который меняется при каждой выгрузке. Контрольные суммы, хранение свойств класса в отдельных листьях и прочее. Это конечно недостатки программы, если найти инструмент, который грамотно работает со сравнением и слиянием XML то может и можно его использовать, но я сильно сомневаюсь. Все нормальные люди работают с исходиками в виде текста, и инструменты создают именно для этого.
Я могу увидеть единичное изменение, оно мне подкрасится цветом, я всегда знаю что заливаю и кто что менял, я спокойно сливаю работу несколько человек с одним классом (хотя конечно стараюсь разводить задани так чтобы они не пересекались).
Если Вы используете XML для контроля версий - было бы любопытно узнать, какие инструменты используете и в чем заключается контроль версий.


InterSystems предлагает осуществлять интеграцию с системами контроля версий с помощью Cache Studio Hooks.
Есть еще презентация Взаимодействие с системами контроля версий.

Я видел проекты по интеграции с CVS и VSS.
Попробуйте спросить про ClearCase в news-группе intersystems.public.cache.

В следующей версии Cache' 5.1. появляются New Studio Extension Classes and Source Control Hooks.

автор

New Studio Extension Classes and Source Control Hooks
This release enhances the flexibility of Caché Studio by introducing the %Studio.Extension classes, which allow custom menus and user defined data entry. The %Studio.SourceControl classes now provide enhanced source control hooks, allowing customized checkout and checkin to a source control system.
When the user performs an action in Studio that may require user interaction with the server (for example, attempting to edit a document that is in source control but is not checked out), Studio now calls the UserAction method.
UserAction (Type, Name, InternalName, SelectedText, .Action, .Target, .Msg)
Type options are:

*
Server defined menu item selected
*
Other Studio action

Name is the menu item name if Type is a menu item, otherwise Name indicates one of the following options:

*
User has tried to change a document that is locked in source control
*
User has created a new document
*
User has deleted a document

InternalName is the name of the document this action is concerned with.
SelectedText contains any selected text in the document that has focus.
Action returns an action that Studio should perform:

*
Do nothing (this method can still perform some action such as check an item out of source control, but Studio will not ask for user input).

*
Display the default Studio dialog with a yes/no/cancel button. The text for this dialog is provided in the Target return argument.
*
Run a CSP Template. Target is the start page name for the template. The template will be passed the current document name, any selected text, the project name, and the namespace.
*
Run an EXE on the client. Target is the name of an executable file on the client machine.
*
Insert the text in Target in the current document at the current selection point
*
Studio will open the documents listed in Target

You can define custom menus for Studio to display. Studio obtains the menus when it first connects to a namespace by running two queries, MainMenus and MenuItems. MainMenus returns the list of top level menu names. After this top level menu is selected, MenuItems is used to return the list of items on a specific menu. MainMenus can be either a regular menu or a context submenu that is added to all the context menus. The MenuItems query is passed the current document name and any selected text in case you wish to vary the menu based on these arguments.
By default, the source control class inherits these queries from %Studio.Extension.Base , where they are defined as SQL queries against prebuilt tables. To load data into these tables, define an XData block called Menu in your source control class. When the source control class is compiled, this data is loaded and used automatically. Queries defined in the source control subclass can be changed or completely customized. When data is being returned from the MenuItems query, each menu name will generate a call to an OnMenuItem method in the source control class, where you may disable/enable this menu item. This allows simple modification of the menus without having to write a custom query.


Вадим
Николаев Михаил
Дата: 08.11.2005 12:18:47
to Вадим
Для связи с Net я использую tcpip, на кэш запускается сервер который обслуживает все внешние устройства. Вполне вероятно, что Native ADO .Net Provider мне будет бесполезен, так как я использую Compact Framework наряду с обычной. Она испольуется для терминалов, на которых стоит Windows CE.NET и многие задачи в этой библиотеке решаются очень специфично. Проще через стандартные интерфейсы :-)
А по поводу взаимодействия... За основу я и брал ваши примеры по связи с VSS. И проблемы не в постановке на учет файлов. Начинал я как раз с XML. Но хранить версию системы готовую для сбора - это мало. Хочется знать в чем различие и автоматически эти различия объединять. С XML эта задача превращается в сложную. Поэтому и перешел на CDL.
Мне было бы любопытно услышать как народ контролирует версии, и делает ли это вообще.