powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Контроль версий на Cache 5.0.21.6408.0
6 сообщений из 6, страница 1 из 1
Контроль версий на Cache 5.0.21.6408.0
    #38614039
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые Кашевары, прошу помощи с установкой системы контроля версий для старенькой Каши (5.0.21.6408.0 ).

Пробую установку следуя инструкциям в статье на хабре " Разработка в Caché Studio с использованием TortoiseGit ".
Сделано:
1) установлен TorgoiseGit
2) установлен msysgit

Проблемы:
а) возникли проблемы при импорте классов в %SYS через каше-проводник - пишет <SUBSCRIPT>classImport+32^%Wprog
б) Дошел до пункта установки областей, в которых для контроля версий будет использоваться Caché-Git. Поскольку версия каши старая, описанных настроек в редакторе конфигураций нет.

Подскажите пожалуйста, как правильно настроить? Прошу как можно более подробных инструкций , так как вся остальная информаци по контролю версий порядком устарела.

Попутные вопросы:
1) если в установленной каши используется UTF8, нужно ли как-то преобразовывать файл xml при импорте класса? нужно ли настраивать импорт с применением другой кодировки?
...
Рейтинг: 0 / 0
Контроль версий на Cache 5.0.21.6408.0
    #38614060
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что это может не заработать потому что, слишком старая версия.
Для начала, сами исходники там выложены судя по мета-версии от 2012 версии и выше.
тебе нужно будет вручную поменять XML, врезав из него неподдерживаемые еще теги

хотя я не уверен что, это вообще еще было на такой версии. там есть XData, на котороую он и наверно ругается. Не уверен что XData уже было в 5.0
Сложность в том что наверно уже почти никто такой версией не пользуется.
...
Рейтинг: 0 / 0
Контроль версий на Cache 5.0.21.6408.0
    #38614092
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakut,

5.0.21 достаточно старая версия (ей 8 лет). В ней наверняка нет многих функций, которые в Caché-Git использовались. Вам проще написать свою систему контроля версий, дёргая подходящие куски из Caché-Git. А лучше — обновится, конечно.
...
Рейтинг: 0 / 0
Контроль версий на Cache 5.0.21.6408.0
    #38614890
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakut, перенес с более новой версии, так что никаких гарантий.
Основная идея - если что-то меняется в Cache - выкидываем это в рабочую директорию, дальше обычными файловыми плагинами - TortoiseSVN, TortoiseGit и т.д.

scmin/// Минимально-функциональный плагин контроля версий для студии Cach&#233;
/// В версии 5.021 не вызываются обработчики события удаления
/// Установка плагина <example>
/// d ##class(sc.min).workdir("c:\temp\") ;устанавливаем рабочую директорию
/// d ##class(sc.min).ignore("%") ;игнорируем системные классы
/// d ##class(sc.min).ignore("sc.") ;игнорируем сами себя
/// </example>
Class sc.min Extends %Studio.SourceControl.Base [ ProcedureBlock ]
{

/// Глобаль для хранения настроек плагина
Parameter STORAGE = "^sc";

/// Used to control which dialogs appear in Studio, if the position is '1'
/// then this dialog will appears and if it is '0' then the dialog will not
/// appear and it will assume that the answer to the dialog was to either accept it
/// or say yes, depending on the dialog. The dialog are:<ul>
/// <li>1 : Present dialog on check in</li>
/// <li>2 : Present dialog on check out</li>
/// <li>3 : Ask to add new item to source control</li>
/// <li>4 : Ask to remove deleted item from source control</li></ul>
Parameter Flags As STRING = 0000;

/// Устанавливка/получение рабочей директории плагина.
/// По умолчанию используется директория с базой области.
/// <example>
/// d ##class(sc.min).workdir("c:\temp\") ;установка рабочей директории
/// w ##class(sc.min).workdir() ;получение настройки
/// #; одновременно установка и получение рабочей директории
/// s wd = ##class(sc.min).workdir("c:\temp") 
/// </example>
ClassMethod workdir(path As %String) As %String
{
     s wds = ..#STORAGE, default = $zu(12,"")
     if $d(path){ //set mode
      s path=$g(path) s:path="" path=default
      s:$e(path,$l(path))'="\" path=path_"\" ;директория должна быть указана в формате:  c:\temp\
      s @wds=path Q path
     } else { //get mode
      s wd=$g( @wds ) Q:wd'="" wd Q default
     }
}

/// Вернет имя узла глобали для хранение настроек 
/// игнорируемых масок наименований модулей кода.
ClassMethod igns() As %String [ CodeMode = expression, Private ]
{
..#STORAGE_"(""skip"")"
}

/// Добавление маски / получение масок игнорирования в настройки плагина.
/// <example>
/// s sc = ##class(sc.min).ignore("%") ;плагин будет игнорировать модули кода, начинающиеся с "%"
/// d ##class(sc.min).ignore( , .ignored ) ;в массиве <var>ignored</var> будут маски плагина
/// d ##class(sc.min).ignore( "sc." , .ignored ) ;добавление новой маски и получение массива
/// </example>
ClassMethod ignore(mask As %String, ByRef arr As %String = "") As %Status
{
    s gln=..igns() if $d(mask) { //set mode
       s @gln@(mask)="" 
    } 
    m arr = @gln
    Q $$$OK
}

/// проверка имени программного модуля на игнорирование
/// <example>
/// w ##class(sc.min).ignored("sc.min.CLS")
/// </example>
ClassMethod ignored(code As %String) As %Boolean
{
    s arr = ..ignore(,.arr), ignored=0
    s mask="" for { s mask=$o(arr(mask)) Q:mask=""
        s pos = $f(code, mask) if pos=0 continue
        s check = $l( mask ) + 1
        if pos = check  { ;starts with
             s ignored=1 Q  
        }
    }
    Q ignored
}

/// Преобразование имени модуля в имя файла
/// Совместим по логике с примерами Интерсистемс, и плагином от Павла Крехулы
ClassMethod code2filev0(code As %String) As %String
{
 #define parse(%code) s len=$l(%code,"."), name=$P(%code,".",1,len-1), ext=$P(%code,".",len)
 s len=0, (name,ext)=""
 $$$parse(code)
 s path = "_"_ext_"\"_$tr(name,".","\")_".xml"
 Q ..workdir()_path
}

/// Определяем является ли модуль сгенерированным CLS -> INT
/// Is generated?
ClassMethod generated(code As %String) As %String
{
    s sequence=$lb("CSP","CLS","MAC","INT")
    
    s len=0,name="",ext=""
    #define parse(%code) s len=$l(%code,"."), name=$P(%code,".",1,len-1), ext=$P(%code,".",len)
        
    $$$parse(code) s codelvl=$LF(sequence,ext)
    
    s src=##class(%RoutineMgr).GetOther(name,ext,-1) QUIT:src="" 0 ;created by user
    
    #;now ext for src
    $$$parse(src) s srclvl=$LF(sequence,ext) 
    
    if srclvl<codelvl QUIT 1 ;generated
    
    Q 0 ;created by user
}

/// handler for studio events
ClassMethod handler(code As %String, event As %String = "") As %Status
{
   
    s skip=0, txt=""
    if ..ignored(code) {
        s txt="IGNORED "_code, skip=1
    } elseif ##class(%RoutineMgr).IsCSPName(code){
        s txt="CSPNAME "_code, skip=1
    } elseif ..generated(code) {
        s txt="GENERATED "_code, skip=1
    } 
    
    #define msg(%txt) s io=$io u 0 w !,%txt u io
    
    if skip {
      $$$msg(txt) Q $$$OK      
    }
    
    #; compatible with previous version        
    s file=..code2filev0(code) ;..code2file(code)
    
    s exist=##class(%File).Exists(file), filets=""
    if exist {
        s filetsh=##class(%Library.File).GetFileDateModified(file) ;horolog
        s filets=$zdt(filetsh,3)
    } 
    s codets=##class(%RoutineMgr).TS(code)
    
    Q:codets=filets $$$OK ;timestamps equal
    
    s txt="", sc=1
    if codets]filets { ;export from database
        
        s dir = ##class(%File).GetDirectory(file)
        s sc= ##class(%File).CreateDirectoryChain(dir) ;check
        s sc=$system.OBJ.Export(code,file,"-d /diffexport") 
        s txt=code_" -> "_file
       
    } elseif filets]codets { ;import from file
        
        #; Низкоуровневое API
        #; Flags: -d - not display, -l - no lock
        #;s sc=$$Import^%occSAX(filename,"fv-d-l")
        #;s sc=$$Import^%apiRTN(filename,"all,replace,nocompile,lock=0",,,,"-d")
        
        /*
        * Именно этот фрагмент кода падает с ошибкой 
        * при РУЧНОМ импорте проекта через Studio
        * ОШИБКА #6301: Ошибка анализатора SAX XML: <NULL VALUE>ParseFileBoot+25^%occSAX
        * Студия ставит блокировку на выбранные классы, запускает импорт
        * и генерирует события, вызывающие импорт
        */

        #; Flags: -d (not display), -l (no lock)
        s sc=$system.OBJ.Load(file,"-d-l")  
        s txt=file_" -> "_code
        
  }
  
    s io=$io u 0 w !,txt     
    d:$$$ISERR(sc) $system.OBJ.DisplayError(sc)
    u io  
    Q sc
}

/// Первый экспорт всех классов из области
ClassMethod export1() As %Status
{
    
    s rs=##class(%ResultSet).%New("%Dictionary.ClassDefinition:Summary")
    s sc=rs.Execute() 
    for { s sc=rs.Next() Q:'sc
      
      #;проверка на пропускаемые и генерируемые
      s cls=$g(rs.Data("Name")), code=cls_".CLS"
      if ..ignored(cls) continue  
      if ..generated(code) continue
      s file=..code2filev0(code)
      s sc=$system.OBJ.Export(code,file,"-d /diffexport") 
      w:+sc !,code," -> ", file
      
    }
    k rs,stm
    QUIT 1
    
    #; низкоуровневый экспорт без перекодировки
    #;s sc=$$Export^%apiRTN("filename","c:\temp\DFPRK.INT","","WNSK\RAW\","-d /diffexport",.err)
}

/// NOT Called after an item is deleted.
Method OnAfterDelete(InternalName As %String) As %Status
{
  #; не вызывается почему-то
  w !,"Deleted: ", InternalName
  Quit $$$OK
}

/// Import the file from the external format into Cache.
/// This is called before the actual load of data to give the chance
/// to load the item from an external format.
Method OnBeforeLoad(InternalName As %String) As %Status
{
    Quit ..handler(InternalName)
}

/// Как только сохранили - сбрасываем на диск
Method OnAfterSave(InternalName As %String, Object As %RegisteredObject = {$$$NULLOREF}) As %Status
{
    Quit ..handler(InternalName)
}

/// Есть вероятность, что после компиляции исходник поменяется, например хранение
/// или студия может добавить форматирование (перевод строки перед фигурными скобками)
Method OnAfterCompile(InternalName As %String) As %Status
{
    Quit ..handler(InternalName)
}

}
...
Рейтинг: 0 / 0
Контроль версий на Cache 5.0.21.6408.0
    #38615034
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов 5.0.21 достаточно старая версия (ей 8 лет)
Насколько я помню, в 2003 году у меня уже был диск с v.5.0.6 - 11 лет
...
Рейтинг: 0 / 0
Контроль версий на Cache 5.0.21.6408.0
    #38615081
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintНасколько я помню, в 2003 году у меня уже был диск с v.5.0.6 - 11 лет5.0.6 ≠ 5.0.21

$zv: Cache for Windows NT (Intel) 5.0.21 (Build 6408U) Tue Jan 3 2006 13:30:53 EST
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Контроль версий на Cache 5.0.21.6408.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]