From 750e490c8dd4562f994be4f5902b37d0c5988645 Mon Sep 17 00:00:00 2001 From: gevorg95 Date: Sat, 21 Mar 2020 18:49:51 +0900 Subject: [PATCH] The project has been redesigned --- Dockerfile | 45 ++- Installer.cls | 29 +- docker-compose.yml | 14 +- irissession.sh | 19 ++ {cls => src/cls}/dev/code.cls | 365 +++++++++++++------------ {cls => src/cls}/dev/deepsee.cls | 0 {cls => src/cls}/dev/diff/gitHub.cls | 0 {cls => src/cls}/dev/diff/gitLocal.cls | 0 {cls => src/cls}/dev/diff/utils.cls | 0 9 files changed, 251 insertions(+), 221 deletions(-) create mode 100755 irissession.sh rename {cls => src/cls}/dev/code.cls (55%) rename {cls => src/cls}/dev/deepsee.cls (100%) rename {cls => src/cls}/dev/diff/gitHub.cls (100%) rename {cls => src/cls}/dev/diff/gitLocal.cls (100%) rename {cls => src/cls}/dev/diff/utils.cls (100%) diff --git a/Dockerfile b/Dockerfile index c3f0b7f..5d9d2e8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,25 @@ -ARG IMAGE=intersystems/iris:2019.1.0S.111.0 -ARG IMAGE=store/intersystems/iris:2019.1.0.511.0-community +ARG IMAGE=store/intersystems/irishealth:2019.3.0.308.0-community +ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0 +ARG IMAGE=store/intersystems/iris-community:2019.4.0.379.0 +ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0 +ARG IMAGE=intersystemsdc/iris-community:2019.4.0.383.0-zpm FROM $IMAGE -WORKDIR /opt/app +USER root -COPY ./Installer.cls ./ -COPY ./cls/ ./src/ +WORKDIR /opt/irisapp +RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp -# download ZPM -RUN mkdir -p /tmp/deps \ +USER irisowner - && cd /tmp/deps \ +COPY Installer.cls . +COPY src src +COPY irissession.sh / +SHELL ["/irissession.sh"] - && wget -q https://pm.community.intersystems.com/packages/zpm/latest/installer -O zpm.xml +RUN \ + do $SYSTEM.OBJ.Load("Installer.cls", "ck") \ + set sc = ##class(App.Installer).setup() - -RUN iris start $ISC_PACKAGE_INSTANCENAME quietly EmergencyId=sys,sys && \ - /bin/echo -e "sys\nsys\n" \ - " Do ##class(Security.Users).UnExpireUserPasswords(\"*\")\n" \ - " Do ##class(Security.Users).AddRoles(\"admin\", \"%ALL\")\n" \ - " do ##class(Security.System).Get(,.p)\n" \ - " set p(\"AutheEnabled\")=\$zb(p(\"AutheEnabled\"),16,7)\n" \ - " do ##class(Security.System).Modify(,.p)\n" \ - " Do \$system.OBJ.Load(\"/tmp/deps/zpm.xml\", \"ck\")" \ - " Do \$system.OBJ.Load(\"/opt/app/Installer.cls\",\"ck\")\n" \ - " Set sc = ##class(App.Installer).setup(, 3)\n" \ - " If 'sc do \$zu(4, \$JOB, 1)\n" \ - " halt" \ - | iris session $ISC_PACKAGE_INSTANCENAME && \ - /bin/echo -e "sys\nsys\n" \ - | iris stop $ISC_PACKAGE_INSTANCENAME quietly - -CMD [ "-l", "/usr/irissys/mgr/messages.log" ] \ No newline at end of file +# bringing the standard shell back +SHELL ["/bin/bash", "-c"] \ No newline at end of file diff --git a/Installer.cls b/Installer.cls index c484965..91b0bd4 100644 --- a/Installer.cls +++ b/Installer.cls @@ -1,22 +1,23 @@ Class App.Installer { -XData MyInstall [ XMLNamespace = INSTALLER ] +XData setup { - - - - - + + + + + - - - - + - + + + @@ -24,6 +25,8 @@ XData MyInstall [ XMLNamespace = INSTALLER ] ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] { - Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "MyInstall") + #; Let XGL document generate code for this method. + Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "setup") +} + } -} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index eada850..67c28b6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,14 @@ -version: '2.4' +version: '3.6' services: iris: - build: . + build: + context: . + dockerfile: Dockerfile restart: always - ports: - - 52773:52773 + ports: + - 51773 + - 52773 + - 53773 volumes: - ~/iris.key:/usr/irissys/mgr/iris.key - - .:/opt \ No newline at end of file + - ./:/irisdev/app \ No newline at end of file diff --git a/irissession.sh b/irissession.sh new file mode 100755 index 0000000..8f4a51d --- /dev/null +++ b/irissession.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +iris start $ISC_PACKAGE_INSTANCENAME quietly + +cat << EOF | iris session $ISC_PACKAGE_INSTANCENAME -U %SYS +do ##class(%SYSTEM.Process).CurrentDirectory("$PWD") +$@ +if '\$Get(sc) do ##class(%SYSTEM.Process).Terminate(, 1) +zn "%SYS" +do ##class(SYS.Container).QuiesceForBundling() +Do ##class(Security.Users).UnExpireUserPasswords("*") +halt +EOF + +exit=$? + +iris stop $ISC_PACKAGE_INSTANCENAME quietly + +exit $exit \ No newline at end of file diff --git a/cls/dev/code.cls b/src/cls/dev/code.cls similarity index 55% rename from cls/dev/code.cls rename to src/cls/dev/code.cls index 00eb288..934010b 100644 --- a/cls/dev/code.cls +++ b/src/cls/dev/code.cls @@ -4,70 +4,71 @@ Class dev.code [ Abstract ] { -Parameter version = "1.1.0.5"; +Parameter version = "1.1.0.6"; /// export all available code ClassMethod export(mask = "", generated = 0, system = 0, percent = 0, mapped = 0, dfi = 0) { - #define export(%code, %file) s sc = $system.OBJ.ExportUDL(%code, %file,"/diffexport") ##continue - w:sc "Ok" d:'sc $system.OBJ.DisplayError(sc) + #define export(%code, %file) set sc = $system.OBJ.ExportUDL(%code, %file,"/diffexport") ##continue + write:sc "Ok" do:'sc $system.OBJ.DisplayError(sc) #define isGenerated(%code) ##class(%RoutineMgr).IsGenerated( %code ) #define isPercented(%code) ("%" = $e(%code)) #define isMapped(%code) ##class(%RoutineMgr).IsMapped( %code ) - #define log w !, code, " -> ", $piece(filename,..workdir(),2), " " + #define log write !, code, " -> ", $piece(filename,..workdir(),2), " " - w "#; Exporting to ", ..workdir(),! + write "#; Exporting to ", ..workdir(),! #; classes - s rs = ##class(%ResultSet).%New("%Dictionary.ClassDefinition:Summary") - if rs.Execute() { - - while rs.%Next(){ - - s code = rs.Name _ ".cls", isSystem = rs.System + set rs = ##class(%ResultSet).%New("%Dictionary.ClassDefinition:Summary") + if rs.Execute() + { + while rs.%Next() + { + set code = rs.Name _ ".cls", isSystem = rs.System if ( 'system && isSystem ) continue if ( 'generated && $$$isGenerated( code ) ) continue if ( 'percent && $$$isPercented( code ) ) continue if ( 'mapped && $$$isMapped( code ) ) continue if ( '..checkMasks( code, mask ) ) continue - s filename = ..filename( code ) + set filename = ..filename( code ) do ..mkdir( filename ) $$$log $$$export( code, filename ) - - } s rs="" + } + set rs="" } #; routines - s rs = ##class(%ResultSet).%New("%Routine:RoutineList") - if rs.Execute() { - - while rs.%Next() { - - s code = rs.Name - w code,! + set rs = ##class(%ResultSet).%New("%Routine:RoutineList") + if rs.Execute() + { + while rs.%Next() + { + set code = rs.Name + write code,! if ( 'generated && $$$isGenerated( code ) ) continue if ( 'percent && $$$isPercented( code ) ) continue if ( 'mapped && $$$isMapped( code ) ) continue if ( '..checkMasks( code, mask ) ) continue - s filename = ..filename( code ) + set filename = ..filename( code ) do ..mkdir( filename ) $$$log $$$export( code, filename ) - } s rs="" + } + set rs="" } - #; dfi do ..fixDashIntoName() - #define export(%code,%file) s sc = ##class(%DeepSee.UserLibrary.Utils).%Export( %code, %file, 0 ) + #define export(%code,%file) set sc = ##class(%DeepSee.UserLibrary.Utils).%Export( %code, %file, 0 ) - s sql = "Select id, fullName as Name, documentName From %DeepSee_UserLibrary.FolderItem" - s rs = ##class(%SQL.Statement).%ExecDirect( .stm, sql ) - while rs.%Next() { + set sql = "Select id, fullName as Name, documentName From %DeepSee_UserLibrary.FolderItem" + set rs = ##class(%SQL.Statement).%ExecDirect( .stm, sql ) + while rs.%Next() + { set code = rs.Name set filename = ..filename( code_".dfi" ) set documentName = rs.documentName @@ -81,43 +82,47 @@ ClassMethod export(mask = "", generated = 0, system = 0, percent = 0, mapped = 0 do ..mkdir( filename ) - if dfi{ + if dfi + { $$$log $$$export( code, filename) } - elseif ('dfi){ + elseif ('dfi) + { set documentName = $replace(documentName,"/","-") set filename = $extract(filename,1,*-4) do ..fixXMLLine(documentName,filename_".xml") } - } s rs="" + } + set rs="" #;DeepSee artefacts do ..exportDeepSeeArtefacts() + write !,!, "#; Exported to ", ..workdir() - w !,!, "#; Exported to ", ..workdir() - - Q 1 + return $$$OK } /// import all from workdir ClassMethod import(filemask = "*.xml;*.cls;*.mac;*.int;*.inc;*.dfi", qspec = "cku-d", ByRef err = "", recurse = 1, ByRef loaded = "", verbose = 1) As %Status { - #define push(%dir) s dirs( $i( dirs ) ) = %dir - #define next(%i,%dir) s %i=$o( dirs( "" ), 1, %dir ) k:%i'="" dirs(%i) + #define push(%dir) set dirs( $i( dirs ) ) = %dir + #define next(%i,%dir) set %i=$o( dirs( "" ), 1, %dir ) kill:%i'="" dirs(%i) #define isDirectory(%type) ( %type = "D" ) - #define log w !, $piece(filename,..workdir(),2), " " w:sc "Ok" d:'sc $system.OBJ.DisplayError(sc) + #define log write !, $piece(filename,..workdir(),2), " " write:sc "Ok" do:'sc $system.OBJ.DisplayError(sc) - s sc = 1, dirs = "", dir = ..workdir() $$$push(dir) - if verbose w "#; Importing from ", dir,! - d ..setIgnore(.fm) - for { $$$next(i,dir) Q:i="" Q:dir="" - - s rs = ##class(%File).FileSetFunc( dir, filemask, , 1 ) + set sc = 1, dirs = "", dir = ..workdir() $$$push(dir) + if verbose write "#; Importing from ", dir,! + do ..setIgnore(.fm) + for + { + $$$next(i,dir) quit:i="" quit:dir="" + set rs = ##class(%File).FileSetFunc( dir, filemask, , 1 ) - while rs.%Next() { - s filename = rs.Name + while rs.%Next() + { + set filename = rs.Name if $$$isDirectory(rs.Type) { if recurse $$$push(filename) @@ -126,37 +131,37 @@ ClassMethod import(filemask = "*.xml;*.cls;*.mac;*.int;*.inc;*.dfi", qspec = "ck // check file filter if ..inFilter(.fm,filename) continue - s ext = $zcvt($p( filename, ".", * ),"l") + set ext = $zcvt($p( filename, ".", * ),"l") if (ext = "dfi") { - s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded ) + set sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded ) } else { // load classes only - s sc = $system.OBJ.Load( filename, "k-d", .err, .loaded) + set sc = $system.OBJ.Load( filename, "k-d", .err, .loaded) } if verbose $$$log } // compile all the loaded classes to obey dependencies - s sc=$system.OBJ.CompileList( .loaded, "cukbr-d/multicompile",.err ) + set sc=$system.OBJ.CompileList( .loaded, "cukbr-d/multicompile",.err ) } if verbose { if $D(err) { - s i=$Order(err("")) + set i=$Order(err("")) while i'="" { - w !,err(i) - s i=$O(err(i)) + write !,err(i) + set i=$O(err(i)) } } - w !,!,"#; Imported from ", ..workdir() + write !,!,"#; Imported from ", ..workdir() } - Q sc + return sc } ClassMethod exportDeepSeeArtefacts() As %Status @@ -186,7 +191,8 @@ ClassMethod exportGlobals(mask = "") As %Status set sc=statement.%PrepareClassQuery("%SYS.GlobalQuery","NameSpaceListChui") if $$$ISERR(sc) { do $system.OBJ.DisplayError(status) } set resultset=statement.%Execute($namespace) - while resultset.%Next() { + while resultset.%Next() + { set gname = resultset.%Get("Name") continue:$data(@("^"_gname))=0 @@ -206,15 +212,18 @@ ClassMethod exportGlobals(mask = "") As %Status ClassMethod patch(filename = "", commitFrom = "", commitTo = "") As %Status { - s gln = ..gln() - s git = @gln@("git") + set gln = ..gln() + set git = @gln@("git") set:commitTo="" commitTo=1 - if (git = 0) { + if (git = 0) + { set:(commitFrom="")||(commitFrom=1) commitFrom=0 set sc = ##class(dev.diff.gitLocal).buildDiff(..workdir(), "HEAD~"_commitTo, "HEAD~"_commitFrom, .items) return:$$$ISERR(sc) sc - }elseif(git = 1) { + } + elseif(git = 1) + { set owner = @gln@("owner") set repository = @gln@("repository") set user = @gln@("user") @@ -225,7 +234,8 @@ ClassMethod patch(filename = "", commitFrom = "", commitTo = "") As %Status return:$$$ISERR(sc) sc } - if (filename="") { + if (filename="") + { set filename=$G(@gln@("projectName"),"patch") set filename=filename_$p($zdt($h,8)," ")_$tr($p($p($zdt($h)," ",2),":",1,2),":")_".xml" } @@ -252,7 +262,7 @@ ClassMethod fixXMLLine(documentName, filename) As %Status ClassMethod inFilter(ByRef filtermask, filename) As %Boolean { - s result=0 + set result=0 for { if '$d(filtermask($I(i))) quit @@ -260,28 +270,27 @@ ClassMethod inFilter(ByRef filtermask, filename) As %Boolean if $length(filename,filter)>1 set result=1 } - quit result + return result } /// get the filtermask for the repository. /// looks for .gitignore file and applies all the lines to filters ClassMethod setIgnore(ByRef filtermask) { - // working with .gitignore file // gitignore consists of masks of filtering files - s filename=..workdir()_"/.gitignore" + set filename=..workdir()_"/.gitignore" if '##class(%File).Exists(filename) quit - s file=##class(%File).%New(filename) - s sc=file.Open("R") + set file=##class(%File).%New(filename) + set sc=file.Open("R") if 'sc { - if verbose d $System.OBJ.DisplayError(sc) return + if verbose do $System.OBJ.DisplayError(sc) return } While 'file.AtEnd { - s filtermask($I(filtermask))=file.ReadLine() + set filtermask($I(filtermask))=file.ReadLine() } quit } @@ -290,12 +299,12 @@ ClassMethod setIgnore(ByRef filtermask) ClassMethod workdir(workdir) { set:$d(workdir) workdir = ##class(%File).NormalizeDirectory(workdir) - s gln = ..gln() - s:$d(workdir) @gln = workdir + set gln = ..gln() + set:$d(workdir) @gln = workdir ///zu(12) namespace directory by default #define nsdir $zu(12,"") - Q $g(@gln, $$$nsdir) + return $g(@gln, $$$nsdir) } /// gl[obal] n[ame] - storage for settings @@ -306,31 +315,31 @@ ClassMethod gln() [ CodeMode = expression, Private ] ClassMethod init(confile = "isc.json") { - q:..workdir()="" "workdir is empty" - q:'##class(%File).Exists(..workdir()_confile) "configuration file: "_confile_" not found in "_..workdir() + quit:..workdir()="" "workdir is empty" + quit:'##class(%File).Exists(..workdir()_confile) "configuration file: "_confile_" not found in "_..workdir() - s stream=##class(%Stream.FileCharacter).%New() - s sc=stream.LinkToFile(..workdir()_confile) - s conf={}.%FromJSON(stream.Read($$$MaxCacheInt)) + set stream=##class(%Stream.FileCharacter).%New() + set sc=stream.LinkToFile(..workdir()_confile) + set conf={}.%FromJSON(stream.Read($$$MaxCacheInt)) - s gln = "^dev.code" + set gln = "^dev.code" - s @gln@("compileList")=conf.compileList - s @gln@("projectName")=conf.projectName - s @gln@("owner")=conf.owner - s @gln@("repository")=conf.repository - s @gln@("user")=conf.user - s @gln@("password")=conf.password - s @gln@("git")=conf.git - s:@gln@("git")="" @gln@("git")=0 + set @gln@("compileList")=conf.compileList + set @gln@("projectName")=conf.projectName + set @gln@("owner")=conf.owner + set @gln@("repository")=conf.repository + set @gln@("user")=conf.user + set @gln@("password")=conf.password + set @gln@("git")=conf.git + set:@gln@("git")="" @gln@("git")=0 - w "compileList="_conf.compileList,! - w "projectName="_conf.projectName,! - w "owner="_conf.owner,! - w "repository="_conf.repository,! - w "user="_conf.user,! - w "password="_conf.password,! - w "git="_conf.git,! + write "compileList="_conf.compileList,! + write "projectName="_conf.projectName,! + write "owner="_conf.owner,! + write "repository="_conf.repository,! + write "user="_conf.user,! + write "password="_conf.password,! + write "git="_conf.git,! quit $$$OK } @@ -338,22 +347,22 @@ ClassMethod init(confile = "isc.json") /// export release file for list and project settings ClassMethod release() { - s gln=..gln() - s list=$G(@gln@("compileList")) - if list="" w "Nothing to release. Run init method first" quit - - s release=$G(@gln@("projectName"),"release") - s release=release_$p($zdt($h,8)," ")_$tr($p($p($zdt($h)," ",2),":",1,2),":")_".xml" - D $System.OBJ.Export(list,release) - w "All objects with mask "_list_" has been exported to "_release + set gln=..gln() + set list=$G(@gln@("compileList")) + if list="" write "Nothing to release. Run init method first" quit + + set release=$G(@gln@("projectName"),"release") + set release=release_$p($zdt($h,8)," ")_$tr($p($p($zdt($h)," ",2),":",1,2),":")_".xml" + do $System.OBJ.Export(list,release) + write "All objects with mask "_list_" has been exported to "_release } ClassMethod compile() { - s gln=..gln() - s list=$G(@gln@("compileList")) - if list="" w "Nothing to compile. Run init method first" quit - d $System.OBJ.compile(list) + set gln=..gln() + set list=$G(@gln@("compileList")) + if list="" write "Nothing to compile. Run init method first" quit + do $System.OBJ.compile(list) } /// test.dfi -> /dfi/test.dfi @@ -364,36 +373,38 @@ ClassMethod filename(code) { #define log(%dir,%sc) w !, "mkdir ", %dir, " ", sc - s wd = ..workdir() + set wd = ..workdir() if '##class(%File).DirectoryExists( wd ) { - s sc = ##class(%File).CreateDirectoryChain( wd ) + set sc = ##class(%File).CreateDirectoryChain( wd ) $$$log(wd,sc) } - s ext = $p( code, ".", * ), ext = $zcvt( ext, "l" ) + set ext = $p( code, ".", * ), ext = $zcvt( ext, "l" ) #; for each type - different directory - s:ext'="" wd = ##class(%File).NormalizeDirectory( ext, wd ) + set:ext'="" wd = ##class(%File).NormalizeDirectory( ext, wd ) #; directory must exist before any call (%File).NormalizeFilename( , wd) - if '##class(%File).DirectoryExists( wd ) { - s sc = ##class(%File).CreateDirectoryChain( wd ) + if '##class(%File).DirectoryExists( wd ) + { + set sc = ##class(%File).CreateDirectoryChain( wd ) $$$log(wd,sc) } - s filename = ##class(%File).NormalizeFilename( code, wd ) + set filename = ##class(%File).NormalizeFilename( code, wd ) #; lowercase file extension - s $p(filename,".",*)=ext + set $p(filename,".",*)=ext //B:code="DPRep.Rest.JSON.cls" "L" #; for *.cls Package.Subpackage.ClassName.cls -> Folder/Subfolder/ClassName.cls - if (ext="cls") || (ext="gbl") { - s dirs = $piece( code, ".",1, *-2 ), dirs = $translate( dirs, ".", "/" ) - s relpath = dirs _ "/" _ $piece( code, ".", *-1, * ) ; - s filename = ##class(%File).NormalizeFilename( relpath, wd ) + if (ext="cls") || (ext="gbl") + { + set dirs = $piece( code, ".",1, *-2 ), dirs = $translate( dirs, ".", "/" ) + set relpath = dirs _ "/" _ $piece( code, ".", *-1, * ) ; + set filename = ##class(%File).NormalizeFilename( relpath, wd ) } - Q filename + return filename } /// import from workdir all files with ts newer than code ts in db @@ -404,108 +415,110 @@ ClassMethod importUpdated(filemask = "*.*", qspec = "cku-d", ByRef err = "", rec #define isDirectory(%type) ( %type = "D" ) #define log w !, $piece(filename,..workdir(),2)," " w:sc "Ok" d:'sc $system.OBJ.DisplayError( sc ) - s sc = 1, dirs = "", dir = ..workdir() $$$push(dir) - if verbose w "#; Importing updated from ", dir,! - d ..setIgnore(.fm) - for { $$$next(i,dir) Q:i="" Q:dir="" + set sc = 1, dirs = "", dir = ..workdir() $$$push(dir) + if verbose write "#; Importing updated from ", dir,! + do ..setIgnore(.fm) + for + { + $$$next(i,dir) quit:i="" quit:dir="" - s rs = ##class(%File).FileSetFunc( dir, filemask, , 1 ) + set rs = ##class(%File).FileSetFunc( dir, filemask, , 1 ) - while rs.%Next() { - s filename = rs.Name + while rs.%Next() + { + set filename = rs.Name - if $$$isDirectory( rs.Type ) { - if ( recurse ) $$$push(filename) ;push directory - continue - } + if $$$isDirectory( rs.Type ) + { + if ( recurse ) $$$push(filename) ;push directory + continue + } // check file filter if ..inFilter(.fm,filename) continue - s filets = rs.DateModified - s codename = ..codename( filename, .ext ) - s codets = ..codets( codename, ext ) - - #; w !, filename, $c(9), "(", filets, ")" - #; w !, codename, $c(9), "(", codets, ")" - - if ( filets '] codets ) continue - - if (ext = "dfi"){ - s sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded ) - } else { - - #; drop existing code before import ( purge DateModified ) - #; s:codets'="" sc = ##class(%RoutineMgr).Delete( codename ) - k err s sc = $system.OBJ.Load( filename, qspec, .err, .loaded) - - } - - if verbose $$$log + set filets = rs.DateModified + set codename = ..codename( filename, .ext ) + set codets = ..codets( codename, ext ) + + if ( filets '] codets ) continue + + if (ext = "dfi"){ + set sc = ##class(%DeepSee.UserLibrary.Utils).%Import( filename, 1, 0, 0, "", .dsloaded ) + } else + { + #; drop existing code before import ( purge DateModified ) + #; s:codets'="" sc = ##class(%RoutineMgr).Delete( codename ) + kill err + set sc = $system.OBJ.Load( filename, qspec, .err, .loaded) + } + if verbose $$$log } } - w:verbose !,"#; Imported updated from ", ..workdir() - Q sc + write:verbose !,"#; Imported updated from ", ..workdir() + return sc } /// presumable codename ClassMethod codename(filename, ByRef ext = "") { - s ext = $p( filename, ".", * ), ext = $zcvt( ext, "l" ) - s path = ##class(%File).NormalizeDirectory( ext, ..workdir() ) - s codename = $p( filename, path, 2 ) + set ext = $p( filename, ".", * ), ext = $zcvt( ext, "l" ) + set path = ##class(%File).NormalizeDirectory( ext, ..workdir() ) + set codename = $p( filename, path, 2 ) if ext = "dfi" { - s fullname = $tr( codename, "\", "/" ) ; return fullname for dfi in $$$IsWINDOWS - Q $p( fullname, ".", 1, *-1 ) ;remove extension + set fullname = $tr( codename, "\", "/" ) ; return fullname for dfi in $$$IsWINDOWS + quit $p( fullname, ".", 1, *-1 ) ;remove extension } if (ext ="cls")!(ext="int")!(ext="inc")!(ext="mac") s codename=$tr(codename,"\/","..") - Q codename + quit codename } ClassMethod codets(codename, ext) { - s ts = "" + set ts = "" if ext'="dfi" { - s ts = ##class(%RoutineMgr).TS( codename ) - } else { - s sql="Select timeModified From %DeepSee_UserLibrary.FolderItem Where fullname = ?" - s rs = ##class(%SQL.Statement).%ExecDirect( , sql, codename ) - if rs.%Next() { - s utcts = rs.timeModified - s utch = $zdth( utcts, 3, , 3 ) ;utc internal format - s loch = $zdth( utch, -3 ) ; utc to local timezone - s ts = $zdt( loch, 3, ,0 ) ; local timestamp*/ + set ts = ##class(%RoutineMgr).TS( codename ) + } else + { + set sql="Select timeModified From %DeepSee_UserLibrary.FolderItem Where fullname = ?" + set rs = ##class(%SQL.Statement).%ExecDirect( , sql, codename ) + if rs.%Next() + { + set utcts = rs.timeModified + set utch = $zdth( utcts, 3, , 3 ) ;utc internal format + set loch = $zdth( utch, -3 ) ; utc to local timezone + set ts = $zdt( loch, 3, ,0 ) ; local timestamp*/ } } - Q $p( ts, "." ) ;remove ms + return $p( ts, "." ) ;remove ms } // fix "-" into dfi files ClassMethod fixDashIntoName() { - s sql = "Select id, fullName as Name, documentName From %DeepSee_UserLibrary.FolderItem" - s rs = ##class(%SQL.Statement).%ExecDirect( .stm, sql ) + set sql = "Select id, fullName as Name, documentName From %DeepSee_UserLibrary.FolderItem" + set rs = ##class(%SQL.Statement).%ExecDirect( .stm, sql ) while rs.%Next() { if $find(rs.Name, "-"){ - w rs.Name," -> " + write rs.Name," -> " set item = ##class(%DeepSee.UserLibrary.FolderItem).%OpenId(rs.id) set item.name = $replace(item.name,"-"," ") - w item.name,! + write item.name,! do item.%Save() } } - k rs + kill rs } ClassMethod mkdir(filename As %String) As %Status { - s sc = $$$OK - s path = ##class(%File).GetDirectory(filename) + set sc = $$$OK + set path = ##class(%File).GetDirectory(filename) if '##class(%File).DirectoryExists(path) { - s sc = ##class(%File).CreateDirectoryChain(path) - w !, "mkdir ", path, " ", sc + set sc = ##class(%File).CreateDirectoryChain(path) + write !, "mkdir ", path, " ", sc } return sc } diff --git a/cls/dev/deepsee.cls b/src/cls/dev/deepsee.cls similarity index 100% rename from cls/dev/deepsee.cls rename to src/cls/dev/deepsee.cls diff --git a/cls/dev/diff/gitHub.cls b/src/cls/dev/diff/gitHub.cls similarity index 100% rename from cls/dev/diff/gitHub.cls rename to src/cls/dev/diff/gitHub.cls diff --git a/cls/dev/diff/gitLocal.cls b/src/cls/dev/diff/gitLocal.cls similarity index 100% rename from cls/dev/diff/gitLocal.cls rename to src/cls/dev/diff/gitLocal.cls diff --git a/cls/dev/diff/utils.cls b/src/cls/dev/diff/utils.cls similarity index 100% rename from cls/dev/diff/utils.cls rename to src/cls/dev/diff/utils.cls